"""Tests for ows-project Model.""" from owsrequest import request as requests from owsrequest.test_utils import mock_ows_requests from owsrequest.test_utils import MockOwsResponse from ows_product_physical import api from ows_product_physical.models import ows_project def raise_no_json_error(_): """Raise error when attempting to parse json body.""" raise ValueError('No json error!') def test_get_project_by_id_success(monkeypatch, valid_get_header, context): """Test getting a project by its id successful.""" with context, api.app.test_request_context(headers=valid_get_header): request_spec = [{ 'service': 'ows-project-manager', 'status': 200, 'path': '/project/28', 'json': {'project_id': 28} }] monkeypatch.setattr(requests, 'get', mock_ows_requests(request_spec)) project_response = ows_project.get_project_by_id(28) assert project_response.message.get('project_id') == 28 def test_get_project_by_id_fails(monkeypatch, valid_get_header, context): """Test getting a project that does not exist fails.""" with context, api.app.test_request_context(headers=valid_get_header): request_spec = [{ 'service': 'ows-project-manager', 'status': 404, 'path': '/project/28', 'json': { 'code': 'not_found_error', 'message': 'Unable to find project_id 28'}}] monkeypatch.setattr(requests, 'get', mock_ows_requests(request_spec)) project_response = ows_project.get_project_by_id(28) assert not project_response assert 'not_found_error' in project_response.errors.get('code') assert '28' in project_response.errors.get('message') def test_check_project_ownership_success( monkeypatch, valid_get_header, context): """Test HEAD request for checking project ownership success.""" with context, api.app.test_request_context(headers=valid_get_header): project_id = 88 request_spec = [{ 'service': 'ows-project-manager', 'status': 200, 'path': '/ownership/vendor/ABC123/project/88'}] monkeypatch.setattr(requests, 'head', mock_ows_requests(request_spec)) account_type = 'vendor' account_id = 'ABC123' ownership_response = ows_project.check_project_ownership( project_id, account_type, account_id) assert ownership_response.status == 200 def test_check_project_ownership_fails( monkeypatch, valid_get_header, context): """Test HEAD request for checking project ownership fails.""" with context, api.app.test_request_context(headers=valid_get_header): project_id = 88 request_spec = [{ 'service': 'ows-project-manager', 'status': 403, 'path': '/ownership/vendor/ABC123/project/88'}] monkeypatch.setattr(requests, 'head', mock_ows_requests(request_spec)) account_type = 'vendor' account_id = 'ABC123' ownership_response = ows_project.check_project_ownership( project_id, account_type, account_id) assert ownership_response.status == 403 def test_get_project_by_id_fatal_error( monkeypatch, valid_get_header, context): """Test fatal error handling when fetching a project by id.""" with context, api.app.test_request_context(headers=valid_get_header): monkeypatch.setattr(requests, 'get', mock_ows_requests([{ 'service': 'ows-project-manager', 'path': '/project/123', 'status': 500}])) monkeypatch.setattr(MockOwsResponse, 'json', raise_no_json_error) response = ows_project.get_project_by_id(123) assert response.status == 500 assert response.errors['code'] == 'Internal Error'