diff options
author | Sam <git@s-mc.io> | 2023-06-03 22:55:31 +1200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-03 12:55:31 +0200 |
commit | c45dbf23becb5b90c78d76360a70fb468e0797d1 (patch) | |
tree | 66bf9d2a85898e0e74e8a0ba3b3e2657820bfba1 /tests | |
parent | e1928947d0ec73dc6078f8063ab42f8f427353fb (diff) |
added org secrets api (#384)
Diffstat (limited to 'tests')
-rw-r--r-- | tests/org_secrets_test.rs | 189 | ||||
-rw-r--r-- | tests/resources/org_public_key.json | 4 | ||||
-rw-r--r-- | tests/resources/org_secret.json | 7 | ||||
-rw-r--r-- | tests/resources/org_secrets.json | 24 |
4 files changed, 224 insertions, 0 deletions
diff --git a/tests/org_secrets_test.rs b/tests/org_secrets_test.rs new file mode 100644 index 0000000..dff9e36 --- /dev/null +++ b/tests/org_secrets_test.rs @@ -0,0 +1,189 @@ +// Tests for calls to the /repos/{owner}/actions/secrets API. +mod mock_error; + +use chrono::DateTime; +use mock_error::setup_error_handler; +use octocrab::{ + models::{ + orgs::secrets::{ + CreateOrganizationSecret, CreateOrganizationSecretResponse, OrganizationSecret, + OrganizationSecrets, Visibility, + }, + PublicKey, + }, + Octocrab, +}; +use wiremock::{ + matchers::{method, path}, + Mock, MockServer, ResponseTemplate, +}; + +const ORG: &str = "org"; + +async fn setup_get_api(template: ResponseTemplate, secrets_path: &str) -> MockServer { + let mock_server = MockServer::start().await; + + Mock::given(method("GET")) + .and(path(format!("/orgs/{ORG}/actions/secrets{secrets_path}"))) + .respond_with(template) + .mount(&mock_server) + .await; + setup_error_handler( + &mock_server, + &format!("GET on /orgs/{ORG}/actions/secrets{secrets_path} was not received"), + ) + .await; + mock_server +} + +async fn setup_put_api(template: ResponseTemplate, secrets_path: &str) -> MockServer { + let mock_server = MockServer::start().await; + + Mock::given(method("PUT")) + .and(path(format!("/orgs/{ORG}/actions/secrets{secrets_path}"))) + .respond_with(template) + .mount(&mock_server) + .await; + setup_error_handler( + &mock_server, + &format!("GET on /orgs/{ORG}/actions/secrets{secrets_path} was not received"), + ) + .await; + mock_server +} + +fn setup_octocrab(uri: &str) -> Octocrab { + Octocrab::builder().base_uri(uri).unwrap().build().unwrap() +} + +#[tokio::test] +async fn should_return_org_secrets() { + let org_secrets: OrganizationSecrets = + serde_json::from_str(include_str!("resources/org_secrets.json")).unwrap(); + + let template = ResponseTemplate::new(200).set_body_json(&org_secrets); + let mock_server = setup_get_api(template, "").await; + let client = setup_octocrab(&mock_server.uri()); + let org = client.orgs(ORG.to_owned()); + let secrets = org.secrets(); + let result = secrets.get_secrets().await; + assert!( + result.is_ok(), + "expected successful result, got error: {:#?}", + result + ); + let item = result.unwrap(); + + assert_eq!(item.total_count, 3); + assert_eq!(item.secrets,vec![ + OrganizationSecret { + name: String::from("GIST_ID"), + created_at: DateTime::parse_from_rfc3339("2019-08-10T14:59:22Z").unwrap().into(), + updated_at: DateTime::parse_from_rfc3339("2020-01-10T14:59:22Z").unwrap().into(), + visibility: Visibility::Private, + selected_repositories_url: None, + }, + OrganizationSecret { + name: String::from("DEPLOY_TOKEN"), + created_at: DateTime::parse_from_rfc3339("2019-08-10T14:59:22Z").unwrap().into(), + updated_at: DateTime::parse_from_rfc3339("2020-01-10T14:59:22Z").unwrap().into(), + visibility: Visibility::All, + selected_repositories_url: None, + }, + OrganizationSecret { + name: String::from("GH_TOKEN"), + created_at: DateTime::parse_from_rfc3339("2019-08-10T14:59:22Z").unwrap().into(), + updated_at: DateTime::parse_from_rfc3339("2020-01-10T14:59:22Z").unwrap().into(), + visibility: Visibility::Selected, + selected_repositories_url: Some(String::from("https://api.github.com/orgs/octo-org/actions/secrets/SUPER_SECRET/repositories")), + }, + ] + ); +} + +#[tokio::test] +async fn should_return_org_public_key() { + let org_secrets: PublicKey = + serde_json::from_str(include_str!("resources/org_public_key.json")).unwrap(); + + let template = ResponseTemplate::new(200).set_body_json(&org_secrets); + let mock_server = setup_get_api(template, "/public-key").await; + let client = setup_octocrab(&mock_server.uri()); + let org = client.orgs(ORG.to_owned()); + let secrets = org.secrets(); + let result = secrets.get_public_key().await; + assert!( + result.is_ok(), + "expected successful result, got error: {:#?}", + result + ); + let item = result.unwrap(); + + assert_eq!(item.key_id, String::from("012345678912345678")); + assert_eq!( + item.key, + String::from("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvv1234") + ); +} + +#[tokio::test] +async fn should_return_org_secret() { + let org_secrets: OrganizationSecret = + serde_json::from_str(include_str!("resources/org_secret.json")).unwrap(); + + let template = ResponseTemplate::new(200).set_body_json(&org_secrets); + let mock_server = setup_get_api(template, "/GH_TOKEN").await; + let client = setup_octocrab(&mock_server.uri()); + let org = client.orgs(ORG.to_owned()); + let secrets = org.secrets(); + let result = secrets.get_secret("GH_TOKEN").await; + assert!( + result.is_ok(), + "expected successful result, got error: {:#?}", + result + ); + let item = result.unwrap(); + assert_eq!( + item, + OrganizationSecret { + name: String::from("GH_TOKEN"), + created_at: DateTime::parse_from_rfc3339("2019-08-10T14:59:22Z") + .unwrap() + .into(), + updated_at: DateTime::parse_from_rfc3339("2020-01-10T14:59:22Z") + .unwrap() + .into(), + visibility: Visibility::Selected, + selected_repositories_url: Some(String::from( + "https://api.github.com/orgs/octo-org/actions/secrets/SUPER_SECRET/repositories" + )), + } + ); +} + +#[tokio::test] +async fn should_add_secret() { + let template = ResponseTemplate::new(201); + let mock_server = setup_put_api(template, "/GH_TOKEN").await; + let client = setup_octocrab(&mock_server.uri()); + let org = client.orgs(ORG.to_owned()); + let secrets = org.secrets(); + let result = secrets + .create_or_update_secret( + "GH_TOKEN", + &CreateOrganizationSecret { + key_id: "123456", + encrypted_value: "some-b64-string", + visibility: Visibility::Selected, + selected_repository_ids: None, + }, + ) + .await; + assert!( + result.is_ok(), + "expected successful result, got error: {:#?}", + result + ); + let item = result.unwrap(); + assert_eq!(item, CreateOrganizationSecretResponse::Created); +} diff --git a/tests/resources/org_public_key.json b/tests/resources/org_public_key.json new file mode 100644 index 0000000..b0bac2f --- /dev/null +++ b/tests/resources/org_public_key.json @@ -0,0 +1,4 @@ +{ + "key_id": "012345678912345678", + "key": "2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvv1234" +} diff --git a/tests/resources/org_secret.json b/tests/resources/org_secret.json new file mode 100644 index 0000000..333aa7d --- /dev/null +++ b/tests/resources/org_secret.json @@ -0,0 +1,7 @@ +{ + "name": "GH_TOKEN", + "created_at": "2019-08-10T14:59:22Z", + "updated_at": "2020-01-10T14:59:22Z", + "visibility": "selected", + "selected_repositories_url": "https://api.github.com/orgs/octo-org/actions/secrets/SUPER_SECRET/repositories" +} diff --git a/tests/resources/org_secrets.json b/tests/resources/org_secrets.json new file mode 100644 index 0000000..12268e8 --- /dev/null +++ b/tests/resources/org_secrets.json @@ -0,0 +1,24 @@ +{ + "total_count": 3, + "secrets": [ + { + "name": "GIST_ID", + "created_at": "2019-08-10T14:59:22Z", + "updated_at": "2020-01-10T14:59:22Z", + "visibility": "private" + }, + { + "name": "DEPLOY_TOKEN", + "created_at": "2019-08-10T14:59:22Z", + "updated_at": "2020-01-10T14:59:22Z", + "visibility": "all" + }, + { + "name": "GH_TOKEN", + "created_at": "2019-08-10T14:59:22Z", + "updated_at": "2020-01-10T14:59:22Z", + "visibility": "selected", + "selected_repositories_url": "https://api.github.com/orgs/octo-org/actions/secrets/SUPER_SECRET/repositories" + } + ] +} |