"""Tests for Persister.""" from ows_product_physical.constant import field from ows_product_physical.models import persister def test_create_product_physical_supply_chain_metadata_success( mocker, valid_placeholder_upc, db_release_id, valid_sale_start_date ): """It should build metadata rows for each carve-in store and persist them.""" sale_start_date = valid_sale_start_date fields = { field.UPC: valid_placeholder_upc, field.SALE_START_DATE: sale_start_date, } mocker.patch.object( persister, 'get_carveins_for_upc', return_value=[738, 739, 740] ) setter = mocker.patch.object( persister.ProductPhysicalSupplyChainMetadata, 'set_physical_supply_chain_metadata' ) resp = persister.create_product_physical_supply_chain_metadata( fields, db_release_id ) assert resp.status == 201 setter.assert_called_once_with( db_release_id, { 'metadata': [ { 'store_id': 738, 'sale_start_date': sale_start_date, 'product_id': db_release_id, }, { 'store_id': 739, 'sale_start_date': sale_start_date, 'product_id': db_release_id, }, { 'store_id': 740, 'sale_start_date': sale_start_date, 'product_id': db_release_id, }, ] } ) def test_create_product_physical_supply_chain_metadata_success_no_carveins( mocker, db_release_id, valid_sale_start_date, valid_placeholder_upc ): """It should persist an empty metadata list when there are no carve-in stores.""" release_id = db_release_id fields = { field.UPC: valid_placeholder_upc, field.SALE_START_DATE: valid_sale_start_date, } mocker.patch.object( persister, 'get_carveins_for_upc', return_value=[] ) setter = mocker.patch.object( persister.ProductPhysicalSupplyChainMetadata, 'set_physical_supply_chain_metadata' ) resp = persister.create_product_physical_supply_chain_metadata( fields, release_id ) assert resp.status == 201 setter.assert_called_once_with( release_id, {'metadata': []} )