"""Test create_cw_log_stream.""" import json from unittest.mock import MagicMock import boto3 import pytest from cloudwatch_logs import api from cloudwatch_logs import handlers # noqa @pytest.fixture def fixture_client(): """Create an api test client fixture.""" return api.app.test_client() @pytest.mark.parametrize(('params', 'expected_status', 'expected_result'), [ ( {'group_name': 'test-group', 'stream_name': 'test-stream'}, 200, {'foo': 'bar'} ), ( {'stream_name': 'test-stream'}, 500, {'code': 'internal_error', 'message': 'Invalid request.'} ), ( {'group_name': 'test-group'}, 500, {'code': 'internal_error', 'message': 'Invalid request.'} ), ]) def test_create_cw_log_stream( fixture_client, monkeypatch, params, expected_status, expected_result): """Test create_cw_log_stream with different input params.""" boto_response = {'foo': 'bar'} client_mock = MagicMock() client_mock.create_log_stream.return_value = boto_response monkeypatch.setattr(boto3, 'client', MagicMock(return_value=client_mock)) result = fixture_client.post( '/cloudwatch/log-stream', data=json.dumps(params), content_type='application/json') assert result.status_code == expected_status response_data = json.loads(result.data.decode('utf-8')) assert response_data == expected_result def test_create_cw_log_stream_duplicate(fixture_client, monkeypatch): """Test create_cw_log_stream with exception.""" params = { 'group_name': 'test-group', 'stream_name': 'test-stream' } client_mock = MagicMock() client_mock.create_log_stream.side_effect = Exception('duplicate', 500) monkeypatch.setattr(boto3, 'client', MagicMock(return_value=client_mock)) with pytest.raises(Exception) as excinfo: fixture_client.post( '/cloudwatch/log-stream', data=json.dumps(params), content_type='application/json') assert excinfo.code == 500 assert excinfo.message == 'duplicate'