diff options
author | Mike Stemle <hello@mikestemle.com> | 2024-01-26 01:58:15 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-26 07:58:15 +0100 |
commit | d42c0a3580b2588d5b936e903a4a4df0bb3154d6 (patch) | |
tree | 255f8b9dc6034081aa2e8b9a6e5ff9d9016b6553 /tests | |
parent | 5caca0808e85523832a3bfe470e917ff0b53ee3c (diff) |
Tests for locking and unlocking issue comments (#557)
Diffstat (limited to 'tests')
-rw-r--r-- | tests/issues_locking_test.rs | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/tests/issues_locking_test.rs b/tests/issues_locking_test.rs new file mode 100644 index 0000000..866638a --- /dev/null +++ b/tests/issues_locking_test.rs @@ -0,0 +1,162 @@ +mod mock_error; + +use mock_error::setup_error_handler; +use octocrab::{params::LockReason, Octocrab}; +use wiremock::{ + matchers::{method, path}, + Mock, MockServer, ResponseTemplate, +}; + +async fn setup_issue_lock_api(template: ResponseTemplate) -> MockServer { + let owner: &str = "org"; + let repo: &str = "some-repo"; + let issue_number: u64 = 123; + + let mock_server = MockServer::start().await; + + Mock::given(method("PUT")) + .and(path(format!( + "/repos/{owner}/{repo}/issues/{issue_number}/lock" + ))) + .respond_with(template.clone()) + .mount(&mock_server) + .await; + + setup_error_handler( + &mock_server, + &format!("PUT on /repos/{owner}/{repo}/issues/{issue_number}/lock was not received"), + ) + .await; + mock_server +} + +async fn setup_issue_unlock_api(template: ResponseTemplate) -> MockServer { + let owner: &str = "org"; + let repo: &str = "some-repo"; + let issue_number: u64 = 123; + + let mock_server = MockServer::start().await; + + Mock::given(method("DELETE")) + .and(path(format!( + "/repos/{owner}/{repo}/issues/{issue_number}/lock" + ))) + .respond_with(template.clone()) + .mount(&mock_server) + .await; + + setup_error_handler( + &mock_server, + &format!("DELETE on /repos/{owner}/{repo}/issues/{issue_number}/lock was not received"), + ) + .await; + mock_server +} + +fn setup_octocrab(uri: &str) -> Octocrab { + Octocrab::builder().base_uri(uri).unwrap().build().unwrap() +} + +const OWNER: &str = "org"; +const REPO: &str = "some-repo"; +const ISSUE_NUMBER: u64 = 123; + +#[tokio::test] +async fn lock_no_reason_returns_true() { + let template = ResponseTemplate::new(204); + let mock_server = setup_issue_lock_api(template).await; + let client = setup_octocrab(&mock_server.uri()); + + let result = client + .issues(OWNER.to_owned(), REPO.to_owned()) + .lock(ISSUE_NUMBER, None) + .await; + + assert!( + result.is_ok(), + "expected successful result, got error: {:#?}", + result + ); + let result = result.unwrap(); + assert!(result, "expected the result to be true: {}", result); +} + +#[tokio::test] +async fn lock_with_reason_returns_true() { + let template = ResponseTemplate::new(204); + let mock_server = setup_issue_lock_api(template).await; + let client = setup_octocrab(&mock_server.uri()); + + let result = client + .issues(OWNER.to_owned(), REPO.to_owned()) + .lock(ISSUE_NUMBER, Some(LockReason::TooHeated)) + .await; + + assert!( + result.is_ok(), + "expected successful result, got error: {:#?}", + result + ); + let result = result.unwrap(); + assert!(result, "expected the result to be true: {}", result); +} + +#[tokio::test] +async fn lock_no_reason_returns_false() { + let template = ResponseTemplate::new(404); + let mock_server = setup_issue_lock_api(template).await; + let client = setup_octocrab(&mock_server.uri()); + + let result = client + .issues(OWNER.to_owned(), REPO.to_owned()) + .lock(ISSUE_NUMBER, Some(LockReason::TooHeated)) + .await; + + assert!( + result.is_ok(), + "expected successful result, got error: {:#?}", + result + ); + let result = result.unwrap(); + assert!(!result, "expected the result to be false: {}", result); +} + +#[tokio::test] +async fn unlock_returns_true() { + let template = ResponseTemplate::new(204); + let mock_server = setup_issue_unlock_api(template).await; + let client = setup_octocrab(&mock_server.uri()); + + let result = client + .issues(OWNER.to_owned(), REPO.to_owned()) + .unlock(ISSUE_NUMBER) + .await; + + assert!( + result.is_ok(), + "expected successful result, got error: {:#?}", + result + ); + let result = result.unwrap(); + assert!(result, "expected the result to be true: {}", result); +} + +#[tokio::test] +async fn lock_returns_false() { + let template = ResponseTemplate::new(404); + let mock_server = setup_issue_unlock_api(template).await; + let client = setup_octocrab(&mock_server.uri()); + + let result = client + .issues(OWNER.to_owned(), REPO.to_owned()) + .unlock(ISSUE_NUMBER) + .await; + + assert!( + result.is_ok(), + "expected successful result, got error: {:#?}", + result + ); + let result = result.unwrap(); + assert!(!result, "expected the result to be false: {}", result); +} |