Skip to content

Commit

Permalink
feat(testing): add service test case to the project
Browse files Browse the repository at this point in the history
Refs: #450
  • Loading branch information
piraz committed Apr 22, 2024
1 parent 7e175c4 commit 18707bd
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 14 deletions.
22 changes: 22 additions & 0 deletions firenado/testing.py
Original file line number Diff line number Diff line change
Expand Up @@ -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():
Expand All @@ -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
Expand Down
29 changes: 15 additions & 14 deletions tests/sqlalchemy_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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.
"""
Expand All @@ -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
Expand All @@ -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(
Expand All @@ -132,15 +133,15 @@ 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
source, we're providing our own session.
"""
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
)
)
Expand All @@ -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(
Expand All @@ -168,15 +169,15 @@ 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
close the datasource after executing resolve_from_data_source.
"""
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
)
)
Expand All @@ -187,15 +188,15 @@ 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
during the method call, changing to datasource2. It will be injected
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'])
Expand Down

0 comments on commit 18707bd

Please sign in to comment.