"""Test create_vendor schema.""" import pytest from account.validation.schemas import create_vendor from tests.unit.conftest import MINIMUM_VENDOR_ATTRS @pytest.mark.parametrize( ('payload', 'expected_errors'), [ # no errors ( { 'vendor_name': 'Blacktop 2', 'email': 'abc@xyz.com', 'source': 'event.gdaApproval', 'service_tier_uuid': '5f2bd4fc-df94-4f35-97d3-ef23f8573279', 'vendor_uuid': 'd6455851-3f86-48d7-b102-8d006eb92655', }, {}, ), ( { 'vendor_name': 'Blacktop 2', 'email': 'abc@xyz.com', 'owner': 'SME US Latin', 'label_identifier': 'Frontline', 'status': 'signed', 'source': 'event.gdaApproval', 'service_tier_uuid': '2304f272-7a12-40fc-ba48-959fff435223', 'vendor_uuid': 'd6455851-3f86-48d7-b102-8d006eb92655', }, {}, ), ( { 'vendor_name': 'Blacktop 2', 'email': 'abc@xyz.com', 'owner': 'SME US Latin', 'source': 'event.gdaApproval', 'service_tier_uuid': '1ed7aac0-ceb6-4c09-9166-afda8f349316', 'vendor_uuid': 'd6455851-3f86-48d7-b102-8d006eb92655', }, {}, ), ( { 'vendor_name': 'Blacktop 2', 'email': 'abc@xyz.com', 'owner': 'SME US Latin', 'migrated_to_abacus': True, 'source': 'event.gdaApproval', 'service_tier_uuid': '7410e51c-90da-4092-99da-b5489f364fa8', 'vendor_uuid': 'd6455851-3f86-48d7-b102-8d006eb92655', }, {}, ), # invalid types ( {'source': 'event.gdaApproval'}, { 'email': ['Missing data for required field.'], 'service_tier_uuid': ['Missing data for required field.'], }, ), ( { 'vendor_name': 'Blacktop 2', 'email': 'abc@xyz.com', 'owner': 'SME US Latin', 'label_identifier': 'Frontline', 'status': 'signed', 'source': 'event.gdaApproval', 'service_tier': '9363881e-1120-4495-ae09-657e13609e11', }, { 'service_tier': ['Unknown field.'], 'service_tier_uuid': ['Missing data for required field.'], }, ), ( { 'vendor_name': 'Blacktop 2', 'email': 'abc@xyz.com', 'owner': 'SME US Latin', 'label_identifier': 'dummy', 'status': 'signed', 'source': 'event.gdaApproval', 'service_tier_uuid': '9363881e-1120-4495-ae09-657e13609e11', 'vendor_uuid': 'd6455851-3f86-48d7-b102-8d006eb92655', }, { 'label_identifier': [ 'Must be one of: Frontline, Client Services, Catalog, D3, Film, TV, Test, ' 'Accounting Only.' ] }, ), ( { 'vendor_name': 'Blacktop 2', 'email': 'abc@xyz.com', 'owner': 'SME US Latin', 'label_identifier': 'Frontline', 'status': 'dummy', 'source': 'event.gdaApproval', 'service_tier_uuid': '9363881e-1120-4495-ae09-657e13609e11', 'vendor_uuid': 'd6455851-3f86-48d7-b102-8d006eb92655', }, { 'status': [ 'Must be one of: pitched, pending, verbal, signed, passed, inactive, deletion, ' 'waiting_for_approval, approved.' ] }, ), ( { 'vendor_name': 'Blacktop 2', 'email': 'abc@xyz.com', 'owner': 'SME US Latin', 'label_identifier': 'Frontline', 'status': 'signed', 'source': 'event.gdaApproval', 'service_tier_uuid': 'diy-tier-1', 'vendor_uuid': 'd6455851-3f86-48d7-b102-8d006eb92655', }, { 'service_tier_uuid': [ 'Must be one of: 5f2bd4fc-df94-4f35-97d3-ef23f8573279, ' '7410e51c-90da-4092-99da-b5489f364fa8, 9363881e-1120-4495-ae09-657e13609e11, ' '1dd92c83-25a3-4034-9a3d-f7c3f434f4ce, 2304f272-7a12-40fc-ba48-959fff435223, ' '1ed7aac0-ceb6-4c09-9166-afda8f349316, c069ab15-9370-4bd6-8ad1-895a64ae2ad8.' ] }, ), ], ) def test_validate_identity_schema(payload, expected_errors): """Test CreateVendorSchema.""" identity_schema = create_vendor.CreateVendorSchema() errors = identity_schema.validate(payload) assert errors == expected_errors @pytest.mark.parametrize( ('payload', 'problem_fields'), [ pytest.param(MINIMUM_VENDOR_ATTRS, [], id='no-problems'), pytest.param( {k: v for k, v in MINIMUM_VENDOR_ATTRS.items() if k != 'name'}, ['name'], id='missing-name', ), pytest.param( {k: v for k, v in MINIMUM_VENDOR_ATTRS.items() if k != 'owner'}, ['owner'], id='missing-owner', ), pytest.param( {k: v for k, v in MINIMUM_VENDOR_ATTRS.items() if k != 'company_brand'}, ['company_brand'], id='missing-company_brand', ), pytest.param( {k: v for k, v in MINIMUM_VENDOR_ATTRS.items() if k != 'service_tier_uuid'}, ['service_tier_uuid'], id='missing-service_tier_uuid', ), pytest.param( {k: v for k, v in MINIMUM_VENDOR_ATTRS.items() if k != 'payment_currency'}, ['payment_currency'], id='missing-payment_currency', ), pytest.param( {**MINIMUM_VENDOR_ATTRS, 'service_tier_uuid': '🐶-🐶-🐶-🐶'}, ['service_tier_uuid'], id='invalid-service_tier_uuid', ), pytest.param( {**MINIMUM_VENDOR_ATTRS, 'assigned_to': 'not-an-int'}, ['assigned_to'], id='invalid-assigned_to', ), pytest.param( {**MINIMUM_VENDOR_ATTRS, 'assigned_reviewer': 'not-an-int'}, ['assigned_reviewer'], id='invalid-assigned_reviewer', ), pytest.param( {**MINIMUM_VENDOR_ATTRS, 'quarterback_label_manager': 'not-an-int'}, ['quarterback_label_manager'], id='invalid-quarterback_label_manager', ), pytest.param( {**MINIMUM_VENDOR_ATTRS, 'wel_email_sender': 'not-an-int'}, ['wel_email_sender'], id='invalid-wel_email_sender', ), pytest.param( {**MINIMUM_VENDOR_ATTRS, 'product_manager': 'not-an-int'}, ['product_manager'], id='invalid-product_manager', ), pytest.param( {**MINIMUM_VENDOR_ATTRS, 'closers': 'not-a-list'}, ['closers'], id='invalid-closers', ), pytest.param( {**MINIMUM_VENDOR_ATTRS, 'closers': ['not-an-int']}, ['closers'], id='invalid-closers-element', ), ], ) def test_validate_v2_create_vendor_schema(payload, problem_fields): """Test V2CreateVendorSchema.""" schema = create_vendor.V2CreateVendorSchema() errors = schema.validate(payload) assert list(errors.keys()) == problem_fields if not problem_fields: data = schema.load(payload) assert data == { 'company_brand': 'awal', 'name': 'Full name of the Vendor', 'owner': 'Owner of this Vendor', 'payment_currency': 'AUD', 'service_tier_uuid': '7410e51c-90da-4092-99da-b5489f364fa8', 'is_distributor': False, 'country': None, 'primary_genre': None, 'label_summary': None, 'assigned_to': None, 'assigned_reviewer': None, 'quarterback_label_manager': None, 'wel_email_sender': None, 'product_manager': None, 'closers': None, } def test_v2_create_vendor_schema_accepts_product_manager(): """V2CreateVendorSchema loads product_manager as int when provided.""" schema = create_vendor.V2CreateVendorSchema() payload = {**MINIMUM_VENDOR_ATTRS, 'product_manager': 42} data = schema.load(payload) assert data['product_manager'] == 42 def test_v2_create_vendor_schema_accepts_closers(): """V2CreateVendorSchema loads closers as a list of ints when provided.""" schema = create_vendor.V2CreateVendorSchema() payload = {**MINIMUM_VENDOR_ATTRS, 'closers': [3868, 2912]} data = schema.load(payload) assert data['closers'] == [3868, 2912]