"""ows-project model tests.""" import json from http.client import OK import pytest import requests from owsrequest import request from pytest_mock import MockerFixture from requests.exceptions import HTTPError from video.constants import header, service from video.exceptions import ProjectNotFound from video.models.ows import project as project_model def test_get_project_by_id_success(mocker: MockerFixture) -> None: """Test get_project_by_id success.""" ows_product_response = requests.Response() ows_product_response.status_code = OK ows_product_response._content = json.dumps({"placeholder_upc": 12}).encode() mocker.patch.object( request, "process", return_value=ows_product_response, autospec=True, ) get_product_response = project_model.get_project_by_id(1) assert get_product_response == {"placeholder_upc": 12} def test_get_project_by_id_error(mocker: MockerFixture) -> None: """Test get_project_by_id raises ProjectNotFound when project does not exist.""" ows_project_response = requests.Response() ows_project_response.status_code = 404 ows_project_response._content = b"Project not found" mocker.patch.object( request, "process", return_value=ows_project_response, autospec=True, ) with pytest.raises(ProjectNotFound): project_model.get_project_by_id(1) def test_check_project_ownership_success(mocker: MockerFixture) -> None: """Test check_project_ownership returns None when no credentials given.""" project_model.check_project_ownership(1) def test_create_project_success(mocker: MockerFixture) -> None: """Test create project.""" ows_project_response = requests.Response() ows_project_response.status_code = 201 ows_project_response._content = json.dumps({"project_id": 1}).encode() request_mock = mocker.patch.object( request, "process", return_value=ows_project_response, autospec=True ) data = { "project_name": "Name", "project_code": "Code", "artist_id": 1, "vendor_id": 1, } account_type = "vendor" account_id = "1" result = project_model.create_project(data, account_type, account_id) request_mock.assert_called_once_with( application="ows-video", environment="test", method="POST", service_name=service.OWS_PROJECT, uwsgi_cache_enabled=True, path="/project", json=data, headers={ header.GRASS_ACCOUNT_TYPE: account_type, header.GRASS_ACCOUNT_ID: account_id, }, ) assert result["project_id"] == 1 def test_create_project_error(mocker: MockerFixture) -> None: """Test create project raises BadGateway on error.""" ows_project_response = requests.Response() ows_project_response.status_code = 500 ows_project_response._content = b"An error occurred" request_mock = mocker.patch.object( request, "process", return_value=ows_project_response, autospec=True ) data = { "project_name": "Name", "project_code": "Code", "artist_id": 1, "vendor_id": 1, } with pytest.raises(HTTPError): project_model.create_project(data, "vendor", "1") request_mock.assert_called_once()