"""Tests for request context validation.""" from owsrequest.context import RequestContext from requests.structures import CaseInsensitiveDict from ows_product_physical.constant.header import DELIVER_PHYSICAL_AUDIO_ROLE from ows_product_physical.constant.header import DISTRIBUTION_PROFILE_TYPE from ows_product_physical.validation.request_context \ import validate_request_context def test_valid_headers_no_role(): """Test that valid headers without role validation pass.""" request_context = RequestContext( CaseInsensitiveDict( { 'Orchard-Identity-Id': '10436b38-5e11-472d-b6a4-bf1ee2b1b438', 'Orchard-Profile-Type': DISTRIBUTION_PROFILE_TYPE, 'Orchard-Profile-Id': '826', } ) ) assert validate_request_context(request_context, profile_type=DISTRIBUTION_PROFILE_TYPE) def test_valid_headers_with_role(): """Test that valid headers with role validation pass.""" request_context = RequestContext( CaseInsensitiveDict( { 'Orchard-Identity-Id': '10436b38-5e11-472d-b6a4-bf1ee2b1b438', 'Orchard-Profile-Type': DISTRIBUTION_PROFILE_TYPE, 'Orchard-Profile-Id': '826', 'Orchard-Roles': DELIVER_PHYSICAL_AUDIO_ROLE } ) ) assert validate_request_context(request_context, profile_type=DISTRIBUTION_PROFILE_TYPE, role=DELIVER_PHYSICAL_AUDIO_ROLE) def test_invalid_headers_missing_role(): """Test that invalid headers, missing role return error.""" request_context = RequestContext( CaseInsensitiveDict( { 'Orchard-Identity-Id': '10436b38-5e11-472d-b6a4-bf1ee2b1b438', 'Orchard-Profile-Type': DISTRIBUTION_PROFILE_TYPE, 'Orchard-Profile-Id': '826' } ) ) response = validate_request_context(request_context, profile_type=DISTRIBUTION_PROFILE_TYPE, role=DELIVER_PHYSICAL_AUDIO_ROLE) assert not response assert response.errors def test_invalid_headers_mismatched_role(): """Test that invalid headers, missing role return error.""" request_context = RequestContext( CaseInsensitiveDict( { 'Orchard-Identity-Id': '10436b38-5e11-472d-b6a4-bf1ee2b1b438', 'Orchard-Profile-Type': DISTRIBUTION_PROFILE_TYPE, 'Orchard-Profile-Id': '826', 'Orchard-Roles': 'manage_nr_deliveries' } ) ) response = validate_request_context(request_context, profile_type=DISTRIBUTION_PROFILE_TYPE, role=DELIVER_PHYSICAL_AUDIO_ROLE) assert not response assert response.errors def test_invalid_headers_not_profile(): """Test that invalid headers, not profile return error.""" request_context = RequestContext( CaseInsensitiveDict( { 'Grass-Account-Type': 'vendor', 'Grass-Account-Id': 7123, 'Orchard-User-Id': 'alw:1000', } ) ) response = validate_request_context(request_context) assert not response assert response.errors