"""Tests for reference_sap_profit_center model.""" from abacus_contract import models from abacus_contract.models.reference_sap_profit_center import ReferenceSapProfitCenter from abacus_contract.tests.utils.factories import ( ReferenceSapProfitCenterFactory, ReferenceSigningEntityFactory, SigningEntitySapProfitCenterFactory, ) def test_create_reference_sap_profit_center(): """Test to create reference_sap_profit_center record.""" reference_sap = ReferenceSapProfitCenter.create( profit_center='UK4914', company_code='4912', business_group='ORC', display_name='PC UK4914', ) result = ReferenceSapProfitCenter.query.all() assert len(result) == 1 assert result[0] == reference_sap # --- get_authorized_for_signing_entities --- def test_get_authorized_for_signing_entities_returns_only_live_mappings(): """Soft-deleted junction rows are excluded; live mappings are returned.""" se = ReferenceSigningEntityFactory.create(with_junction_row=False) live_pc = ReferenceSapProfitCenterFactory.create(display_name='Live') deleted_pc = ReferenceSapProfitCenterFactory.create(display_name='Deleted') _unrelated_pc = ReferenceSapProfitCenterFactory.create(display_name='Unrelated') SigningEntitySapProfitCenterFactory.create( reference_signing_entity=se, reference_sap_profit_center=live_pc ) soft_deleted = SigningEntitySapProfitCenterFactory.create( reference_signing_entity=se, reference_sap_profit_center=deleted_pc ) models.SigningEntitySapProfitCenter.delete_by_id_or_error( soft_deleted.signing_entity_sap_profit_center_id, soft_delete=True ) items, total_count = ReferenceSapProfitCenter.get_authorized_for_signing_entities( [se.reference_signing_entity_id], limit=50, offset=0 ) assert total_count == 1 [item] = items assert item['sap_profit_center'].reference_sap_profit_center_id == ( live_pc.reference_sap_profit_center_id ) assert 'signing_entity_sap_profit_center_id' in item assert 'created_at' in item def test_get_authorized_for_signing_entities_search_filters_display_name_and_profit_center(): """search_term matches against both display_name and profit_center.""" se = ReferenceSigningEntityFactory.create(with_junction_row=False) pc_by_display = ReferenceSapProfitCenterFactory.create( profit_center='AAA001', display_name='Foundation Media' ) pc_by_code = ReferenceSapProfitCenterFactory.create( profit_center='SANTA42', display_name='Other label' ) pc_no_match = ReferenceSapProfitCenterFactory.create( profit_center='ZZZ999', display_name='Different' ) for pc in (pc_by_display, pc_by_code, pc_no_match): SigningEntitySapProfitCenterFactory.create( reference_signing_entity=se, reference_sap_profit_center=pc ) by_display, _ = ReferenceSapProfitCenter.get_authorized_for_signing_entities( [se.reference_signing_entity_id], limit=50, offset=0, search_term='foundation' ) assert { item['sap_profit_center'].reference_sap_profit_center_id for item in by_display } == {pc_by_display.reference_sap_profit_center_id} by_code, _ = ReferenceSapProfitCenter.get_authorized_for_signing_entities( [se.reference_signing_entity_id], limit=50, offset=0, search_term='santa' ) assert { item['sap_profit_center'].reference_sap_profit_center_id for item in by_code } == {pc_by_code.reference_sap_profit_center_id} def test_get_authorized_for_signing_entities_pagination(): """Limit caps the page; total_count reflects the full match set.""" se = ReferenceSigningEntityFactory.create(with_junction_row=False) for n in range(5): pc = ReferenceSapProfitCenterFactory.create(display_name=f'PC {n}') SigningEntitySapProfitCenterFactory.create( reference_signing_entity=se, reference_sap_profit_center=pc ) page, total_count = ReferenceSapProfitCenter.get_authorized_for_signing_entities( [se.reference_signing_entity_id], limit=2, offset=0 ) assert total_count == 5 assert len(page) == 2 def test_get_authorized_for_signing_entities_orders_by_display_name(): """Results are ordered by display_name ascending.""" se = ReferenceSigningEntityFactory.create(with_junction_row=False) for name in ('Charlie', 'Alpha', 'Bravo'): pc = ReferenceSapProfitCenterFactory.create(display_name=name) SigningEntitySapProfitCenterFactory.create( reference_signing_entity=se, reference_sap_profit_center=pc ) items, _ = ReferenceSapProfitCenter.get_authorized_for_signing_entities( [se.reference_signing_entity_id], limit=50, offset=0 ) assert [item['sap_profit_center'].display_name for item in items] == [ 'Alpha', 'Bravo', 'Charlie', ] def test_get_reference_sap_profit_centers(): """Test to get a list of sap profit centers.""" se = ReferenceSigningEntityFactory.create(with_junction_row=False) mock_profit_centers = [ ReferenceSapProfitCenterFactory.create( profit_center='AAA001', display_name='Foundation Media' ), ReferenceSapProfitCenterFactory.create( profit_center='SANTA42', display_name='Other label' ), ReferenceSapProfitCenterFactory.create( profit_center='ZZZ999', display_name='Different' ), ] for pc in mock_profit_centers: SigningEntitySapProfitCenterFactory.create( reference_signing_entity=se, reference_sap_profit_center=pc ) items, total_count = ReferenceSapProfitCenter.get_reference_sap_profit_centers( limit=10, offset=0, sort_by='display_name', sort_order='asc' ) assert total_count == 4 assert items[0].display_name == 'Different' assert items[1].display_name == 'Foundation Media' assert items[2].display_name == 'Other label' def test_filter_sap_profit_centers_by_search_term(): """Test that SAP profit centers are correctly filtered using a search term query.""" se = ReferenceSigningEntityFactory.create(with_junction_row=False) mock_profit_centers = [ ReferenceSapProfitCenterFactory.create( profit_center='AAA001', display_name='Foundation Media' ), ReferenceSapProfitCenterFactory.create( profit_center='SANTA42', display_name='Other label' ), ReferenceSapProfitCenterFactory.create( profit_center='ZZZ999', display_name='Different' ), ] for pc in mock_profit_centers: SigningEntitySapProfitCenterFactory.create( reference_signing_entity=se, reference_sap_profit_center=pc ) items, total_count = ReferenceSapProfitCenter.get_reference_sap_profit_centers( limit=10, offset=0, sort_by='display_name', sort_order='asc', search_term=99 ) assert total_count == 1 assert items[0].display_name == 'Different' def test_get_orphan_sap_profit_centers(): """Test that only orphan SAP profit centers are fetched.""" se = ReferenceSigningEntityFactory.create(with_junction_row=False) ReferenceSapProfitCenterFactory.create( profit_center='RCA001', display_name='RCA Records' ) ReferenceSapProfitCenterFactory.create( profit_center='USD998', display_name='BlastBeat' ) mock_profit_centers = [ ReferenceSapProfitCenterFactory.create( profit_center='AAA001', display_name='Foundation Media' ), ReferenceSapProfitCenterFactory.create( profit_center='SANTA42', display_name='Other label' ), ReferenceSapProfitCenterFactory.create( profit_center='ZZZ999', display_name='Different' ), ] for pc in mock_profit_centers: SigningEntitySapProfitCenterFactory.create( reference_signing_entity=se, reference_sap_profit_center=pc ) items, total_count = ReferenceSapProfitCenter.get_reference_sap_profit_centers( limit=10, offset=0, sort_by='display_name', sort_order='desc', orphan=True ) profit_center_names = ['RCA Records', 'BlastBeat'] assert total_count == 3 assert any([item.display_name in profit_center_names for item in items]) is True def test_get_authorized_for_signing_entities_returns_active_mappings(): """Test that the method retrieves all active, live SAP profit center mappings for the given signing entity IDs.""" # noqa: E501 mock_signing_entities = [ ReferenceSigningEntityFactory.create(with_junction_row=False), ReferenceSigningEntityFactory.create(with_junction_row=False), ReferenceSigningEntityFactory.create(with_junction_row=False), ] mock_profit_centers = [ ReferenceSapProfitCenterFactory.create( profit_center='AAA001', display_name='Foundation Media' ), ReferenceSapProfitCenterFactory.create( profit_center='SANTA42', display_name='Other label' ), ReferenceSapProfitCenterFactory.create( profit_center='ZZZ999', display_name='Different' ), ReferenceSapProfitCenterFactory.create( profit_center='USD998', display_name='BlastBeat' ), ] for pc in mock_profit_centers[0:3]: SigningEntitySapProfitCenterFactory.create( reference_signing_entity=mock_signing_entities[0], reference_sap_profit_center=pc, ) SigningEntitySapProfitCenterFactory.create( reference_signing_entity=mock_signing_entities[1], reference_sap_profit_center=mock_profit_centers[3], ) signing_entity_ids = [ mock_signing_entity.reference_signing_entity_id for mock_signing_entity in mock_signing_entities ] items, total_count = ReferenceSapProfitCenter.get_authorized_for_signing_entities( signing_entity_ids, 10, 0 ) profit_center_names = ['Foundation Media', 'Other label', 'Different', 'BlastBeat'] assert total_count == 4 assert ( all( [ item['sap_profit_center'].display_name in profit_center_names for item in items ] ) is True ) assert ( all( item['reference_signing_entity_id'] in signing_entity_ids[0:2] for item in items ) is True ) def test_get_authorized_for_signing_entities_returns_empty_when_unmapped(): """Test that an empty list is returned when the provided signing entity IDs have no active profit center mappings.""" # noqa: E501 mock_signing_entities = [ ReferenceSigningEntityFactory.create(with_junction_row=False), ReferenceSigningEntityFactory.create(with_junction_row=False), ReferenceSigningEntityFactory.create(with_junction_row=False), ] mock_profit_centers = [ ReferenceSapProfitCenterFactory.create( profit_center='AAA001', display_name='Foundation Media', ), ReferenceSapProfitCenterFactory.create( profit_center='SANTA42', display_name='Other label', ), ] SigningEntitySapProfitCenterFactory.create( reference_signing_entity=mock_signing_entities[0], reference_sap_profit_center=mock_profit_centers[0], deleted_by='Test User', ) SigningEntitySapProfitCenterFactory.create( reference_signing_entity=mock_signing_entities[1], reference_sap_profit_center=mock_profit_centers[1], deleted_by='Test User', ) signing_entity_ids = [ mock_signing_entity.reference_signing_entity_id for mock_signing_entity in mock_signing_entities ] _, total_count = ReferenceSapProfitCenter.get_authorized_for_signing_entities( signing_entity_ids, 10, 0 ) assert total_count == 0 def test_get_by_ids(): """Test that existing sap profit centers are retrieved and non-existent IDs are ignored.""" mock_sap_profit_centers = [ ReferenceSapProfitCenterFactory.create() for _ in range(3) ] signing_entity_ids = [ entity.reference_sap_profit_center_id for entity in mock_sap_profit_centers ] non_existent_id = 99999 ids = signing_entity_ids + [non_existent_id] items = ReferenceSapProfitCenter.get_by_ids(ids) assert len(items) == 3 returned_ids = {item.reference_sap_profit_center_id for item in items} assert returned_ids == set(signing_entity_ids) assert non_existent_id not in returned_ids def test_get_by_ids_for_empty_list(): """Test that passing an empty list short-circuits and returns an empty list.""" items = ReferenceSapProfitCenter.get_by_ids([]) assert len(items) == 0 def test_get_by_ids_for_non_matching_ids(): """Test that searching for completely non-existent IDs returns an empty list.""" items = ReferenceSapProfitCenter.get_by_ids([1111, 2222]) assert len(items) == 0 def test_get_sap_profit_centers_ignores_signing_entities_when_orphan_is_true(): """Test that fetching with orphan=True overrides and ignores the signing_entities filter.""" signing_entities = [ ReferenceSigningEntityFactory.create(with_junction_row=False), ReferenceSigningEntityFactory.create(with_junction_row=False), ReferenceSigningEntityFactory.create(with_junction_row=False), ] ReferenceSapProfitCenterFactory.create( profit_center='RCA001', display_name='RCA Records' ) ReferenceSapProfitCenterFactory.create( profit_center='USD998', display_name='BlastBeat' ) mock_profit_centers = [ ReferenceSapProfitCenterFactory.create( profit_center='AAA001', display_name='Foundation Media' ), ReferenceSapProfitCenterFactory.create( profit_center='SANTA42', display_name='Other label' ), ReferenceSapProfitCenterFactory.create( profit_center='ZZZ999', display_name='Different' ), ] SigningEntitySapProfitCenterFactory.create( reference_signing_entity=signing_entities[0], reference_sap_profit_center=mock_profit_centers[0], deleted_by='Test User', ) SigningEntitySapProfitCenterFactory.create( reference_signing_entity=signing_entities[1], reference_sap_profit_center=mock_profit_centers[0], deleted_by='Test User', ) SigningEntitySapProfitCenterFactory.create( reference_signing_entity=signing_entities[1], reference_sap_profit_center=mock_profit_centers[1], ) SigningEntitySapProfitCenterFactory.create( reference_signing_entity=signing_entities[2], reference_sap_profit_center=mock_profit_centers[2], ) signing_entity_ids = [ str(signing_entity.reference_signing_entity_id) for signing_entity in signing_entities ] items, total_count = ReferenceSapProfitCenter.get_reference_sap_profit_centers( limit=10, offset=0, sort_by='display_name', sort_order='asc', signing_entity_ids=', '.join(signing_entity_ids), orphan=True, ) profit_center_names = ['Foundation Media', 'RCA Records', 'BlastBeat'] assert total_count == 6 assert any([item.display_name in profit_center_names for item in items]) is True def test_get_sap_profit_centers_by_signing_entities_when_orphan_is_false(): """Test that SAP profit centers are correctly filtered using a signing entities query.""" signing_entities = [ ReferenceSigningEntityFactory.create(with_junction_row=False), ReferenceSigningEntityFactory.create(with_junction_row=False), ReferenceSigningEntityFactory.create(with_junction_row=False), ] mock_profit_centers = [ ReferenceSapProfitCenterFactory.create( profit_center='AAA001', display_name='Foundation Media' ), ReferenceSapProfitCenterFactory.create( profit_center='SANTA42', display_name='Other label' ), ReferenceSapProfitCenterFactory.create( profit_center='ZZZ999', display_name='Different' ), ] SigningEntitySapProfitCenterFactory.create( reference_signing_entity=signing_entities[0], reference_sap_profit_center=mock_profit_centers[0], ) SigningEntitySapProfitCenterFactory.create( reference_signing_entity=signing_entities[1], reference_sap_profit_center=mock_profit_centers[1], ) SigningEntitySapProfitCenterFactory.create( reference_signing_entity=signing_entities[2], reference_sap_profit_center=mock_profit_centers[2], ) signing_entity_ids = [ str(signing_entity.reference_signing_entity_id) for signing_entity in signing_entities ] items, total_count = ReferenceSapProfitCenter.get_reference_sap_profit_centers( limit=10, offset=0, sort_by='display_name', sort_order='asc', signing_entity_ids=', '.join(signing_entity_ids[0:2]), ) assert total_count == 2 assert [item.display_name for item in items] == [ 'Foundation Media', 'Other label', ] def test_get_profit_centers_by_signing_entities_when_orphan_is_false_and_term(): """Test that SAP profit centers are correctly filtered using a signing entities and search term query.""" signing_entities = [ ReferenceSigningEntityFactory.create(with_junction_row=False), ReferenceSigningEntityFactory.create(with_junction_row=False), ReferenceSigningEntityFactory.create(with_junction_row=False), ] mock_profit_centers = [ ReferenceSapProfitCenterFactory.create( profit_center='AAA001', display_name='Foundation Media' ), ReferenceSapProfitCenterFactory.create( profit_center='SANTA42', display_name='Other label' ), ReferenceSapProfitCenterFactory.create( profit_center='ZZZ999', display_name='Different' ), ] SigningEntitySapProfitCenterFactory.create( reference_signing_entity=signing_entities[0], reference_sap_profit_center=mock_profit_centers[0], ) SigningEntitySapProfitCenterFactory.create( reference_signing_entity=signing_entities[1], reference_sap_profit_center=mock_profit_centers[1], ) SigningEntitySapProfitCenterFactory.create( reference_signing_entity=signing_entities[2], reference_sap_profit_center=mock_profit_centers[2], ) signing_entity_ids = [ str(signing_entity.reference_signing_entity_id) for signing_entity in signing_entities ] items, total_count = ReferenceSapProfitCenter.get_reference_sap_profit_centers( limit=10, offset=0, sort_by='display_name', sort_order='asc', signing_entity_ids=', '.join(signing_entity_ids[0:2]), search_term='42', orphan=False, ) assert total_count == 1 assert items[0].display_name == 'Other label'