"""Tests for validation module.""" import json from unittest import mock import pytest from assets.constants import error from assets.constants import field_const from assets.validation import json_schema @pytest.fixture def fixture_function(request): """Function to mock real endpoint handler.""" @json_schema.validate_headers(request) def function(): return 'test_result' return function() @pytest.fixture def fixture_function_headers_not_required(request): """Function to mock real endpoint handler.""" @json_schema.validate_headers(request, required=False) def function(): return 'test_result' return function() def test_validate_oa_headers_success(valid_oa_headers): """Assert that validate_headers succeeds when headers valid.""" request = mock.Mock() request.headers = valid_oa_headers assert 'test_result' == fixture_function(request) def test_validate_oa_headers_missing_correlation(valid_oa_headers): """Assert that validate_headers succeed when correlation id is missing.""" request = mock.Mock() del valid_oa_headers[field_const.CORRELATION_ID] request.headers = valid_oa_headers assert 'test_result' == fixture_function(request) def test_validate_oa_headers_missing_user_id(valid_oa_headers): """Assert that validate_headers fails when orchard user id is missing.""" request = mock.Mock() del valid_oa_headers[field_const.ORCHARD_USER_ID] request.headers = valid_oa_headers response = fixture_function(request) assert response.status_code == 400 response_json = json.loads(response.data.decode()) assert response_json['code'] == error.ERROR_CODE_HEADER_VALIDATION def test_validate_alw_headers_success(valid_alw_headers): """Assert that validate_headers succeeds when headers valid.""" request = mock.Mock() request.headers = valid_alw_headers assert 'test_result' == fixture_function(request) def test_validate_alw_headers_wrong_grass_account_type(valid_alw_headers): """Assert that validate_headers fails when grass account type is wrong.""" request = mock.Mock() valid_alw_headers[field_const.GRASS_ACCOUNT_TYPE] = 'test' request.headers = valid_alw_headers response = fixture_function(request) assert response.status_code == 400 response_json = json.loads(response.data.decode()) assert response_json['code'] == error.ERROR_CODE_HEADER_VALIDATION @pytest.mark.parametrize('missing_header,expected_status,expected_code', [ (field_const.GRASS_ACCOUNT_ID, 400, error.ERROR_CODE_HEADER_VALIDATION), (field_const.GRASS_ACCOUNT_TYPE, 400, error.ERROR_CODE_HEADER_VALIDATION), (field_const.ORCHARD_USER_ID, 400, error.ERROR_CODE_HEADER_VALIDATION) ]) def test_validate_alw_headers_missing_header( valid_alw_headers, missing_header, expected_status, expected_code): """Assert that validate_headers fails when required headers is missing.""" request = mock.Mock() del valid_alw_headers[missing_header] request.headers = valid_alw_headers response = fixture_function(request) assert response.status_code == expected_status response_json = json.loads(response.data.decode()) assert response_json['code'] == expected_code def test_validate_headers_empty_not_required(): """Test for failure with no handlers and no body.""" request = mock.Mock() request.headers = [] assert 'test_result' == fixture_function_headers_not_required(request)