"""Tests for handlers.""" from unittest.mock import MagicMock from oto import response from ows_product_physical.constant import error from ows_product_physical.constant import header from ows_product_physical.logic import product_physical def test_handler_delete_product_by_id_success( monkeypatch, client, fixture_response_ok, valid_delete_header): """Test `DELETE /product/{productId}` handler success state.""" monkeypatch.setattr( product_physical, 'delete', value=MagicMock(return_value=fixture_response_ok)) result = client.delete('/product/1234', headers=valid_delete_header) assert result.status_code == 200 assert product_physical.delete.called def test_handler_delete_product_by_id_header_error( monkeypatch, client, fixture_response_ok, valid_delete_header): """Test `DELETE /product/{productId}` handler success state.""" monkeypatch.setattr( product_physical, 'delete', value=MagicMock(return_value=fixture_response_ok)) invalid_header = valid_delete_header invalid_header[header.GRASS_ACCOUNT_TYPE] = 'banana' result = client.delete('/product/1234', headers=invalid_header) assert result.status_code == 400 assert not product_physical.delete.called def test_handler_delete_product_by_id_not_found_error( monkeypatch, client, valid_delete_header): """Test `DELETE /product/{productId}` for product that doesn't exist.""" monkeypatch.setattr( product_physical, 'delete', value=MagicMock(return_value=response.create_not_found_response( message='Product does not exist.'))) result = client.delete('/product/1234', headers=valid_delete_header) assert result.status_code == 404 assert product_physical.delete.called def test_handler_delete_product_by_id_ownership_failure( monkeypatch, client, valid_delete_header): """Test `DELETE /product/{productId}` product ownership check failure.""" monkeypatch.setattr( product_physical, 'delete', value=MagicMock(return_value=response.Response( status=403, message='The project is not owned by this user.'))) result = client.delete('/product/1234', headers=valid_delete_header) assert result.status_code == 403 assert product_physical.delete.called def test_handler_delete_product_by_id_status_failure( monkeypatch, client, valid_delete_header): """Test `DELETE /product/{productId}` product status check failure.""" error_response = response.create_error_response( message='status-error', status=400, code=error.RELEASE_STATUS_ERROR) monkeypatch.setattr( product_physical, 'delete', value=MagicMock(return_value=error_response)) result = client.delete('/product/1234', headers=valid_delete_header) assert result.status_code == 400 assert product_physical.delete.called