"""Test lookup schemas.""" from typing import Any import pytest from account.validation.schemas.lookup import ( LookupByUuids, LookupByUuidsWithFetchFlags, LookupSubaccountFeaturesByUuids, LookupSubaccountsByUuids, LookupVendorFeaturesByUuids, LookupVendorsByUuids, ) @pytest.mark.parametrize('schema', [LookupSubaccountsByUuids, LookupVendorsByUuids]) @pytest.mark.parametrize( 'description, payload, expected_errors', [ ( 'Valid model without a fetch flag with V4 UUIDs', { 'uuids': [ 'bb1df2de-1791-4a42-a536-e62da0d7c50a', '7f6bf9fb-dd76-4e91-8cf9-cfdb239b2017', ] }, {}, ), ( 'Valid model with a fetch flag', { 'uuids': [ 'bb1df2de-1791-4a42-a536-e62da0d7c50a', '7f6bf9fb-dd76-4e91-8cf9-cfdb239b2017', ], 'fetch_flags': ['TENANT_HIERARCHY'], }, {}, ), ( 'Valid model without a fetch flag with V1 UUIDs', { 'uuids': [ '5afc3342-0263-11ef-a52a-4a2888760684', '65471cfe-0263-11ef-bfc9-4a2888760684', ] }, {}, ), ( 'Valid model with a fetch flag', { 'uuids': [ '5afc3342-0263-11ef-a52a-4a2888760684', '65471cfe-0263-11ef-bfc9-4a2888760684', ], 'fetch_flags': ['TENANT_HIERARCHY'], }, {}, ), ( 'Fails due to invalid fetch flag', { 'uuids': [ 'bb1df2de-1791-4a42-a536-e62da0d7c50a', '7f6bf9fb-dd76-4e91-8cf9-cfdb239b2017', ], 'fetch_flags': ['NO.SUCH.FLAG'], }, { 'fetch_flags': { 0: [ 'Must be one of: TENANT_HIERARCHY.', ] } }, ), ( 'Fails due to invalid UUID', { 'uuids': [ 'bb1df2de-1791-4a42-a536-e62da0d7c50a', '7f6bf9fb-dd76-4e91-8cf9-cfdb239b2017', 'no.such.uuid', ], }, { 'uuids': { 2: [ 'Not a valid UUID.', ] } }, ), ], ) def test_lookup_by_uuids_with_fetch_flags( schema: LookupByUuidsWithFetchFlags, description: str, payload: dict[str, Any], expected_errors: dict[str, Any], ) -> None: """Test LookupByUuidsWithFetchFlags.""" schema_instance = schema() errors = schema_instance.validate(payload) assert errors == expected_errors, description @pytest.mark.parametrize('schema', [LookupSubaccountFeaturesByUuids, LookupVendorFeaturesByUuids]) @pytest.mark.parametrize( 'payload, expected_errors', [ pytest.param( { 'uuids': [ 'bb1df2de-1791-4a42-a536-e62da0d7c50a', '7f6bf9fb-dd76-4e91-8cf9-cfdb239b2017', ] }, {}, id='valid_uuids', ), pytest.param( {'uuids': ['bb1df2de-1791-4a42-a536-e62da0d7c50a', 'no.such.uuid']}, {'uuids': {1: ['Not a valid UUID.']}}, id='invalid_uuid', ), pytest.param( { 'uuids': ['bb1df2de-1791-4a42-a536-e62da0d7c50a'], 'fetch_flags': ['TENANT_HIERARCHY'], }, {'fetch_flags': ['Unknown field.']}, id='fetch_flags_not_accepted', ), ], ) def test_lookup_vendor_features_by_uuids( schema: LookupByUuids, payload: dict[str, Any], expected_errors: dict[str, Any], ) -> None: """Test LookupByUuids.""" schema_instance = schema() errors = schema_instance.validate(payload) assert errors == expected_errors