Skip to content

Commit a467841

Browse files
committed
Merge branch staging
2 parents 5a82a90 + a98583f commit a467841

File tree

2 files changed

+52
-57
lines changed

2 files changed

+52
-57
lines changed

tests/domain/execute_flow_from_position/test_go_to_flow.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ def test_flow_returns_all_go_to_flow_quick_replies_in_the_content_language_when_
141141
mock_repository.set_filter_use_case_uuids_without_production_version(
142142
mocker=mocker,
143143
return_value={
144+
execution_environment.use_case_uuid,
144145
go_to_flow_nodes[0].target_use_case_uuid,
145146
go_to_flow_nodes[2].target_use_case_uuid,
146147
},
@@ -182,5 +183,8 @@ def test_flow_returns_all_go_to_flow_quick_replies_in_the_content_language_when_
182183
last_executed_node_uuid=flow.start_node_uuid,
183184
)
184185
mock_repository.assert_filter_use_case_uuids_without_production_version_called_once_with(
185-
use_case_uuids={node.target_use_case_uuid for node in go_to_flow_nodes}
186+
use_case_uuids={
187+
execution_environment.use_case_uuid,
188+
*(node.target_use_case_uuid for node in go_to_flow_nodes),
189+
}
186190
)

use_case_executor/domain/flow_execution/quick_replies_rendering.py

+47-56
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
)
1919
from use_case_executor.domain.flow.node_data.go_to_use_case_data import GoToUseCaseData
2020
from use_case_executor.domain.flow.node_data.node_type import NodeType
21+
from use_case_executor.domain.flow.node_data.target_use_case_data import (
22+
TargetUseCaseData,
23+
)
2124
from use_case_executor.domain.flow_execution import helpers
2225
from use_case_executor.domain.flow_execution.execution_environment import (
2326
ExecutionEnvironment,
@@ -36,7 +39,7 @@ def render(self) -> dict:
3639

3740

3841
@dataclasses.dataclass(kw_only=True)
39-
class QuickReply(BaseQuickReply):
42+
class GoToFlowQuickReply(BaseQuickReply):
4043
target_use_case_uuid: UUID
4144
target_node_uuid: Optional[UUID]
4245
target_edge_uuid: Optional[UUID]
@@ -62,11 +65,6 @@ def render(self) -> dict:
6265
}
6366

6467

65-
@dataclasses.dataclass(kw_only=True)
66-
class GoToFlowQuickReply(QuickReply):
67-
pass
68-
69-
7068
@dataclasses.dataclass(kw_only=True)
7169
class GoToAdvancedQuickReply(BaseQuickReply):
7270
target_intent_record_id: int
@@ -85,9 +83,6 @@ def render(self) -> dict:
8583
}
8684

8785

88-
QuickReplyTypes = QuickReply | GoToFlowQuickReply | GoToAdvancedQuickReply
89-
90-
9186
def render_answer_node_quick_replies(
9287
answer_node: Node,
9388
execution_environment: ExecutionEnvironment,
@@ -128,8 +123,8 @@ def _convert_and_order_answer_node_quick_replies(
128123
language: str,
129124
use_case_uuid: UUID,
130125
has_go_back_quick_reply: bool,
131-
) -> list[QuickReplyTypes]:
132-
quick_replies: list[QuickReplyTypes] = []
126+
) -> list[BaseQuickReply]:
127+
quick_replies: list[BaseQuickReply] = []
133128
for quick_reply in sorted(
134129
[
135130
edge
@@ -146,7 +141,7 @@ def _convert_and_order_answer_node_quick_replies(
146141
)
147142
if quick_reply.target_node.type != NodeType.go_to_use_case:
148143
quick_replies.append(
149-
QuickReply(
144+
GoToFlowQuickReply(
150145
title=title,
151146
target_use_case_uuid=use_case_uuid,
152147
target_node_uuid=quick_reply.target_node.uuid,
@@ -157,30 +152,18 @@ def _convert_and_order_answer_node_quick_replies(
157152

158153
go_to_use_case_data = quick_reply.target_node.data
159154
assert isinstance(go_to_use_case_data, GoToUseCaseData)
160-
if go_to_use_case_data.target_use_case_uuid is not None:
161-
assert go_to_use_case_data.target_intent_record_id is None
162-
quick_replies.append(
163-
GoToFlowQuickReply(
164-
title=title,
165-
target_use_case_uuid=go_to_use_case_data.target_use_case_uuid,
166-
target_node_uuid=None,
167-
target_edge_uuid=None,
168-
)
169-
)
170-
elif go_to_use_case_data.target_intent_record_id is not None:
171-
quick_replies.append(
172-
GoToAdvancedQuickReply(
173-
title=title,
174-
target_intent_record_id=go_to_use_case_data.target_intent_record_id,
175-
)
155+
quick_replies.append(
156+
_convert_target_use_case_data(
157+
title=title,
158+
target_use_case_data=go_to_use_case_data,
159+
error_message="the target use case is not filled",
176160
)
177-
else:
178-
raise InvalidFlowConfiguration("the target use case is not filled")
161+
)
179162

180163
if has_go_back_quick_reply:
181164
assert answer_node.parent_node_uuid is not None
182165
quick_replies.append(
183-
QuickReply(
166+
GoToFlowQuickReply(
184167
title=constants.GO_BACK_QUICK_REPLY_TITLE[language],
185168
target_use_case_uuid=use_case_uuid,
186169
target_node_uuid=answer_node.parent_node_uuid,
@@ -194,54 +177,62 @@ def _convert_and_order_answer_node_quick_replies(
194177
def _convert_handover_failure_quick_replies(
195178
handover_failure_quick_replies: list[HandoverFailureQuickReply],
196179
language: str,
197-
) -> list[QuickReplyTypes]:
198-
quick_replies: list[QuickReplyTypes] = []
180+
) -> list[BaseQuickReply]:
181+
quick_replies: list[BaseQuickReply] = []
199182
for quick_reply in handover_failure_quick_replies:
200183
title = helpers.get_translation_value(
201184
translation_dict=quick_reply.title_translations,
202185
language=language,
203186
translation_field="handover failure quick reply title",
204187
)
205-
if quick_reply.target_use_case_uuid is not None:
206-
assert quick_reply.target_intent_record_id is None
207-
quick_replies.append(
208-
GoToFlowQuickReply(
209-
title=title,
210-
target_use_case_uuid=quick_reply.target_use_case_uuid,
211-
target_node_uuid=None,
212-
target_edge_uuid=None,
213-
)
214-
)
215-
elif quick_reply.target_intent_record_id is not None:
216-
quick_replies.append(
217-
GoToAdvancedQuickReply(
218-
title=title,
219-
target_intent_record_id=quick_reply.target_intent_record_id,
220-
)
221-
)
222-
else:
223-
raise InvalidFlowConfiguration(
224-
"the use case to send the customer to is not filled for an agent handover quick reply"
188+
quick_replies.append(
189+
_convert_target_use_case_data(
190+
title=title,
191+
target_use_case_data=quick_reply,
192+
error_message=(
193+
"the use case to send the customer to is not filled for an agent"
194+
" handover quick reply"
195+
),
225196
)
197+
)
226198

227199
return quick_replies
228200

229201

202+
def _convert_target_use_case_data(
203+
title: str, target_use_case_data: TargetUseCaseData, error_message: str
204+
) -> BaseQuickReply:
205+
if target_use_case_data.target_use_case_uuid is not None:
206+
assert target_use_case_data.target_intent_record_id is None
207+
return GoToFlowQuickReply(
208+
title=title,
209+
target_use_case_uuid=target_use_case_data.target_use_case_uuid,
210+
target_node_uuid=None,
211+
target_edge_uuid=None,
212+
)
213+
if target_use_case_data.target_intent_record_id is not None:
214+
return GoToAdvancedQuickReply(
215+
title=title,
216+
target_intent_record_id=target_use_case_data.target_intent_record_id,
217+
)
218+
raise InvalidFlowConfiguration(error_message)
219+
220+
230221
@inject
231222
def _get_target_use_case_uuids_to_keep(
232223
target_use_case_uuids: set[UUID],
233224
use_latest: bool,
234225
repository: Repository = Provide["repository"],
235226
) -> set[UUID]:
236-
if use_latest is True or not target_use_case_uuids:
227+
if use_latest or not target_use_case_uuids:
237228
return target_use_case_uuids
238229
return repository.filter_use_case_uuids_without_production_version(
239230
use_case_uuids=target_use_case_uuids
240231
)
241232

242233

243234
def _render_quick_replies(
244-
quick_replies: list[QuickReplyTypes],
235+
quick_replies: list[BaseQuickReply],
245236
use_latest: bool,
246237
) -> list[dict]:
247238
target_use_case_uuids_to_keep = _get_target_use_case_uuids_to_keep(
@@ -258,6 +249,6 @@ def _render_quick_replies(
258249
if quick_reply.target_use_case_uuid in target_use_case_uuids_to_keep:
259250
rendered_quick_replies.append(quick_reply.render())
260251
else:
261-
assert isinstance(quick_reply, (QuickReply, GoToAdvancedQuickReply))
252+
assert isinstance(quick_reply, GoToAdvancedQuickReply)
262253
rendered_quick_replies.append(quick_reply.render())
263254
return rendered_quick_replies

0 commit comments

Comments
 (0)