"""Tests for ows-territories Model.""" from unittest.mock import MagicMock from owsrequest import request from owsrequest import test_utils from pricing.constants import error from pricing.constants import service_name from pricing.models import ows_product import pytest @pytest.fixture def fixture_products_success(): """Fixture for successfull products.""" return { 'status_code': 200, 'content': 'content' } @pytest.fixture def fixture_products_error(): """Fixture for failed products.""" return { 'status_code': 500, 'content': 'failure' } @pytest.fixture def fixture_product_id(): """Fixture for product_id.""" return 12345 @pytest.fixture def fixture_product_response(): """Fixture for product_id.""" return { 'product_id': '12345', } @pytest.fixture def fixture_product_error_response(): """Fixture for get product error response.""" return { 'code': error.INTERNAL_ERROR, 'message': 'error fetching product' } def test_is_owner(monkeypatch): """Test getting a product.""" account_type = 'vendor' account_id = '123' product_id = 456 expected_status = 342 path = '/vendor/123/product/456' # The call spec list used by mock_ows_requests to mock these requests call_specs = [{ 'service': service_name.OWS_PRODUCT, 'path': path, 'status': expected_status}] monkeypatch.setattr( request, 'head', test_utils.mock_ows_requests(call_specs)) response = ows_product.is_owner(product_id, account_type, account_id) assert response.status == expected_status def test_get_product_ids_from_upcs_success( monkeypatch, fixture_products_success): """Test getting a product.""" monkeypatch.setattr( ows_product, 'make_request', MagicMock(return_value=fixture_products_success)) response = ows_product.get_product_ids_from_upcs(['123']) assert response.message == 'content' def test_get_product_ids_from_upcs_error(monkeypatch, fixture_products_error): """Test getting a product.""" monkeypatch.setattr( ows_product, 'make_request', MagicMock(return_value=fixture_products_error)) response = ows_product.get_product_ids_from_upcs(['123']) assert response.errors['code'] == 500 assert response.errors['message'] == 'failure' def test_get_product_details_success( monkeypatch, fixture_product_id, fixture_product_response): """Test getting product details success.""" path = '/product/{product_id}'.format(product_id=fixture_product_id) # The call spec list used by mock_ows_requests to mock these requests call_specs = [{ 'service': service_name.OWS_PRODUCT, 'path': path, 'status': 200, 'json': fixture_product_response}] monkeypatch.setattr( request, 'get', test_utils.mock_ows_requests(call_specs)) product_response = ows_product.get_product_details(fixture_product_id) assert product_response.status == 200 assert product_response.message == fixture_product_response def test_get_product_details_error( monkeypatch, fixture_product_id, fixture_product_error_response): """Test getting product details error.""" path = '/product/{product_id}'.format(product_id=fixture_product_id) # The call spec list used by mock_ows_requests to mock these requests call_specs = [{ 'service': service_name.OWS_PRODUCT, 'path': path, 'status': 404}] monkeypatch.setattr( request, 'get', test_utils.mock_ows_requests(call_specs)) product_response = ows_product.get_product_details(fixture_product_id) assert product_response.status == 500 assert product_response.errors == fixture_product_error_response def test_get_product_details_exception( monkeypatch, fixture_product_id, fixture_product_error_response): """Test getting product details exception.""" path = '/product/{product_id}'.format(product_id=fixture_product_id) # The call spec list used by mock_ows_requests to mock these requests call_specs = [{ 'service': service_name.OWS_PRODUCT, 'path': path}] monkeypatch.setattr( request, 'get', test_utils.mock_ows_requests(call_specs)) product_response = ows_product.get_product_details(fixture_product_id) assert product_response.status == 500 assert product_response.errors == fixture_product_error_response