From cbe836dc166d92487193f6180772ffc4b9c3231a Mon Sep 17 00:00:00 2001 From: Phellippe Lima Date: Wed, 15 May 2024 16:28:34 +0100 Subject: [PATCH] CP-2063 - Adds request/response model construction tests --- credentials/test/test_credentials_api.py | 236 +++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 credentials/test/test_credentials_api.py diff --git a/credentials/test/test_credentials_api.py b/credentials/test/test_credentials_api.py new file mode 100644 index 00000000..b44dee10 --- /dev/null +++ b/credentials/test/test_credentials_api.py @@ -0,0 +1,236 @@ +# coding: utf-8 + +""" + Credentials API + + Manage credentials for transaction tests using the Credentials API. The following permissions are required to access Credentials API endpoints: * `Settings Tests Read` for read operations. * `Settings Tests Update` for write operations. * `View sensitive data in web transaction scripts` to view the encrypted value property of credentials. * `Settings Tests Create Transaction (Tx) Tests` to create credentials. For more information about credentials, see [Working With Secure Credentials](https://docs.thousandeyes.com/product-documentation/browser-synthetics/transaction-tests/getting-started/working-with-secure-credentials). + + The version of the OpenAPI document: 7.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import unittest +import credentials.models + +from credentials.api.credentials_api import CredentialsApi +from pydantic import BaseModel + + +class TestCredentialsApi(unittest.TestCase): + """CredentialsApi unit test stubs""" + + def setUp(self) -> None: + self.api = CredentialsApi() + + def tearDown(self) -> None: + pass + + def test_create_transaction_tests_credential_models_validation(self) -> None: + """Test case for create_transaction_tests_credential request a nd response models""" + request_body_json = """ + { + "name" : "Example Credential 1", + "value" : "Example Credential 1 Password" + }""" + + loaded_json = json.loads(request_body_json) + model_from_constructor = credentials.models.CredentialRequest(**loaded_json) + self.recursive_assert_no_extra_fields(model_from_constructor) + + request_from_json = credentials.models.CredentialRequest.from_json(request_body_json) + self.assertIsNotNone(request_from_json) + self.assertCountEqual(model_from_constructor.model_fields_set, + request_from_json.model_fields_set, + "Model from constructor fields do not match model from json fields") + + response_body_json = """ + { + "_links" : { + "self" : { + "hreflang" : "hreflang", + "templated" : true, + "profile" : "profile", + "name" : "name", + "href" : "https://api.thousandeyes.com/v7/link/to/resource/id", + "type" : "type", + "deprecation" : "deprecation", + "title" : "title" + } + }, + "name" : "Example Credential", + "id" : "3247" + }""" + + loaded_json = json.loads(response_body_json) + model_from_constructor = credentials.models.CredentialWithoutValue(**loaded_json) + self.recursive_assert_no_extra_fields(model_from_constructor) + + response_from_json = credentials.models.CredentialWithoutValue.from_json(response_body_json) + self.assertIsNotNone(response_from_json) + self.assertCountEqual(model_from_constructor.model_fields_set, + response_from_json.model_fields_set, + "Model from constructor fields do not match model from json fields") + + def test_delete_transaction_tests_credential_models_validation(self) -> None: + """Test case for delete_transaction_tests_credential request a nd response models""" + + + def test_get_transaction_tests_credential_details_models_validation(self) -> None: + """Test case for get_transaction_tests_credential_details request a nd response models""" + + response_body_json = """ + { + "_links" : { + "self" : { + "hreflang" : "hreflang", + "templated" : true, + "profile" : "profile", + "name" : "name", + "href" : "https://api.thousandeyes.com/v7/link/to/resource/id", + "type" : "type", + "deprecation" : "deprecation", + "title" : "title" + } + }, + "name" : "Example Credential", + "id" : "3247", + "value" : "rwhR12uDm1Im47p5IVXgzz4ORgC7m48ajzzeWVUt" + }""" + + loaded_json = json.loads(response_body_json) + model_from_constructor = credentials.models.Credential(**loaded_json) + self.recursive_assert_no_extra_fields(model_from_constructor) + + response_from_json = credentials.models.Credential.from_json(response_body_json) + self.assertIsNotNone(response_from_json) + self.assertCountEqual(model_from_constructor.model_fields_set, + response_from_json.model_fields_set, + "Model from constructor fields do not match model from json fields") + + def test_get_transaction_tests_credentials_list_models_validation(self) -> None: + """Test case for get_transaction_tests_credentials_list request a nd response models""" + + response_body_json = """ + { + "credentials" : [ { + "_links" : { + "self" : { + "hreflang" : "hreflang", + "templated" : true, + "profile" : "profile", + "name" : "name", + "href" : "https://api.thousandeyes.com/v7/link/to/resource/id", + "type" : "type", + "deprecation" : "deprecation", + "title" : "title" + } + }, + "name" : "Example Credential", + "id" : "3247", + "value" : "rwhR12uDm1Im47p5IVXgzz4ORgC7m48ajzzeWVUt" + }, { + "_links" : { + "self" : { + "hreflang" : "hreflang", + "templated" : true, + "profile" : "profile", + "name" : "name", + "href" : "https://api.thousandeyes.com/v7/link/to/resource/id", + "type" : "type", + "deprecation" : "deprecation", + "title" : "title" + } + }, + "name" : "Example Credential", + "id" : "3247", + "value" : "rwhR12uDm1Im47p5IVXgzz4ORgC7m48ajzzeWVUt" + } ], + "_links" : { + "self" : { + "hreflang" : "hreflang", + "templated" : true, + "profile" : "profile", + "name" : "name", + "href" : "https://api.thousandeyes.com/v7/link/to/resource/id", + "type" : "type", + "deprecation" : "deprecation", + "title" : "title" + } + } + }""" + + loaded_json = json.loads(response_body_json) + model_from_constructor = credentials.models.Credentials(**loaded_json) + self.recursive_assert_no_extra_fields(model_from_constructor) + + response_from_json = credentials.models.Credentials.from_json(response_body_json) + self.assertIsNotNone(response_from_json) + self.assertCountEqual(model_from_constructor.model_fields_set, + response_from_json.model_fields_set, + "Model from constructor fields do not match model from json fields") + + def test_update_transaction_tests_credential_models_validation(self) -> None: + """Test case for update_transaction_tests_credential request a nd response models""" + request_body_json = """ + { + "name" : "Example Credential 1", + "value" : "Example Credential 1 Password" + }""" + + loaded_json = json.loads(request_body_json) + model_from_constructor = credentials.models.CredentialRequest(**loaded_json) + self.recursive_assert_no_extra_fields(model_from_constructor) + + request_from_json = credentials.models.CredentialRequest.from_json(request_body_json) + self.assertIsNotNone(request_from_json) + self.assertCountEqual(model_from_constructor.model_fields_set, + request_from_json.model_fields_set, + "Model from constructor fields do not match model from json fields") + + response_body_json = """ + { + "_links" : { + "self" : { + "hreflang" : "hreflang", + "templated" : true, + "profile" : "profile", + "name" : "name", + "href" : "https://api.thousandeyes.com/v7/link/to/resource/id", + "type" : "type", + "deprecation" : "deprecation", + "title" : "title" + } + }, + "name" : "Example Credential", + "id" : "3247" + }""" + + loaded_json = json.loads(response_body_json) + model_from_constructor = credentials.models.CredentialWithoutValue(**loaded_json) + self.recursive_assert_no_extra_fields(model_from_constructor) + + response_from_json = credentials.models.CredentialWithoutValue.from_json(response_body_json) + self.assertIsNotNone(response_from_json) + self.assertCountEqual(model_from_constructor.model_fields_set, + response_from_json.model_fields_set, + "Model from constructor fields do not match model from json fields") + + def recursive_assert_no_extra_fields(self, model: BaseModel): + self.assertIsNotNone(model) + self.assertGreater(model.model_fields_set.__len__(), 0) + self.assertEquals(model.model_extra.__len__(), 0, + 'model {0}.{1} has unmapped extra fields {2}' + .format(model.__class__.__module__, model.__class__.__name__, + model.model_extra)) + for f in model.model_fields_set: + field = model.__dict__.get(f) + if isinstance(field, BaseModel): + self.recursive_assert_no_extra_fields(field) + + +if __name__ == '__main__': + unittest.main()