"""Tests for ownership logic.""" from unittest.mock import MagicMock from oto import response import pytest from ows_product_physical import api from ows_product_physical.logic import ownership from ows_product_physical.models import ows_project @pytest.fixture def track_ids_response_fixture(valid_update_product_tracks_data): """Return a list of track ids. Returns: (response.Response): track ids list """ return response.Response(message=valid_update_product_tracks_data) 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_track_ownership_success(track_ids_response_fixture): """Test ownership check passes when track belongs to a product.""" track_id = 1 ownership_response = ownership.check_track_ownership( track_id, track_ids_response_fixture) assert ownership_response assert ownership_response.status == 200 def test_track_ownership_fail(track_ids_response_fixture): """Test ownership check passes when track belongs to a product.""" track_id = 10 ownership_response = ownership.check_track_ownership( track_id, track_ids_response_fixture) assert not ownership_response assert ownership_response.status == 400