"""Tests for Persister.""" from oto import response import pytest from ows_product_physical.constant import field from ows_product_physical.models import persister from ows_product_physical import features @pytest.mark.parametrize( ('assign_display_upc', 'expected_display_upc',), [ (True, '426489624127'), (False, None), (True, '426489624127'), ]) def test_persister_update_product_success( db_fixture, mocker, context, valid_create_product_fields, valid_put_product_data, valid_artist_id, assign_display_upc, expected_display_upc, valid_display_upc, feature_engine): """Test that updating a physical product succeeds.""" valid_put_product_data['assign_display_upc'] = assign_display_upc feature_engine.force_flag( features.CCM_PHYSICAL_SUPPLYCHAININFO_OA, False) mocker.patch.object( features, 'is_ccm_physical_supplychaininfo_oa_enabled', return_value=False) with context: mocker.spy(context.g.ows.log, 'info') # spy on create product mocker.spy(persister, '_create_release') create_product_response = persister.create_product( valid_create_product_fields, 31, 21, 12, valid_artist_id) product_id = create_product_response.message.get(field.PRODUCT_ID) # mocks for all methods in update_product mocker.patch.object(persister, '_assign_display_upc') mocker.patch.object(persister, '_update_release') mocker.patch.object(persister, '_update_product_physical') mocker.patch.object(persister, '_update_release_subgenre') mocker.patch.object(persister, '_update_release_primary_artist') resp = persister.update_product(product_id, valid_put_product_data) assert resp.status == 200 assert context.g.ows.log.info.called assert persister._assign_display_upc.called assert persister._update_release.called assert persister._update_product_physical.called assert persister._update_release_subgenre.called assert persister._update_release_primary_artist.called def test_upc_provisioner_with_update_product( mocker, valid_create_product_fields, valid_display_upc, valid_put_product_data, valid_artist_id, context, db_fixture, feature_engine): """Test upc_provisioner workflow with update physical product.""" feature_engine.force_flag( features.CCM_PHYSICAL_SUPPLYCHAININFO_OA, False) mocker.patch.object( features, 'is_ccm_physical_supplychaininfo_oa_enabled', return_value=False) valid_put_product_data['assign_display_upc'] = True mocker.patch.object( persister, 'get_provisioned_upc', return_value=response.Response(message='426489624127') ) with context: mocker.spy(context.g.ows.log, 'info') # spy on create product mocker.spy(persister, '_create_release') create_product_response = persister.create_product( valid_create_product_fields, 31, 21, 12, valid_artist_id) product_id = create_product_response.message.get(field.PRODUCT_ID) # mocks for all methods in update_product mocker.patch.object(persister, '_update_release') mocker.patch.object(persister, '_update_product_physical') mocker.patch.object(persister, '_update_release_subgenre') mocker.patch.object(persister, '_update_release_primary_artist') persister.update_product(product_id, valid_put_product_data) assert persister.get_provisioned_upc.called assert valid_put_product_data['display_upc'] == '426489624127'