async def METHOD_NAME(
    mocked_notifications_plugin: dict[str, mock.Mock],
    mock_catalog_api: dict[str, mock.Mock],
    client,
    logged_user,
    user_project,
    mocked_director_v2_api,
    create_dynamic_service_mock,
    socketio_client_factory: Callable,
    client_session_id_factory: Callable,
    user_role,
    expected_ok,
    expected_forbidden,
    redis_client,
):
    # service in project
    await create_dynamic_service_mock(logged_user["id"], user_project["uuid"])
    # open project in tab1
    client_session_id1 = client_session_id_factory()
    try:
        await socketio_client_factory(client_session_id1)
    except SocketConnectionError:
        if user_role != UserRole.ANONYMOUS:
            pytest.fail("socket io connection should not fail")
    url = client.app.router["open_project"].url_for(project_id=user_project["uuid"])
    resp = await client.post(url, json=client_session_id1)
    data, error = await assert_status(resp, expected_ok)
    if data:
        mocked_notifications_plugin["subscribe"].assert_called_once_with(
            client.app, ProjectID(user_project["uuid"])
        )
    else:
        mocked_notifications_plugin["subscribe"].assert_not_called()
    # delete project in tab2
    client_session_id2 = client_session_id_factory()
    try:
        await socketio_client_factory(client_session_id2)
    except SocketConnectionError:
        if user_role != UserRole.ANONYMOUS:
            pytest.fail("socket io connection should not fail")
    await _request_delete_project(client, user_project, expected_forbidden)