Skip to content

Commit a723904

Browse files
authored
🐛Ensure nodeProgress event is sent to all user groups (ITISFoundation#8180)
1 parent e2f0683 commit a723904

File tree

3 files changed

+25
-12
lines changed

3 files changed

+25
-12
lines changed

services/web/server/src/simcore_service_webserver/notifications/_rabbitmq_exclusive_queue_consumers.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
SOCKET_IO_LOG_EVENT,
3030
SOCKET_IO_NODE_UPDATED_EVENT,
3131
SOCKET_IO_WALLET_OSPARC_CREDITS_UPDATED_EVENT,
32+
send_message_to_project_room,
3233
send_message_to_standard_group,
3334
send_message_to_user,
3435
)
@@ -90,9 +91,9 @@ async def _progress_message_parser(app: web.Application, data: bytes) -> bool:
9091
).to_socket_dict()
9192

9293
if message:
93-
await send_message_to_user(
94+
await send_message_to_project_room(
9495
app,
95-
rabbit_message.user_id,
96+
project_id=rabbit_message.project_id,
9697
message=message,
9798
)
9899
return True

services/web/server/tests/integration/02/notifications/test_rabbitmq_consumers.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import sqlalchemy as sa
1616
from aiohttp.test_utils import TestClient
1717
from faker import Faker
18+
from models_library.api_schemas_webserver.socketio import SocketIORoomStr
1819
from models_library.progress_bar import ProgressReport
1920
from models_library.projects import ProjectID
2021
from models_library.projects_nodes_io import NodeID
@@ -54,6 +55,7 @@
5455
from simcore_service_webserver.rest.plugin import setup_rest
5556
from simcore_service_webserver.security.plugin import setup_security
5657
from simcore_service_webserver.session.plugin import setup_session
58+
from simcore_service_webserver.socketio._utils import get_socket_server
5759
from simcore_service_webserver.socketio.messages import (
5860
SOCKET_IO_EVENT,
5961
SOCKET_IO_LOG_EVENT,
@@ -73,7 +75,7 @@
7375
"redis",
7476
]
7577

76-
pytest_simcore_ops_services_selection = []
78+
pytest_simcore_ops_services_selection = ["redis-commander"]
7779

7880
_STABLE_DELAY_S = 2
7981

@@ -113,7 +115,7 @@ async def _assert_handler_called_with_json(
113115
handler: mock.Mock, expected_call: dict[str, Any]
114116
) -> None:
115117
async for attempt in AsyncRetrying(
116-
wait=wait_fixed(0.1),
118+
wait=wait_fixed(0.2),
117119
stop=stop_after_delay(10),
118120
retry=retry_if_exception_type(AssertionError),
119121
reraise=True,
@@ -186,13 +188,13 @@ def user_project_id(user_project: ProjectDict) -> ProjectID:
186188

187189
@pytest.fixture
188190
def user_id(logged_user: UserInfoDict) -> UserID:
189-
return UserID(logged_user["id"])
191+
return logged_user["id"]
190192

191193

192194
@pytest.fixture
193195
def sender_user_id(user_id: UserID, sender_same_user_id: bool, faker: Faker) -> UserID:
194196
if sender_same_user_id is False:
195-
return UserID(faker.pyint(min_value=user_id + 1))
197+
return faker.pyint(min_value=user_id + 1)
196198
return user_id
197199

198200

@@ -333,8 +335,10 @@ async def test_progress_non_computational_workflow(
333335
334336
"""
335337
socket_io_conn, *_ = await create_socketio_connection(None, client)
338+
# the project must be opened here
336339

337340
mock_progress_handler = mocker.MagicMock()
341+
338342
socket_io_conn.on(
339343
WebSocketNodeProgress.get_event_type(), handler=mock_progress_handler
340344
)
@@ -343,6 +347,10 @@ async def test_progress_non_computational_workflow(
343347
assert client.app
344348
await project_logs.subscribe(client.app, user_project_id)
345349

350+
# this simulates the user openning the project
351+
await get_socket_server(client.app).enter_room(
352+
socket_io_conn.get_sid(), SocketIORoomStr.from_project_id(user_project_id)
353+
)
346354
progress_message = ProgressRabbitMessageNode(
347355
user_id=sender_user_id,
348356
project_id=user_project_id,
@@ -352,7 +360,7 @@ async def test_progress_non_computational_workflow(
352360
)
353361
await rabbitmq_publisher.publish(progress_message.channel_name, progress_message)
354362

355-
call_expected = sender_same_user_id and subscribe_to_logs
363+
call_expected = subscribe_to_logs
356364
if call_expected:
357365
expected_call = WebSocketNodeProgress.from_rabbit_message(
358366
progress_message
@@ -399,6 +407,10 @@ async def test_progress_computational_workflow(
399407
if subscribe_to_logs:
400408
assert client.app
401409
await project_logs.subscribe(client.app, user_project_id)
410+
# this simulates the user openning the project
411+
await get_socket_server(client.app).enter_room(
412+
socket_io_conn.get_sid(), SocketIORoomStr.from_project_id(user_project_id)
413+
)
402414
progress_message = ProgressRabbitMessageNode(
403415
user_id=sender_user_id,
404416
project_id=user_project_id,

services/web/server/tests/unit/isolated/notifications/test_rabbitmq_consumers.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,17 @@
8080
async def test_regression_progress_message_parser(
8181
mocker: MockerFixture, raw_data: bytes, expected_socket_message: SocketMessageDict
8282
):
83-
send_messages_to_user_mock = mocker.patch(
84-
"simcore_service_webserver.notifications._rabbitmq_exclusive_queue_consumers.send_message_to_user",
83+
send_message_to_project_room_mock = mocker.patch(
84+
"simcore_service_webserver.notifications._rabbitmq_exclusive_queue_consumers.send_message_to_project_room",
8585
autospec=True,
8686
)
8787

8888
app = AsyncMock()
8989
assert await _progress_message_parser(app, raw_data)
9090

91-
# tests how send_message_to_user is called
92-
assert send_messages_to_user_mock.call_count == 1
93-
message = send_messages_to_user_mock.call_args.kwargs["message"]
91+
# tests how send_message_to_project_room is called
92+
assert send_message_to_project_room_mock.call_count == 1
93+
message = send_message_to_project_room_mock.call_args.kwargs["message"]
9494

9595
# check that all fields are sent as expected
9696
assert message["data"] == expected_socket_message["data"]

0 commit comments

Comments
 (0)