"""Tests for ownership logic.""" from unittest.mock import MagicMock from oto import response from sales_goals import api from sales_goals.logic import ownership from sales_goals.models import ows_product from sales_goals.models import ows_project def test_project_ownership_vendor_success( monkeypatch, context, valid_get_header): """Test vendor owns project success.""" with context, api.app.test_request_context(headers=valid_get_header): project_id = 28 vendor_id = 7123 return_response = response.Response(status=200) monkeypatch.setattr(ows_project, 'check_project_ownership', MagicMock( return_value=return_response)) ownership_response = ownership.check_project_ownership( project_id, 'vendor', vendor_id) assert ownership_response assert ownership_response.status == return_response.status def test_project_ownership_vendor_fail(monkeypatch, context, valid_get_header): """Test vendor owns project fail.""" with context, api.app.test_request_context(headers=valid_get_header): project_id = 28 vendor_id = 7123 return_response = response.Response(status=403) monkeypatch.setattr(ows_project, 'check_project_ownership', MagicMock( return_value=return_response)) ownership_response = ownership.check_project_ownership( project_id, 'vendor', vendor_id) assert not ownership_response assert ownership_response.status == return_response.status def test_project_ownership_vendor_fail_missing_project( monkeypatch, context, valid_get_header): """Test vendor owns project fail because project doesn't exist.""" with context, api.app.test_request_context(headers=valid_get_header): project_id = 28 vendor_id = 7123 monkeypatch.setattr(ows_project, 'check_project_ownership', MagicMock( return_value=response.create_not_found_response())) ownership_response = ownership.check_project_ownership( project_id, 'vendor', vendor_id) assert not ownership_response def test_project_ownership_subaccount_success( monkeypatch, context, valid_get_header): """Test subaccount owns project success.""" with context, api.app.test_request_context(headers=valid_get_header): project_id = 28 subaccount_id = 555 return_response = response.Response(status=200) monkeypatch.setattr(ows_project, 'check_project_ownership', MagicMock( return_value=return_response)) ownership_response = ownership.check_project_ownership( project_id, 'subaccount', subaccount_id) assert ownership_response assert ownership_response.message == return_response.message def test_project_ownership_subaccount_fail( monkeypatch, context, valid_get_header): """Test subaccount owns project fail.""" with context, api.app.test_request_context(headers=valid_get_header): project_id = 28 subaccount_id = 555 return_response = response.Response(status=403) monkeypatch.setattr(ows_project, 'check_project_ownership', MagicMock( return_value=return_response)) ownership_response = ownership.check_project_ownership( project_id, 'subaccount', subaccount_id) assert not ownership_response assert ownership_response.status == return_response.status def test_project_ownership_subaccount_fail_missing_project( monkeypatch, context, valid_get_header): """Test subaccount owns project fails because project doesn't exist.""" with context, api.app.test_request_context(headers=valid_get_header): project_id = 28 subaccount_id = 555 monkeypatch.setattr(ows_project, 'check_project_ownership', MagicMock( return_value=response.create_not_found_response())) assert not ownership.check_project_ownership( project_id, 'subaccount', subaccount_id) def test_project_ownership_without_account_type_or_account_id( monkeypatch, context, valid_get_header): """Test ownership check passes when no vendor or subaccount is provided.""" with context, api.app.test_request_context(headers=valid_get_header): project_id = 28 return_response = response.Response(status=200) monkeypatch.setattr(ows_project, 'check_project_ownership', MagicMock( return_value=return_response)) ownership_response = ownership.check_project_ownership( project_id, None, None) assert ownership_response assert ownership_response.status == return_response.status def test_check_product_ownership_success( monkeypatch, context, valid_get_header): """Test vendor owns project success.""" with context, api.app.test_request_context(headers=valid_get_header): project_id = 28 vendor_id = 7123 return_response = response.Response(status=200) monkeypatch.setattr( ows_product, 'get_product_ownership_by_account', MagicMock(return_value=return_response) ) ownership_response = ownership.check_product_ownership( project_id, 'vendor', vendor_id) assert ownership_response assert ownership_response.status == return_response.status def test_check_product_ownership_no_headers( monkeypatch, context, valid_get_header): """Test vendor owns project success.""" project_id = 28 return_response = response.Response(status=200) ownership_response = ownership.check_product_ownership( project_id, None, None) assert ownership_response assert ownership_response.status == return_response.status