"""Test carveouts.""" from video.connectors import mysql from video.models.sql.classes import carveouts from tests.unit import ar_db_utils @ar_db_utils.test_schema def test_update_upc() -> None: """Create a set of restrictions and update their upcs.""" release_id = 12324 upc = 666677899 new_upc = 777777777 dms_master_record = { "release_id": release_id, "upc": upc, "customer_master_master_id": 1, "distribution_type_id": 1, "updated_by": 12, } dms_record = {"release_id": release_id, "upc": upc, "dms_customer_id": 111} territory_record = {"release_id": release_id, "upc": upc, "country_id": 1} ar_db_utils.seed_models( [ carveouts.ReleaseDmsMasterRestriction(**dms_master_record), carveouts.ReleaseDmsRestriction(**dms_record), carveouts.ReleaseTerritoryRestriction(**territory_record), ] ) with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: carveouts.update_upc(release_id, new_upc, session=session) dms_master_restrictions = carveouts._get_all_for_model( release_id, carveouts.ReleaseDmsMasterRestriction, session=session ) dms_restrictions = carveouts._get_all_for_model( release_id, carveouts.ReleaseDmsRestriction, session=session ) territory_restrictions = carveouts._get_all_for_model( release_id, carveouts.ReleaseTerritoryRestriction, session=session ) for restriction in dms_master_restrictions: assert restriction["upc"] == new_upc for restriction in dms_restrictions: assert restriction["upc"] == new_upc for restriction in territory_restrictions: assert restriction["upc"] == new_upc @ar_db_utils.test_schema def test_add_release_dms_master_restrictions() -> None: """Create a set of Master Restrictions for a release.""" distribution_type_id = 3 upc = 123 product_id = 2 updated_by = 457 customer_master_master_ids = [8, 9] expected_carveouts = [ { "customer_master_master_id": 8, "distribution_type_id": 3, "release_id": 2, "upc": 123, }, { "customer_master_master_id": 9, "distribution_type_id": 3, "release_id": 2, "upc": 123, }, ] with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: carveouts.add_release_dms_master_restrictions( distribution_type_id, upc, product_id, updated_by, customer_master_master_ids, session=session, ) restrictions = carveouts._get_all_for_model( product_id, carveouts.ReleaseDmsMasterRestriction, session=session ) assert expected_carveouts == restrictions # call a second time to ensure carveouts not duplicated with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: carveouts.add_release_dms_master_restrictions( distribution_type_id, upc, product_id, updated_by, customer_master_master_ids, session=session, ) restrictions = carveouts._get_all_for_model( product_id, carveouts.ReleaseDmsMasterRestriction, session=session ) assert expected_carveouts == restrictions # call a third time with a new customer_master_master_id to ensure # a new restriction (carveout) is added for that id customer_master_master_ids.append(10) expected_carveouts.append( { "customer_master_master_id": 10, "distribution_type_id": 3, "release_id": 2, "upc": 123, } ) with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: carveouts.add_release_dms_master_restrictions( distribution_type_id, upc, product_id, updated_by, customer_master_master_ids, session=session, ) restrictions = carveouts._get_all_for_model( product_id, carveouts.ReleaseDmsMasterRestriction, session=session ) assert expected_carveouts == restrictions