import json from unittest import mock import pytest from test_fixtures.secrets import get_secret @mock.patch('test_fixtures.secrets._client') def test_returns_dict_for_json_secret(mock_client): mock_client.return_value.get_secret_value.return_value = { 'SecretString': json.dumps({'host': 'db.example.com', 'user': 'test'}) } result = get_secret('my/secret') assert result == {'host': 'db.example.com', 'user': 'test'} @mock.patch('test_fixtures.secrets._client') def test_returns_string_for_plain_secret(mock_client): mock_client.return_value.get_secret_value.return_value = { 'SecretString': 'plain-string-value' } result = get_secret('my/secret') assert result == 'plain-string-value' @mock.patch('test_fixtures.secrets._client') def test_uses_specified_region(mock_client): mock_client.return_value.get_secret_value.return_value = {'SecretString': '{}'} get_secret('my/secret', region='eu-west-1') mock_client.assert_called_once_with('eu-west-1') @mock.patch('test_fixtures.secrets._client') def test_returns_string_for_non_dict_json(mock_client): mock_client.return_value.get_secret_value.return_value = { 'SecretString': json.dumps(['a', 'b', 'c']) } result = get_secret('my/secret') assert result == '["a", "b", "c"]' @mock.patch('test_fixtures.secrets._client') def test_raises_for_binary_secret(mock_client): mock_client.return_value.get_secret_value.return_value = { 'SecretBinary': b'binarydata' } with pytest.raises(ValueError, match='binary secrets are not supported'): get_secret('my/binary-secret')