"""Test for ows_blocklist_manager model.""" from unittest.mock import MagicMock from flask import g from owsrequest import request import pytest from product_digital.constants import services from product_digital.models import ows_blocklist_manager @pytest.fixture def product_id(): """Provide a product_id for testing.""" return '1234567' def test_validate_product_valid(test_request_context, mocker, product_id): """Test expected call made to ows_blocklist_manager endpoint for valid product.""" mock_blocklist_response = MagicMock(status_code=200) mocker.patch.object(request, 'get', return_value=mock_blocklist_response) identity_id = '123' profile_id = '1234' profile_type = 'vendor' orchard_user_id = '12345' g.request_context.identity_id = identity_id g.request_context.profile_id = profile_id g.request_context.profile_type = profile_type g.request_context.orchard_user_id = orchard_user_id result = ows_blocklist_manager.validate_product(product_id) headers = { 'Orchard-Identity-Id': identity_id, 'Orchard-Profile-Id': profile_id, 'Orchard-Profile-Type': profile_type, 'Orchard-User-Id': orchard_user_id, } request.get.assert_called_with( services.OWS_BLOCKLIST_MANAGER, '/validate/{}'.format(product_id), headers=headers) assert result.status == 200 def test_validate_product_invalid(test_request_context, mocker, product_id): """Test expected call made to ows_blocklist_manager endpoint for invalid product.""" mock_response = { 'validation_error': { 'matched_blacklist_words': ['word'], 'items': [{ 'word': 'word', 'reason': 'some reason', 'alert': None, 'contact': None }] } } mock_blocklist_response = MagicMock(status_code=400) mock_blocklist_response.json.return_value = mock_response mocker.patch.object(request, 'get', return_value=mock_blocklist_response) identity_id = '123' profile_id = '1234' profile_type = 'vendor' orchard_user_id = '12345' g.request_context.identity_id = identity_id g.request_context.profile_id = profile_id g.request_context.profile_type = profile_type g.request_context.orchard_user_id = orchard_user_id result = ows_blocklist_manager.validate_product(product_id) headers = { 'Orchard-Identity-Id': identity_id, 'Orchard-Profile-Id': profile_id, 'Orchard-Profile-Type': profile_type, 'Orchard-User-Id': orchard_user_id, } request.get.assert_called_with( services.OWS_BLOCKLIST_MANAGER, '/validate/{}'.format(product_id), headers=headers) assert result.status == 200 assert result.message == mock_response def test_validate_product_error(test_request_context, mocker, product_id): """Test error call made to ows_blocklist_manager endpoint.""" mock_error = {'code': 'ows_product_error', 'message': 'User is forbidden'} mock_blocklist_error = MagicMock(status_code=403) mock_blocklist_error.json.return_value = mock_error mocker.patch.object(request, 'get', return_value=mock_blocklist_error) identity_id = '123' profile_id = '1234' profile_type = 'vendor' orchard_user_id = '12345' g.request_context.identity_id = identity_id g.request_context.profile_id = profile_id g.request_context.profile_type = profile_type g.request_context.orchard_user_id = orchard_user_id result = ows_blocklist_manager.validate_product(product_id) headers = { 'Orchard-Identity-Id': identity_id, 'Orchard-Profile-Id': profile_id, 'Orchard-Profile-Type': profile_type, 'Orchard-User-Id': orchard_user_id, } request.get.assert_called_with( services.OWS_BLOCKLIST_MANAGER, '/validate/{}'.format(product_id), headers=headers) assert result.status == 403 assert result.errors == mock_error