"""Tests for product logic.""" from collections import namedtuple from owsrequest import request as requests import sentry_sdk from product.constants import service_name from product.models import ows_product_physical as opp_models def test_delete_physical_product_success(mocker, test_product): """Test success deletion.""" response = namedtuple("response", "status_code") mocker.patch.object( requests, "delete", return_value=response(status_code=200), autospec=True ) assert opp_models.delete_physical_product(test_product) def test_delete_physical_product_fail_exception(monkeypatch, mocker, test_product): """Test exception handler.""" monkeypatch.delattr(requests, "delete") mocker.patch.object(sentry_sdk, "capture_exception", return_value="", autospec=True) result = opp_models.delete_physical_product(test_product) assert not result assert sentry_sdk.capture_exception.called def test_delete_physical_product_error_response(mocker, test_product): """Test success deletion.""" response = namedtuple("response", "status_code") mocker.patch.object( requests, "delete", return_value=response(status_code=500), autospec=True ) assert not opp_models.delete_physical_product(test_product) def test_model_copy_product_success(ows_request_mocker): """Test copy product success.""" existing_product_id = 93 product_data_changes = {"some_key": "some value"} new_product_id = 98765 expected_response = {"product_id": new_product_id} ows_request_mocker.add( { "method": "post", "service": service_name.OWS_PRODUCT_PHYSICAL, "path": "/product/{}/copy".format(existing_product_id), "status": 200, "json": expected_response, } ) ows_request_mocker.apply() result = opp_models.copy_product( existing_product_id, product_data_changes, "alw:123" ) assert result.status == 200 assert result.message == expected_response def test_model_copy_product_exception(mocker): """Test copy product when an exception occurs.""" existing_product_id = 93 product_data_changes = {"some_key": "some value"} mocker.patch.object(sentry_sdk, "capture_exception") result = opp_models.copy_product(existing_product_id, product_data_changes, None) assert result.status == 500 assert sentry_sdk.capture_exception.called def test_model_copy_product_opp_down(ows_request_mocker): """Test copy product when ows-product-physical returns an error.""" existing_product_id = 93 product_data_changes = {"some_key": "some value"} expected_status = 500 expected_response = {"oops": "i did an error"} ows_request_mocker.add( { "method": "post", "service": service_name.OWS_PRODUCT_PHYSICAL, "path": "/product/{}/copy".format(existing_product_id), "status": 500, "json": expected_response, } ) ows_request_mocker.apply() result = opp_models.copy_product(existing_product_id, product_data_changes, None) assert result.status == expected_status assert result.message == expected_response def test_model_copy_product_tracks_success(ows_request_mocker): """Test copy product tracks success.""" existing_product_id = 93 new_product_id = 98765 ows_request_mocker.add( { "method": "post", "service": service_name.OWS_PRODUCT_PHYSICAL, "path": "/product/{}/tracks/copy/{}".format( existing_product_id, new_product_id ), "status": 200, } ) ows_request_mocker.apply() result = opp_models.copy_product_tracks(existing_product_id, new_product_id) assert result.status == 200 def test_model_copy_product_tracks_exception(mocker): """Test copy product when an exception occurs.""" existing_product_id = 93 new_product_id = 98765 mocker.patch.object(sentry_sdk, "capture_exception") result = opp_models.copy_product_tracks(existing_product_id, new_product_id) assert result.status == 500 assert sentry_sdk.capture_exception.called def test_model_copy_product_tracks_opp_down(ows_request_mocker): """Test copy product when ows-product-physical returns an error.""" existing_product_id = 93 new_product_id = 98765 expected_status = 500 ows_request_mocker.add( { "method": "post", "service": service_name.OWS_PRODUCT_PHYSICAL, "path": "/product/{}/tracks/copy/{}".format( existing_product_id, new_product_id ), "status": 500, } ) ows_request_mocker.apply() result = opp_models.copy_product_tracks(existing_product_id, new_product_id) assert result.status == expected_status def test_get_product_by_product_id_success(ows_request_mocker): """Test copy product tracks success.""" product_id = 98765 expected_response = {"product_id": product_id} ows_request_mocker.add( { "method": "get", "service": service_name.OWS_PRODUCT_PHYSICAL, "path": "/product/{}".format(product_id), "status": 200, "json": expected_response, } ) ows_request_mocker.apply() result = opp_models.get_product_by_product_id(product_id) assert result.status == 200 assert result.message == expected_response def test_get_product_by_product_id_fail_exception(monkeypatch, mocker, test_product): """Test exception handler.""" monkeypatch.delattr(requests, "get") mocker.patch.object(sentry_sdk, "capture_exception", return_value="", autospec=True) result = opp_models.get_product_by_product_id("whatever") assert not result assert sentry_sdk.capture_exception.called def test_get_tracks_success(ows_request_mocker): """Test copy product tracks success.""" product_id = 98765 expected_response = {"product_id": product_id} ows_request_mocker.add( { "method": "get", "service": service_name.OWS_PRODUCT_PHYSICAL, "path": "/product/{}/tracks".format(product_id), "status": 200, "json": expected_response, } ) ows_request_mocker.apply() result = opp_models.get_tracks(product_id) assert result.status == 200 assert result.message == expected_response def test_get_tracks_exception(monkeypatch, mocker, test_product): """Test exception handler.""" monkeypatch.delattr(requests, "get") mocker.patch.object(sentry_sdk, "capture_exception", return_value="", autospec=True) result = opp_models.get_tracks("whatever") assert not result assert sentry_sdk.capture_exception.called