summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSam <git@s-mc.io>2023-06-03 22:55:31 +1200
committerGitHub <noreply@github.com>2023-06-03 12:55:31 +0200
commitc45dbf23becb5b90c78d76360a70fb468e0797d1 (patch)
tree66bf9d2a85898e0e74e8a0ba3b3e2657820bfba1 /tests
parente1928947d0ec73dc6078f8063ab42f8f427353fb (diff)
added org secrets api (#384)
Diffstat (limited to 'tests')
-rw-r--r--tests/org_secrets_test.rs189
-rw-r--r--tests/resources/org_public_key.json4
-rw-r--r--tests/resources/org_secret.json7
-rw-r--r--tests/resources/org_secrets.json24
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"
+ }
+ ]
+}