"""Test deleting a project.""" import json from unittest.mock import MagicMock from owsrequest import request from owsrequest import test_utils from project_manager.constant import error_const from project_manager.constant import header_const def test_delete_success(client, db_fixture, projects, header, mocker): """Test the successful deletion of a project without products.""" project_id = 3 get_response = MagicMock(status_code=200) highlight_content = {'items': [{'highlight_id': 1}]} get_response.json = MagicMock(return_value=highlight_content) mocker.patch.object(request, 'get', return_value=get_response) delete_response = MagicMock(status_code=200) mocker.patch.object(request, 'delete', return_value=delete_response) result = client.delete('/project/{project_id}'.format( project_id=project_id), headers=header) assert result.status_code == 200 def test_delete_project_with_products( client, db_fixture, projects, header, get_vendor_ows_response, get_company_brand_ows_response, monkeypatch): """Test that deletion fails when a project has products.""" project_id = 1 monkeypatch.setattr( request, 'get', test_utils.mock_ows_requests([ get_vendor_ows_response, get_company_brand_ows_response])) result = client.delete('/project/{project_id}'.format( project_id=project_id), headers=header) response_body = json.loads(result.data.decode()) assert result.status_code == 400 assert response_body.get('message') == \ error_const.ERROR_MESSAGE_PRODUCTS_FOUND def test_delete_project_not_found(client, db_fixture, header): """Test the response when a project is not found.""" project_id = 1 result = client.delete('/project/{project_id}'.format( project_id=project_id), headers=header) response_body = json.loads(result.data.decode()) assert result.status_code == 404 assert response_body.get('message') == 'Unable to find project_id 1' def test_delete_project_ownership_fail(client, db_fixture, project, header): """Test the response when a project is not found.""" project_id = 1 header[header_const.GRASS_ACCOUNT_ID] = 123 result = client.delete('/project/{project_id}'.format( project_id=project_id), headers=header) response_body = json.loads(result.data.decode()) assert result.status_code == 403 assert response_body.get('message') == 'Not the owner of this project'