"""Unit tests.""" import json import boto3 from moto import mock_sqs from moto import mock_sts import pytest from proxy import config from proxy.logic import message @pytest.fixture def repo_name(): """ Return repository name. Returns: str: repository name """ return 'orchard' @pytest.fixture def valid_webhook_json(): """ Return valid json. Returns: dict: test webhook json """ valid_data = { 'ref': 'refs/heads/master', 'repository': { 'name': 'orchard' } } return json.loads(json.dumps(valid_data)) @pytest.fixture def invalid_webhook_json(): """ Return invalid json. Returns: dict: test webhook json """ invalid_data = { 'key': 'value' } return json.loads(json.dumps(invalid_data)) def create_sqs_queue(repo_name): """Create a test queue from repository list.""" client = boto3.client( 'sqs', config.AWS_REGION, aws_access_key_id='key', aws_secret_access_key='secret' ) repo_dict = config.REPOSITORY_MAPPING client.create_queue(QueueName=repo_dict[repo_name]) @mock_sts def test_get_account(): """Test get account logic.""" account_id = message.get_account() assert account_id == '123456789012' @mock_sqs def test_get_queue_url(repo_name): """Create and check queue matching one in the repository list.""" create_sqs_queue(repo_name) repo_dict = config.REPOSITORY_MAPPING test_queue_url = message.get_queue_url(repo_dict[repo_name]) assert test_queue_url == \ 'https://queue.amazonaws.com/123456789012/{}'.format( repo_dict[repo_name]) @mock_sqs def test_send_message(repo_name, valid_webhook_json, invalid_webhook_json): """Test message logic.""" create_sqs_queue(repo_name) test_success_status = message.create_message(valid_webhook_json) assert test_success_status.status == 200 test_failure_status = message.create_message(invalid_webhook_json) assert test_failure_status.message == 'Repository not '\ 'found in webhook data'