Skip to content

Commit acd6e38

Browse files
committed
Unittest added
1 parent 258e227 commit acd6e38

File tree

3 files changed

+178
-4
lines changed

3 files changed

+178
-4
lines changed

symphony/bdk/core/config/model/bdk_datafeed_config.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@ def __init__(self, config):
1515
1616
:param config: the dict containing the datafeed specific confguration.
1717
"""
18-
self.version = config.get(VERSION) if VERSION in config else DF_V1
18+
self.version = DF_V1
1919
self.id_file_path = ""
20-
if config is not None and DF_ID_FILE_PATH in config:
21-
self.id_file_path = Path(config.get(DF_ID_FILE_PATH))
20+
if config is not None:
21+
self.id_file_path = Path(config.get(DF_ID_FILE_PATH)) if DF_ID_FILE_PATH in config else ""
22+
self.version = config.get(VERSION)
2223

2324
def get_id_file_path(self) -> Path:
2425
"""

tests/core/config/models/test_bdk_datafeed_config.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import pytest
44

55

6-
@pytest.fixture(params=["v1", 25, True])
6+
@pytest.fixture(params=["v1"])
77
def datafeed_version(request):
88
return request.param
99

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
import pytest
2+
from unittest.mock import MagicMock, AsyncMock, call
3+
4+
from symphony.bdk.core.auth.auth_session import AuthSession
5+
from symphony.bdk.core.config.loader import BdkConfigLoader
6+
from symphony.bdk.core.service.datafeed.abstract_datafeed_loop import RealTimeEvent
7+
from symphony.bdk.core.service.datafeed.datafeed_loop_v2 import DatafeedLoopV2
8+
from symphony.bdk.core.service.datafeed.real_time_event_listener import RealTimeEventListener
9+
from symphony.bdk.gen import ApiClient, ApiException
10+
from symphony.bdk.gen.agent_api.datafeed_api import DatafeedApi
11+
from symphony.bdk.gen.agent_model.ack_id import AckId
12+
from symphony.bdk.gen.agent_model.datafeed import Datafeed
13+
from symphony.bdk.gen.agent_model.v4_event import V4Event
14+
from symphony.bdk.gen.agent_model.v4_initiator import V4Initiator
15+
from symphony.bdk.gen.agent_model.v4_message_sent import V4MessageSent
16+
from symphony.bdk.gen.agent_model.v4_payload import V4Payload
17+
from symphony.bdk.gen.agent_model.v4_user import V4User
18+
from tests.utils.resource_utils import get_config_resource_filepath
19+
20+
21+
@pytest.fixture()
22+
def auth_session():
23+
auth_session = AuthSession(None)
24+
auth_session.session_token = "session_token"
25+
auth_session.key_manager_token = "km_token"
26+
return auth_session
27+
28+
29+
@pytest.fixture()
30+
def config():
31+
config = BdkConfigLoader.load_from_file(get_config_resource_filepath("config.yaml"))
32+
config.datafeed.version = "v2"
33+
return config
34+
35+
36+
@pytest.fixture()
37+
def datafeed_api():
38+
datafeed_api = MagicMock(DatafeedApi)
39+
datafeed_api.api_client = MagicMock(ApiClient)
40+
datafeed_api.list_datafeed = AsyncMock()
41+
datafeed_api.create_datafeed = AsyncMock()
42+
datafeed_api.read_datafeed = AsyncMock()
43+
datafeed_api.delete_datafeed = AsyncMock()
44+
return datafeed_api
45+
46+
47+
@pytest.fixture()
48+
def mock_listener():
49+
return AsyncMock(wraps=RealTimeEventListener())
50+
51+
52+
@pytest.fixture()
53+
def initiator():
54+
return V4Initiator(user=V4User(username="username"))
55+
56+
57+
@pytest.fixture()
58+
def message_sent_event(initiator):
59+
class EventsMock:
60+
def __init__(self, individual_event):
61+
self.events = [individual_event]
62+
self.ack_id = "ack_id"
63+
64+
v4_event = V4Event(type=RealTimeEvent.MESSAGESENT.name,
65+
payload=V4Payload(message_sent=V4MessageSent()),
66+
initiator=initiator)
67+
event = EventsMock(v4_event)
68+
return event
69+
70+
71+
@pytest.fixture()
72+
def datafeed_loop(datafeed_api, auth_session, config):
73+
datafeed_loop = DatafeedLoopV2(datafeed_api, auth_session, config)
74+
75+
class RealTimeEventListenerImpl(RealTimeEventListener):
76+
77+
async def on_message_sent(self, initiator: V4Initiator, event: V4MessageSent):
78+
await datafeed_loop.stop()
79+
80+
datafeed_loop.subscribe(RealTimeEventListenerImpl())
81+
return datafeed_loop
82+
83+
84+
@pytest.mark.asyncio
85+
async def test_start(datafeed_loop, datafeed_api, message_sent_event):
86+
datafeed_api.list_datafeed.return_value = []
87+
datafeed_api.create_datafeed.return_value = Datafeed(id="test_id")
88+
datafeed_api.read_datafeed.return_value = message_sent_event
89+
90+
await datafeed_loop.start()
91+
92+
datafeed_api.list_datafeed.assert_called_with(
93+
session_token="session_token",
94+
key_manager_token="km_token"
95+
)
96+
datafeed_api.create_datafeed.assert_called_with(
97+
session_token="session_token",
98+
key_manager_token="km_token"
99+
)
100+
datafeed_api.read_datafeed.assert_called_with(
101+
session_token="session_token",
102+
key_manager_token="km_token",
103+
datafeed_id="test_id",
104+
ack_id=AckId(ack_id="")
105+
)
106+
107+
assert datafeed_loop.datafeed_id == "test_id"
108+
assert datafeed_loop._ack_id == "ack_id"
109+
110+
111+
@pytest.mark.asyncio
112+
async def test_start_datafeed_exist(datafeed_loop, datafeed_api, message_sent_event):
113+
datafeed_api.list_datafeed.return_value = [Datafeed(id="test_id_exist")]
114+
datafeed_api.read_datafeed.return_value = message_sent_event
115+
116+
await datafeed_loop.start()
117+
118+
datafeed_api.list_datafeed.assert_called_with(
119+
session_token="session_token",
120+
key_manager_token="km_token"
121+
)
122+
datafeed_api.read_datafeed.assert_called_with(
123+
session_token="session_token",
124+
key_manager_token="km_token",
125+
datafeed_id="test_id_exist",
126+
ack_id=AckId(ack_id="")
127+
)
128+
129+
assert datafeed_loop.datafeed_id == "test_id_exist"
130+
assert datafeed_loop._ack_id == "ack_id"
131+
132+
133+
@pytest.mark.asyncio
134+
async def test_start_datafeed_stale_datafeed(datafeed_loop, datafeed_api, message_sent_event):
135+
datafeed_api.list_datafeed.return_value = [Datafeed(id="fault_datafeed_id")]
136+
datafeed_api.create_datafeed.return_value = Datafeed(id="test_id")
137+
datafeed_api.read_datafeed.side_effect = [ApiException(400), message_sent_event]
138+
139+
await datafeed_loop.start()
140+
141+
datafeed_api.list_datafeed.assert_called_with(
142+
session_token="session_token",
143+
key_manager_token="km_token"
144+
)
145+
146+
datafeed_api.delete_datafeed.assert_called_with(
147+
session_token="session_token",
148+
key_manager_token="km_token",
149+
datafeed_id="fault_datafeed_id"
150+
)
151+
152+
datafeed_api.create_datafeed.assert_called_with(
153+
session_token="session_token",
154+
key_manager_token="km_token"
155+
)
156+
157+
datafeed_api.read_datafeed.assert_has_calls([
158+
call(
159+
session_token="session_token",
160+
key_manager_token="km_token",
161+
datafeed_id="fault_datafeed_id",
162+
ack_id=AckId(ack_id="")
163+
),
164+
call(
165+
session_token="session_token",
166+
key_manager_token="km_token",
167+
datafeed_id="test_id",
168+
ack_id=AckId(ack_id="")
169+
)
170+
])
171+
172+
assert datafeed_loop.datafeed_id == "test_id"
173+
assert datafeed_loop._ack_id == "ack_id"

0 commit comments

Comments
 (0)