From f62dc3b44fde834e54d8f38e2f66c6670696169b Mon Sep 17 00:00:00 2001 From: Austin Lucas Lake Date: Sat, 15 Mar 2025 12:51:01 -0700 Subject: [PATCH] updated tests --- plugins/modules/github_gpg_key.py | 2 +- .../targets/github_gpg_key/aliases | 3 +- .../targets/github_gpg_key/tasks/main.yml | 10 +- .../targets/github_gpg_key/vars/main.yml | 5 +- .../plugins/modules/test_github_gpg_key.py | 128 ++---------------- 5 files changed, 25 insertions(+), 123 deletions(-) diff --git a/plugins/modules/github_gpg_key.py b/plugins/modules/github_gpg_key.py index 48c0728422..ffd7855bc2 100644 --- a/plugins/modules/github_gpg_key.py +++ b/plugins/modules/github_gpg_key.py @@ -253,7 +253,7 @@ def ensure_gpg_key_present(headers, name, armored_public_key, check_mode): new_key = json.loads(response.json()) if check_mode and new_key: response = open_url( - url=GITHUB_GPG_REST_API_URL + '/' + new_key['key_id'], + url=GITHUB_GPG_REST_API_URL + '/' + new_key['id'], method='DELETE', headers=headers ) diff --git a/tests/integration/targets/github_gpg_key/aliases b/tests/integration/targets/github_gpg_key/aliases index 428e8289dc..f767ca0d6d 100644 --- a/tests/integration/targets/github_gpg_key/aliases +++ b/tests/integration/targets/github_gpg_key/aliases @@ -1,6 +1,7 @@ -# Copyright (c) Ansible Project +# Copyright (c) 2024-2025, Austin Lucas Lake # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) # SPDX-License-Identifier: GPL-3.0-or-later +unsupported azp/posix/1 destructive diff --git a/tests/integration/targets/github_gpg_key/tasks/main.yml b/tests/integration/targets/github_gpg_key/tasks/main.yml index f1faa4d267..43b83427ba 100644 --- a/tests/integration/targets/github_gpg_key/tasks/main.yml +++ b/tests/integration/targets/github_gpg_key/tasks/main.yml @@ -3,7 +3,7 @@ # and should not be used as examples of how to write Ansible roles # #################################################################### -# Test code for the github_issue module. +# Test code for the github_gpg_key module. # # Copyright (c) 2024-2025, Austin Lucas Lake # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) @@ -14,15 +14,17 @@ token: "{{ token }}" name: "{{ name }}" armored_gpg_key: "{{ armored_gpg_key }}" - register: created_gpg_key + register: key1 - name: Delete GPG key github_gpg_key: state: absent token: "{{ token }}" name: "{{ name }}" - register: deleted_gpg_key + register: key2 - assert: that: - - created_gpg_key.id == deleted_gpg_key[0].id + - key1.new_key.name == key2.deleted_key.name + - key1.new_key.key_id == key2.deleted_key.key_id + - key1.new_key.raw_key == key2.deleted_key.raw_key diff --git a/tests/integration/targets/github_gpg_key/vars/main.yml b/tests/integration/targets/github_gpg_key/vars/main.yml index cca21095ef..343b4c1a11 100644 --- a/tests/integration/targets/github_gpg_key/vars/main.yml +++ b/tests/integration/targets/github_gpg_key/vars/main.yml @@ -1,8 +1,9 @@ --- -# Copyright (c) Ansible Project +# Copyright (c) 2024-2025, Austin Lucas Lake # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) # SPDX-License-Identifier: GPL-3.0-or-later token: # TODO -name: # TODO +name: My GPG key armored_public_key: # TODO +gpg_key_id: # TODO diff --git a/tests/unit/plugins/modules/test_github_gpg_key.py b/tests/unit/plugins/modules/test_github_gpg_key.py index e8ec9fc77e..229b21fb35 100644 --- a/tests/unit/plugins/modules/test_github_gpg_key.py +++ b/tests/unit/plugins/modules/test_github_gpg_key.py @@ -9,60 +9,12 @@ __metaclass__ = type import json import datetime from httmock import with_httmock, urlmatch, response -from ansible.module_utils.basic import AnsibleModule from ansible_collections.community.general.tests.unit.compat import unittest from ansible_collections.community.general.plugins.modules import github_gpg_key GITHUB_MINIMUM_PYTHON_VERSION = (2, 7) -@urlmatch(netloc=r'.*') -def debug_mock(url, request): - print(request.original.__dict__) - - -@urlmatch(netloc=r'api\.github\.com(:[0-9]+)?$', path=r'/user/gpg_keys', method="get") -def list_gpg_keys_mock(url, request): - # https://docs.github.com/en/rest/reference/repos#get-a-repository - headers = {'content-type': 'application/json'} - content = [{ - "id": 3, - "name": "Octocat's GPG Key", - "primary_key_id": 2, - "key_id": "3262EFF25BA0D270", - "public_key": "xsBNBFayYZ...", - "emails": [{ - "email": "octocat@users.noreply.github.com", - "verified": True - }], - "subkeys": [{ - "id": 4, - "primary_key_id": 3, - "key_id": "4A595D4C72EE49C7", - "public_key": "zsBNBFayYZ...", - "emails": [], - "can_sign": False, - "can_encrypt_comms": True, - "can_encrypt_storage": True, - "can_certify": False, - "created_at": "2016-03-24T11:31:04-06:00", - "expires_at": "2016-03-24T11:31:04-07:00", - "revoked": False - }], - "can_sign": True, - "can_encrypt_comms": False, - "can_encrypt_storage": False, - "can_certify": True, - "created_at": "2016-03-24T11:31:04-06:00", - "expires_at": "2016-03-24T11:31:04-07:00", - "revoked": False, - "raw_key": "string" - }] - - content = json.dumps(content).encode("utf-8") - return response(200, content, headers, None, 5, request) - - @urlmatch(netloc=r'api\.github\.com(:[0-9]+)?$', path=r'/user/gpg_keys', method="post") def create_gpg_key_mock(url, request): gpg_key = json.loads(request.body) @@ -73,7 +25,7 @@ def create_gpg_key_mock(url, request): # https://docs.github.com/en/rest/reference/repos#create-a-repository-for-the-authenticated-user content = { "id": 3, - "name": gpg_key["name"], + "name": gpg_key.get("name"), "primary_key_id": 2, "key_id": "3262EFF25BA0D270", "public_key": "xsBNBFayYZ...", @@ -111,31 +63,15 @@ def create_gpg_key_mock(url, request): @urlmatch(netloc=r'api\.github\.com(:[0-9]+)?$', path=r'/user/gpg_keys/.*', method="delete") def delete_gpg_key_mock(url, request): # https://docs.github.com/en/rest/users/gpg-keys#delete-a-gpg-key-for-the-authenticated-user - return response(204, None, None, None, 5, request) - - -@urlmatch(netloc=r'api\.github\.com(:[0-9]+)?$', path=r'/user/gpg_keys/.*', method="delete") -def delete_gpg_key_notfound_mock(url, request): - # https://docs.github.com/en/rest/users/gpg-keys#delete-a-gpg-key-for-the-authenticated-user - return response(404, "{\"message\": \"Not Found\"}", "", "Not Found", 5, request) + headers = {'content-type': 'application/json'} + content = { + "id": json.loads(request.read()).get("gpg_key_id") + } + return response(204, content, headers, None, 5, request) class TestGithubRepo(unittest.TestCase): def setUp(self): -<<<<<<< Updated upstream - self.module = AnsibleModule( - argument_spec=dict( - state=dict(type='str', default='present', choice=['present', 'absent']), - token=dict(type='str', required=True, no_log=True), - name=dict(type='str', required=True), - armored_public_key=dict(type='str', no_log=True), - force=dict(type='bool', default=True) - ), - supports_check_mode=True, - required_if=[ - ['state', 'present', ['armored_public_key']], - ] -======= self.token = "github_access_token" self.name = "GPG public key" self.armored_public_key = "-----BEGIN PGP PUBLIC KEY BLOCK-----\r\n\n\nMy ASCII-armored GPG public key\r\n-----END PGP PUBLIC KEY BLOCK-----" @@ -151,62 +87,24 @@ class TestGithubRepo(unittest.TestCase): armored_public_key=self.armored_public_key ), check_mode=False ->>>>>>> Stashed changes ) - @with_httmock(list_gpg_keys_mock) - @with_httmock(create_gpg_key_mock) - def test_create_gpg_key_repo(self): + self.assertEqual(result['changed'], False) + self.assertEqual(result['name'], self.name) + self.assertEqual(result['raw_key'], self.armored_public_key) + + @with_httmock(delete_gpg_key_mock) + def test_delete_gpg_key(self): result = github_gpg_key.run_module( params=dict( -<<<<<<< Updated upstream - token="github_access_token", - name="GPG public key", - armored_public_key="-----BEGIN PGP PUBLIC KEY BLOCK-----\r\n\n\nMy ASCII-armored GPG public key\r\n-----END PGP PUBLIC KEY BLOCK-----", - state="present", - force=True - ) -======= state="absent", token=self.token, gpg_key_id=self.gpg_key_id ), check_mode=False ->>>>>>> Stashed changes - ) - self.assertEqual(result['changed'], True) - self.assertEqual(result['key']['name'], 'GPG public key') - - @with_httmock(list_gpg_keys_mock) - @with_httmock(delete_gpg_key_mock) - def test_delete_user_repo(self): - result = github_gpg_key.run_module( - module=self.module, - params=dict( - token="github_access_token", - name="GPG public key", - armored_public_key="-----BEGIN PGP PUBLIC KEY BLOCK-----\r\n\n\nMy ASCII-armored GPG public key\r\n-----END PGP PUBLIC KEY BLOCK-----", - state="absent", - force=True - ) - ) - self.assertEqual(result['changed'], True) - - @with_httmock(list_gpg_keys_mock) - @with_httmock(delete_gpg_key_notfound_mock) - def test_delete_gpg_key_notfound(self): - result = github_gpg_key.run_module( - module=self.module, - params=dict( - token="github_access_token", - name="GPG public key", - armored_public_key="-----BEGIN PGP PUBLIC KEY BLOCK-----\r\n\n\nMy ASCII-armored GPG public key\r\n-----END PGP PUBLIC KEY BLOCK-----", - state="absent", - force=True - ) ) self.assertEqual(result['changed'], False) - + self.assertEqual(result['id'], self.gpg_key_id) if __name__ == "__main__":