Skip to content

Commit b91c289

Browse files
author
Alan Christie
committed
test: Use of test fixtures
1 parent 0a3699f commit b91c289

File tree

5 files changed

+51
-25
lines changed

5 files changed

+51
-25
lines changed

tests/instance_launcher.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from informaticsmatters.protobuf.datamanager.pod_message_pb2 import PodMessage
77

8+
from tests.message_dispatcher import UnitTestMessageDispatcher
89
from workflow.workflow_abc import InstanceLauncher, LaunchResult
910

1011
_JOB_DIRECTORY: str = os.path.join(os.path.dirname(__file__), "jobs")
@@ -13,8 +14,15 @@
1314
class UnitTestInstanceLauncher(InstanceLauncher):
1415
"""A unit test instance launcher, which runs the
1516
Python module that matches the job name in the provided specification.
17+
It also uses the UnitTestMessageDispatcher to send the simulated
18+
'end of instance' PodMessage (to the WorkflowEngine).
1619
"""
1720

21+
def __init__(self, msg_dispatcher: UnitTestMessageDispatcher):
22+
super().__init__()
23+
24+
self._msg_dispatcher = msg_dispatcher
25+
1826
def launch(
1927
self,
2028
*,

tests/test_test_instance_launcher.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,22 @@
55
pytestmark = pytest.mark.unit
66

77
from tests.instance_launcher import UnitTestInstanceLauncher
8+
from tests.message_dispatcher import UnitTestMessageDispatcher
9+
from tests.message_queue import UnitTestMessageQueue
810

911

10-
def test_get_nop_job():
12+
@pytest.fixture
13+
def basic_launcher():
14+
utmq = UnitTestMessageQueue()
15+
utmd = UnitTestMessageDispatcher(msg_queue=utmq)
16+
return UnitTestInstanceLauncher(msg_dispatcher=utmd)
17+
18+
19+
def test_get_nop_job(basic_launcher):
1120
# Arrange
12-
util = UnitTestInstanceLauncher()
1321

1422
# Act
15-
result = util.launch(
23+
result = basic_launcher.launch(
1624
project_id="project-00000000-0000-0000-0000-000000000000",
1725
workflow_id="workflow-00000000-0000-0000-0000-000000000000",
1826
workflow_definition={},

tests/test_test_message_dispatcher.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,20 @@
1212
from tests.message_queue import UnitTestMessageQueue
1313

1414

15-
def test_get_nop_job():
16-
# Arrange
15+
@pytest.fixture
16+
def basic_dispatcher():
1717
utmq = UnitTestMessageQueue()
18-
utmd = UnitTestMessageDispatcher(msg_queue=utmq)
18+
return UnitTestMessageDispatcher(msg_queue=utmq)
19+
20+
21+
def test_get_nop_job(basic_dispatcher):
22+
# Arrange
1923
msg = WorkflowMessage()
2024
msg.timestamp = f"{datetime.now(timezone.utc).isoformat()}Z"
2125
msg.action = "START"
2226
msg.running_workflow = "r-workflow-00000000-0000-0000-0000-000000000000"
2327

2428
# Act
25-
utmd.send(msg)
29+
basic_dispatcher.send(msg)
2630

2731
# Assert

tests/test_test_message_queue.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,41 +19,41 @@ def handle_msg(self, msg: Message) -> None:
1919
print(f"Received message ({type(msg).__name__})")
2020

2121

22-
def test_start_and_stop():
23-
# Arrange
22+
@pytest.fixture
23+
def basic_queue():
2424
receiver = Receiver()
2525
utmq = UnitTestMessageQueue(receiver=receiver.handle_msg)
2626
utmq.start()
27-
28-
# Act
27+
yield utmq
2928
utmq.stop()
3029
utmq.join()
3130

31+
32+
def test_start_and_stop(basic_queue):
33+
# Arrange
34+
35+
# Act
36+
pass
37+
3238
# Assert
3339

3440

35-
def test_send_messages():
41+
def test_send_messages(basic_queue):
3642
# Arrange
37-
receiver = Receiver()
38-
utmq = UnitTestMessageQueue(receiver=receiver.handle_msg)
39-
utmq.start()
4043

4144
# Act
4245
msg = WorkflowMessage()
4346
msg.timestamp = f"{datetime.now(timezone.utc).isoformat()}Z"
4447
msg.action = "START"
4548
msg.running_workflow = "r-workflow-00000000-0000-0000-0000-000000000000"
46-
utmq.put(msg)
49+
basic_queue.put(msg)
4750

4851
msg = WorkflowMessage()
4952
msg.timestamp = f"{datetime.now(timezone.utc).isoformat()}Z"
5053
msg.action = "STOP"
5154
msg.running_workflow = "r-workflow-00000000-0000-0000-0000-000000000000"
52-
utmq.put(msg)
55+
basic_queue.put(msg)
5356

5457
time.sleep(0.5)
5558

56-
utmq.stop()
57-
utmq.join()
58-
5959
# Assert

tests/test_worflow_validator.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,21 @@
1111
from workflow.worklfow_validator import ValidationLevel, WorkflowValidator
1212

1313

14-
def test_validate_minimal_for_create():
15-
# Arrange
16-
msg_queue = UnitTestMessageQueue()
14+
@pytest.fixture
15+
def basic_validator():
16+
# A 'basic' unit-test WorkflowAdapter needs a DB adapter and Message Dispatcher.
17+
# For testing outside of the DM the Message Dispatcher also needs a Message Queue
1718
db_adapter = UnitTestDatabaseAdapter()
19+
msg_queue = UnitTestMessageQueue()
1820
msg_dispatcher = UnitTestMessageDispatcher(msg_queue=msg_queue)
19-
validator = WorkflowValidator(db_adapter=db_adapter, msg_dispatcher=msg_dispatcher)
21+
return WorkflowValidator(db_adapter=db_adapter, msg_dispatcher=msg_dispatcher)
22+
23+
24+
def test_validate_minimal_for_create(basic_validator):
25+
# Arrange
2026

2127
# Act
22-
error = validator.validate(
28+
error = basic_validator.validate(
2329
level=ValidationLevel.CREATE,
2430
workflow_definition=_MINIMAL_WORKFLOW,
2531
)

0 commit comments

Comments
 (0)