From 18707bdc96e744233a7a2aa098f58db3ed3b44e1 Mon Sep 17 00:00:00 2001 From: Flavio Garcia Date: Sun, 21 Apr 2024 23:43:43 -0400 Subject: [PATCH] feat(testing): add service test case to the project Refs: #450 --- firenado/testing.py | 22 ++++++++++++++++++++++ tests/sqlalchemy_test.py | 29 +++++++++++++++-------------- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/firenado/testing.py b/firenado/testing.py index 56c5797..b742520 100644 --- a/firenado/testing.py +++ b/firenado/testing.py @@ -16,6 +16,7 @@ from firenado.launcher import ProcessLauncher, TornadoLauncher from tornado.testing import (bind_unused_port, AsyncTestCase, AsyncHTTPTestCase) +from unittest import TestCase def get_event_loop(): @@ -28,6 +29,27 @@ def get_event_loop(): return loop if loop else asyncio.new_event_loop() +class ServiceTestCase(TestCase): + + def setUp(self): + """ Call the configure data connection method + """ + self.configure_data_connected() + + def configure_data_connected(self): + """Should be overridden with the configutation of the data connected + instance + """ + raise NotImplementedError() + + @property + def data_connected(self): + """Should be overridden by subclasses to return a data connected + instance + """ + raise NotImplementedError() + + class TornadoAsyncTestCase(AsyncTestCase): @property diff --git a/tests/sqlalchemy_test.py b/tests/sqlalchemy_test.py index 84087bc..6f1728a 100644 --- a/tests/sqlalchemy_test.py +++ b/tests/sqlalchemy_test.py @@ -16,6 +16,7 @@ from tests.service_test import TestableDataConnected, ServedByInstance from firenado.sqlalchemy import base_to_dict, with_session from firenado.service import FirenadoService, with_service +from firenado.testing import ServiceTestCase from sqlalchemy import String from sqlalchemy.types import DateTime from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column @@ -43,7 +44,7 @@ class TestBase(Base): server_default=text("now()")) -class MockSessionedService(FirenadoService): +class DummySessionedService(FirenadoService): @with_session def resolve_from_default_data_source(self, **kwargs): @@ -96,11 +97,11 @@ def test_base_to_dict_parametrized(self): self.assertTrue("modified" not in dict_from_base) -class SessionedTestCase(unittest.TestCase): +class SessionedTestCase(ServiceTestCase): - mock_sessioned_service: MockSessionedService + dummy_sessioned_service: DummySessionedService - def setUp(self): + def configure_data_connected(self): """ Setting up an object that has firenado.core.service.served_by decorators on some methods. """ @@ -112,7 +113,7 @@ def setUp(self): def data_connected(self): return self.served_by_instance.data_connected - @with_service(MockSessionedService) + @with_service(DummySessionedService) def test_sessioned_default_data_source(self): """ Method resolve_from_default_data_source is anoteded with sessioned and no parameter. The data source to be used is the one defined either @@ -122,7 +123,7 @@ def test_sessioned_default_data_source(self): As no session was provided the session will be closed """ resolved_kwargs = ( - self.mock_sessioned_service.resolve_from_default_data_source() + self.dummy_sessioned_service.resolve_from_default_data_source() ) self.assertEqual("datasource2", resolved_kwargs['data_source']) data_source = self.data_connected.get_data_source( @@ -132,7 +133,7 @@ def test_sessioned_default_data_source(self): resolved_kwargs['session'].name) self.assertFalse(resolved_kwargs['session'].is_oppened) - @with_service(MockSessionedService) + @with_service(DummySessionedService) def test_sessioned_default_data_source_my_session(self): """ Method resolve_from_default_data_source is anoteded with sessioned and no parameter. Instead of getting the session from the default data @@ -140,7 +141,7 @@ def test_sessioned_default_data_source_my_session(self): """ data_source = self.data_connected.get_data_source("datasource1") resolved_kwargs = ( - self.mock_sessioned_service.resolve_from_default_data_source( + self.dummy_sessioned_service.resolve_from_default_data_source( session=data_source.session ) ) @@ -151,14 +152,14 @@ def test_sessioned_default_data_source_my_session(self): resolved_kwargs['session'].name) self.assertTrue(resolved_kwargs['session'].is_oppened) - @with_service(MockSessionedService) + @with_service(DummySessionedService) def test_sessioned_from_data_source(self): """ Method resolve_from_data_source is anoteded with sessioned and datasource1 as parameter. It will be injected to the method kwargs session from datasource1. """ resolved_kwargs = ( - self.mock_sessioned_service.resolve_from_data_source() + self.dummy_sessioned_service.resolve_from_data_source() ) self.assertEqual("datasource1", resolved_kwargs['data_source']) data_source = self.data_connected.get_data_source( @@ -168,7 +169,7 @@ def test_sessioned_from_data_source(self): resolved_kwargs['session'].name) self.assertFalse(resolved_kwargs['session'].is_oppened) - @with_service(MockSessionedService) + @with_service(DummySessionedService) def test_sessioned_from_data_source_provide_session(self): """ Method resolve_from_default_data_source is anoteded with sessioned and no parameter. This time we provide the session and provided to @@ -176,7 +177,7 @@ def test_sessioned_from_data_source_provide_session(self): """ data_source = self.data_connected.get_data_source("datasource2") resolved_kwargs = ( - self.mock_sessioned_service.resolve_from_data_source( + self.dummy_sessioned_service.resolve_from_data_source( session=data_source.session, close=True ) ) @@ -187,7 +188,7 @@ def test_sessioned_from_data_source_provide_session(self): resolved_kwargs['session'].name) self.assertFalse(resolved_kwargs['session'].is_oppened) - @with_service(MockSessionedService) + @with_service(DummySessionedService) def test_sessioned_with_my_data_source_closing_connection(self): """ Method resolve_from_data_source is anoteded with sessioned and datasource1 as parameter. We're overwriting the data_source parameter @@ -195,7 +196,7 @@ def test_sessioned_with_my_data_source_closing_connection(self): to the method kwargs a session from data_source1. """ resolved_kwargs = ( - self.mock_sessioned_service.resolve_from_data_source( + self.dummy_sessioned_service.resolve_from_data_source( data_source="datasource2") ) self.assertEqual("datasource2", resolved_kwargs['data_source'])