"""Test entities logic.""" from unittest.mock import MagicMock from oto import response from oto import status import pytest from marketing.constants import error from marketing.logic import entities from marketing.models import entities as entities_model @pytest.mark.parametrize('entity_type,method_name', ( [entities_model.PRODUCT_TYPE, 'is_product_owner'], [entities_model.RELEASE_TYPE, 'is_product_owner'], [entities_model.PROJECT_TYPE, 'is_project_owner'])) def test_entity_ownership(monkeypatch, entity_type, method_name): """Test entity ownership.""" monkeypatch.setattr( entities_model, method_name, MagicMock( spec=getattr(entities_model, method_name), return_value=response.Response())) entity_id = 2000 account_type = 'vendor' account_id = 5598 entities.is_owner(entity_type, entity_id, account_type, account_id) entity_method = getattr(entities_model, method_name) assert entity_method.called entity_method.assert_called_with( entity_id, account_type, account_id) def test_bad_entity_ownership(monkeypatch): """Test getting ownership on a bad entity.""" entity_type = 'bad' response = entities.is_owner(entity_type, 2000, 'vendor', 2093) message = error.ERROR_MESSAGE_UNSUPPORTED_PRODUCT assert response.errors.get('code') == error.ERROR_CODE_VALIDATION assert response.errors.get('message') == message.format(entity_type) assert response.status is status.BAD_REQUEST @pytest.mark.parametrize('entity_type,method_name', ( [entities_model.PRODUCT_TYPE, 'get_product_by_id'], [entities_model.RELEASE_TYPE, 'get_product_by_id'], [entities_model.PROJECT_TYPE, 'get_project_by_id'])) def test_verify_entity_existence(monkeypatch, entity_type, method_name): """Test verify entity existence.""" entity_method = getattr(entities_model, method_name) monkeypatch.setattr( entities_model, method_name, MagicMock(spec=entity_method, return_value=response.Response())) entity_id = 20 assert entities.verify_existence(entity_type, entity_id) entity_method = getattr(entities_model, method_name) assert entity_method.called entity_method.assert_called_with(entity_id) def test_verify_bad_entity_existence(monkeypatch): """Test verifying existence of a bad entity.""" entity_type = 'bad' response = entities.verify_existence(entity_type, 2000) message = error.ERROR_MESSAGE_UNSUPPORTED_PRODUCT assert response.errors.get('code') == error.ERROR_CODE_VALIDATION assert response.errors.get('message') == message.format(entity_type) assert response.status is status.BAD_REQUEST