# -*- coding: utf-8 -*- # type: ignore from __future__ import annotations import os from unittest import mock import pytest from pytest_mock import MockerFixture from keep_it_secret.ext import aws from .fixtures import TestingAWSSecrets @pytest.fixture def mock_boto3_client(mocker: MockerFixture) -> mock.Mock: return mocker.patch.object(aws.boto3, 'client') @pytest.fixture def aws_secrets_manager_client() -> mock.Mock: return mock.Mock() def test_init(): # When result = aws.AWSSecrets() # Then result.client is None @mock.patch.dict( os.environ, { 'AWS_ACCESS_KEY_ID': 'test_access_key_id', 'AWS_SECRET_ACCESS_KEY': 'test_secret_access_key', 'AWS_SESSION_TOKEN': 'test_aws_session_token', 'AWS_DEFAULT_REGION': 'test_aws_default_region', }, ) def test_as_boto3_client_kwargs(): # Given secrets = aws.AWSSecrets() # When result = secrets.as_boto3_client_kwargs() # Then assert result == { 'aws_access_key_id': 'test_access_key_id', 'aws_secret_access_key': 'test_secret_access_key', 'aws_session_token': 'test_aws_session_token', 'region_name': 'test_aws_default_region', } @mock.patch.dict(os.environ, {}, clear=True) def test_as_boto3_client_kwargs_empty(): # Given secrets = aws.AWSSecrets() # When result = secrets.as_boto3_client_kwargs() # Then assert result == {} def test_get_client_cache_miss(mock_boto3_client: mock.Mock, aws_secrets_manager_client: mock.Mock, testing_aws_secrets: TestingAWSSecrets): # Given mock_boto3_client.return_value = aws_secrets_manager_client field = aws.AWSSecrets() # When result = field.get_client() # Then assert result == aws_secrets_manager_client assert field.client == aws_secrets_manager_client mock_boto3_client.assert_called_once_with( 'secretsmanager', **testing_aws_secrets.aws.as_boto3_client_kwargs(), ) def test_get_client_cache_hit(mock_boto3_client: mock.Mock, aws_secrets_manager_client: mock.Mock, testing_aws_secrets: TestingAWSSecrets): # Given field = aws.AWSSecrets() field.client = aws_secrets_manager_client # When result = field.get_client() # Then assert result == aws_secrets_manager_client mock_boto3_client.assert_not_called()