"""Test validation of messages. These functions provide several situation when something goes wrong and test how program behaves. """ from oto import response import pytest from salessheets.constants import errors from salessheets.constants import pdf from salessheets.validation.validate_pdf import validate_sqs_message @pytest.fixture(scope='function') def valid_pdf_bulk_sales_sheets_message(): """Emulate valid bulk sheets message for pdf.""" return { 'product_id': ['777'], 'output_type': pdf.SINGLE_PDF, 'job_id': '999' } @pytest.fixture(scope='function') def valid_zip_bulk_sales_sheets_message(): """Emulate valid bulk sheets message for zip.""" return { 'product_id': ['777', '999'], 'output_type': pdf.ZIPPED_PDF, 'job_id': '999' } @pytest.fixture(scope='function') def invalid_product_id_bulk_sales_sheets_message(): """Emulate invalid id bulk sheets message.""" return { 'product_id': '777', 'output_type': 'zipped_pdf', 'job_id': '999' } @pytest.fixture(scope='function') def invalid_output_type_bulk_sales_sheets_message(): """Emulate invalid output type bulk sheets message.""" return { 'product_id': ['777'], 'output_type': 'u', 'job_id': '999' } @pytest.fixture(scope='function') def no_job_id_bulk_sales_sheets_message(): """Emulate invalid bulk sheets message without job id.""" return { 'product_id': ['777'], 'output_type': 'single_pdf', } @pytest.fixture(scope='function') def valid_bulk_sales_sheets_message_with_localized_template_type_id(): """Valid message with template type id for localized sales sheets.""" return { 'product_id': ['777'], 'output_type': pdf.SINGLE_PDF, 'job_id': '999', 'localized_template_type_id': 1 } @pytest.fixture() def invalid_bulk_sales_sheets_message_with_localized_template_type_id(): """Invalid message with template type id for localized sales sheets.""" return { 'product_id': ['777'], 'output_type': pdf.SINGLE_PDF, 'job_id': '999', 'localized_template_type_id': 'Blahblah' } def test_pdf_bulk_sales_sheets_schema( valid_pdf_bulk_sales_sheets_message, create_sqs_message): """Test validation of valid pdf generation message.""" message = create_sqs_message( valid_pdf_bulk_sales_sheets_message) result = validate_sqs_message(message) assert response_returned(result) assert result def test_zip_bulk_sales_sheets_schema( valid_zip_bulk_sales_sheets_message, create_sqs_message): """Test validation of valid zip generation message.""" message = create_sqs_message( valid_zip_bulk_sales_sheets_message) result = validate_sqs_message(message) assert response_returned(result) assert result def test_invalid_id_message_bulk_sales_sheets_schema( invalid_product_id_bulk_sales_sheets_message, create_sqs_message): """Test invalid product id validation behavior.""" message = create_sqs_message( invalid_product_id_bulk_sales_sheets_message) result = validate_sqs_message(message) assert response_returned(result) assert not result def test_invalid_output_type_message_bulk_sales_sheets_schema( invalid_output_type_bulk_sales_sheets_message, create_sqs_message): """Test invalid output type validation behavior.""" message = create_sqs_message( invalid_output_type_bulk_sales_sheets_message) result = validate_sqs_message(message) assert response_returned(result) assert not result def test_invalid_job_id_message_bulk_sales_sheets_schema( no_job_id_bulk_sales_sheets_message, create_sqs_message): """Test invalid job id validation behavior.""" message = create_sqs_message( no_job_id_bulk_sales_sheets_message) result = validate_sqs_message(message) assert response_returned(result) assert not result def test_bulk_sales_sheets_schema_with_localized_template_type_id( valid_bulk_sales_sheets_message_with_localized_template_type_id, create_sqs_message): """Test validation of valid message with localized template type.""" message = create_sqs_message( valid_bulk_sales_sheets_message_with_localized_template_type_id) result = validate_sqs_message(message) assert response_returned(result) assert result def test_bulk_sales_sheets_schema_with_invalid_localized_template_type_id( invalid_bulk_sales_sheets_message_with_localized_template_type_id, create_sqs_message): """Test validation of invalid message with localized template type.""" message = create_sqs_message( invalid_bulk_sales_sheets_message_with_localized_template_type_id) result = validate_sqs_message(message) assert response_returned(result) assert not result def test_validate_sqs_message_no_correlation_id( valid_pdf_bulk_sales_sheets_message, create_sqs_message): """Test validation of message without correlation id.""" message = create_sqs_message(valid_pdf_bulk_sales_sheets_message) message['MessageAttributes']['Correlation-Id'] = None result = validate_sqs_message(message) assert not result assert result.errors['message'] == ( errors.ERROR_CORRELLATION_ID_INVALID_MESSAGE) def response_returned(result): """Check that validating function returns Response.""" return isinstance(result, response.Response)