"""Test for ows-product.""" from owsrequest import request from owsrequest import test_utils import pytest from assets.constants import error from assets.constants import service from assets.models import ows_product def test_get_product_details_by_id(monkeypatch): """Test for get_product_by_id.""" mock_json_response = 'ok' product_id = 2011621 path = '/product/2011621' call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': 200, 'json': mock_json_response}] monkeypatch.setattr( request, 'get', test_utils.mock_ows_requests(call_specs)) response = ows_product.get_product_by_id(product_id) assert response.message == mock_json_response def test_get_product_details_with_invalid_product_id(monkeypatch): """Test for get_product_by_id with invalid product id.""" mock_json_response = error.ERROR_RELEASE_NOT_FOUND product_id = 123 path = '/product/123' call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': 404, 'json': mock_json_response}] monkeypatch.setattr( request, 'get', test_utils.mock_ows_requests(call_specs)) response = ows_product.get_product_by_id(product_id) assert response.errors.get('message') == mock_json_response def test_get_product_details_by_id_with_error(monkeypatch): """Test for get_product_by_id with error.""" mock_json_response = {} product_id = 2011621 path = '/product/2011621' call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': 500, 'json': mock_json_response}] monkeypatch.setattr( request, 'get', test_utils.mock_ows_requests(call_specs)) response = ows_product.get_product_by_id(product_id) assert response.status == 500 def test_get_product_details_by_id_with_exception(monkeypatch): """Test for get_product_by_id with exception.""" mock_json_response = {} product_id = 2011621 path = '/product/2011621' call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': 500, 'json': mock_json_response}] monkeypatch.setattr( request, 'head', test_utils.mock_ows_requests(call_specs)) response = ows_product.get_product_by_id(product_id) assert response.errors.get('message') def test_get_product_details_by_upc(monkeypatch): """Test for get_product_by_upc.""" mock_json_response = 'ok' product_upc = 111222333444 path = '/product/upc/111222333444' call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': 200, 'json': mock_json_response}] monkeypatch.setattr( request, 'get', test_utils.mock_ows_requests(call_specs)) response = ows_product.get_product_by_upc(product_upc) assert response.message == mock_json_response def test_get_product_details_with_invalid_product_upc(monkeypatch): """Test for get_product_by_upc with invalid product upc.""" mock_json_response = error.ERROR_RELEASE_NOT_FOUND product_upc = 111222333444 path = '/product/upc/111222333444' call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': 404, 'json': mock_json_response}] monkeypatch.setattr( request, 'get', test_utils.mock_ows_requests(call_specs)) response = ows_product.get_product_by_upc(product_upc) assert response.errors.get('message') == mock_json_response def test_get_product_details_by_upc_with_error(monkeypatch): """Test for get_product_by_upc with error.""" mock_json_response = {} product_upc = 111222333444 path = '/product/upc/111222333444' call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': 500, 'json': mock_json_response}] monkeypatch.setattr( request, 'get', test_utils.mock_ows_requests(call_specs)) response = ows_product.get_product_by_upc(product_upc) assert response.status == 500 def test_get_product_details_by_upc_with_exception(monkeypatch): """Test for get_product_by_upc with exception.""" mock_json_response = {} product_upc = 111222333444 path = '/product/upc/111222333444' call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': 500, 'json': mock_json_response}] monkeypatch.setattr( request, 'head', test_utils.mock_ows_requests(call_specs)) response = ows_product.get_product_by_upc(product_upc) assert response.errors.get('message') def test_validate_release(monkeypatch): """Test for validate_release.""" mock_json_response = 'ok' upc = 191018729677 path = '/upc/191018729677' call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': 200, 'json': mock_json_response}] monkeypatch.setattr( request, 'head', test_utils.mock_ows_requests(call_specs)) response = ows_product.validate_release(upc) assert response assert response.message == mock_json_response def test_validate_release_with_invalid_upc(monkeypatch): """Test for validate_release with invalid upc.""" mock_json_response = error.ERROR_RELEASE_NOT_FOUND upc = 123 path = '/upc/123' call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': 404, 'json': mock_json_response}] monkeypatch.setattr( request, 'head', test_utils.mock_ows_requests(call_specs)) response = ows_product.validate_release(upc) assert response.errors.get('message') == mock_json_response def test_validate_release_with_error(monkeypatch): """Test for validate_release with error.""" mock_json_response = {} upc = 1910187296770 path = '/upc/1910187296770' call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': 500, 'json': mock_json_response}] monkeypatch.setattr( request, 'head', test_utils.mock_ows_requests(call_specs)) response = ows_product.validate_release(upc) assert response.status == 500 def test_validate_release_with_exception(monkeypatch): """Test for validate_release with exception.""" mock_json_response = {} upc = 1910187296770 path = '/upc/1910187296770' call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': 500, 'json': mock_json_response}] monkeypatch.setattr( request, 'get', test_utils.mock_ows_requests(call_specs)) response = ows_product.validate_release(upc) assert response.errors.get('message') @pytest.mark.parametrize( 'account_type, account_id, product_id, returned_status,\ expected_status, expected_message', [ ('vendor', 100, 111, 200, 200, error.SUCCESS_CODE), ('subaccount', 100, 111, 404, 404, error.ERROR_RELEASE_NOT_FOUND), ('vendor', 100, 111, 403, 403, error.ERROR_PRODUCT_NOT_OWNED), ('vendor', 100, 111, 400, 500, None)]) def test_check_ownership( monkeypatch, account_type, account_id, product_id, returned_status, expected_status, expected_message): """Test product ownership check.""" path = service.OWS_PRODUCT_OWNERSHIP_RESOURCE.format( account_type=account_type, account_id=account_id, product_id=product_id) call_specs = [{ 'service': service.OWS_PRODUCT, 'path': path, 'status': returned_status, 'json': expected_message}] monkeypatch.setattr( request, 'head', test_utils.mock_ows_requests(call_specs)) response = ows_product.check_ownership( account_type, account_id, product_id) assert response.status == expected_status if returned_status == 200: assert response.message == expected_message else: assert response.errors.get('message') == expected_message