Skip to content

Commit e7bd065

Browse files
authored
Merge pull request #70 from NHSDigital/feat/add-relay-listener-echo
Handle relay listener echo action
2 parents ca9f210 + 5edd735 commit e7bd065

3 files changed

Lines changed: 21 additions & 15 deletions

File tree

src/relay_listener.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,8 @@
2828
logger = logging.getLogger(__name__)
2929

3030
DB_PATH = os.getenv("MWL_DB_PATH", "/var/lib/pacs/worklist.db")
31-
SAS_TOKEN_EXPIRY_SECONDS = 3600
32-
33-
ACTIONS = {
34-
"worklist.create_item": CreateWorklistItem,
35-
}
3631
EXPIRED_TOKEN = "ExpiredToken"
32+
SAS_TOKEN_EXPIRY_SECONDS = 3600
3733

3834

3935
class RelayListener:
@@ -86,11 +82,12 @@ def process_action(self, payload: dict):
8682
"""Process incoming action payload."""
8783
action_name = payload.get("action_type", "no-op")
8884

89-
action_class = ACTIONS.get(action_name)
90-
if not action_class:
91-
raise ValueError(f"Unknown action: {action_name}")
92-
93-
return action_class(self.storage).call(payload)
85+
if action_name == "echo":
86+
return {"status": "echo", "payload": payload}
87+
elif action_name == "worklist.create_item":
88+
return CreateWorklistItem(self.storage).call(payload)
89+
else:
90+
raise ValueError(f"Unsupported action: {action_name}")
9491

9592
def _connect(self):
9693
"""Connect to Azure Relay."""

tests/services/test_storage.py

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

88
from models import WorklistItem
99
from services.storage import MWLStorage, PACSStorage, WorklistItemNotFoundError
10-
from services.storage import (
11-
MWLStorage,
12-
PACSStorage,
13-
WorklistItemNotFoundError,
14-
)
1510

1611

1712
@pytest.fixture

tests/test_relay_listener.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,20 @@ def test_relay_listener_initialization(self, storage_instance):
3434
assert subject.relay_uri.key_name == "test-key-name"
3535
assert subject.relay_uri.shared_access_key == "test-key-value"
3636

37+
@pytest.mark.asyncio
38+
async def test_relay_listener_listen_echo(self, storage_instance, fake_relay):
39+
subject = RelayListener(storage_instance)
40+
41+
relay_message = json.dumps({"accept": {"address": "wss://accept-url"}})
42+
client_payload = json.dumps({"action_type": "echo", "message": "Hello, Relay!"})
43+
44+
with fake_relay(relay_message, client_payload) as client_ws:
45+
await subject.listen()
46+
47+
client_ws.send.assert_called_once_with(
48+
json.dumps({"status": "echo", "payload": {"action_type": "echo", "message": "Hello, Relay!"}})
49+
)
50+
3751
@pytest.mark.asyncio
3852
async def test_relay_listener_listen(self, storage_instance, listener_payload, fake_relay):
3953
storage_instance.store_worklist_action.return_value = {"action_id": "action-12345", "status": "created"}

0 commit comments

Comments
 (0)