Skip to content

Commit 187f3e3

Browse files
authored
add callmedia tests (Azure#29441)
1 parent c041fff commit 187f3e3

File tree

1 file changed

+149
-0
lines changed

1 file changed

+149
-0
lines changed
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
# -------------------------------------------------------------------------
2+
# Copyright (c) Microsoft Corporation. All rights reserved.
3+
# Licensed under the MIT License. See License.txt in the project root for
4+
# license information.
5+
# --------------------------------------------------------------------------
6+
import unittest
7+
8+
from azure.communication.callautomation import (
9+
CallMediaClient,
10+
_communication_identifier_serializer
11+
)
12+
from azure.communication.callautomation._models import (
13+
FileSource,
14+
PhoneNumberIdentifier,
15+
DtmfTone,
16+
CallMediaRecognizeDtmfOptions
17+
)
18+
from azure.communication.callautomation._generated.models import (
19+
PlayRequest,
20+
PlaySource,
21+
PlaySourceType,
22+
PlayOptions,
23+
RecognizeRequest,
24+
RecognizeOptions,
25+
DtmfOptions
26+
)
27+
from unittest.mock import Mock
28+
29+
class TestCallMediaClient(unittest.TestCase):
30+
def setUp(self):
31+
self.call_connection_id = "10000000-0000-0000-0000-000000000000"
32+
self.uri = "https://file_source_url.com/audio_file.wav"
33+
self.phone_number = "+12345678900"
34+
self.target_user = PhoneNumberIdentifier(self.phone_number)
35+
self.call_media_operations = Mock()
36+
37+
self.call_media_client = CallMediaClient(call_connection_id=self.call_connection_id, call_media_operations=self.call_media_operations)
38+
39+
def test_play(self):
40+
mock_play = Mock()
41+
self.call_media_operations.play = mock_play
42+
play_source = FileSource(uri=self.uri)
43+
44+
self.call_media_client.play(play_source=play_source, play_to=[self.target_user])
45+
46+
expected_play_request = PlayRequest(
47+
play_source_info=PlaySource(
48+
source_type=PlaySourceType.FILE,
49+
file_source=FileSource(uri=self.uri),
50+
play_source_id=None
51+
),
52+
play_to=[_communication_identifier_serializer.serialize_identifier(self.target_user)],
53+
play_options=PlayOptions(loop=False)
54+
)
55+
mock_play.assert_called_once()
56+
actual_play_request = mock_play.call_args[0][1]
57+
58+
self.assertEqual(expected_play_request.play_source_info.source_type, actual_play_request.play_source_info.source_type)
59+
self.assertEqual(expected_play_request.play_source_info.file_source.uri, actual_play_request.play_source_info.file_source.uri)
60+
self.assertEqual(expected_play_request.play_source_info.play_source_id, actual_play_request.play_source_info.play_source_id)
61+
self.assertEqual(expected_play_request.play_to[0]['raw_id'], actual_play_request.play_to[0]['raw_id'])
62+
self.assertEqual(expected_play_request.play_options, actual_play_request.play_options)
63+
64+
65+
def test_play_to_all(self):
66+
mock_play = Mock()
67+
self.call_media_operations.play = mock_play
68+
play_source = FileSource(uri=self.uri)
69+
70+
self.call_media_client.play_to_all(play_source=play_source)
71+
72+
expected_play_request = PlayRequest(
73+
play_source_info=PlaySource(
74+
source_type=PlaySourceType.FILE,
75+
file_source=FileSource(uri=self.uri),
76+
play_source_id=None
77+
),
78+
play_to=[],
79+
play_options=PlayOptions(loop=False)
80+
)
81+
mock_play.assert_called_once()
82+
actual_play_request = mock_play.call_args[0][1]
83+
84+
self.assertEqual(expected_play_request.play_source_info.source_type, actual_play_request.play_source_info.source_type)
85+
self.assertEqual(expected_play_request.play_source_info.file_source.uri, actual_play_request.play_source_info.file_source.uri)
86+
self.assertEqual(expected_play_request.play_source_info.play_source_id, actual_play_request.play_source_info.play_source_id)
87+
self.assertEqual(expected_play_request.play_to, actual_play_request.play_to)
88+
self.assertEqual(expected_play_request.play_options, actual_play_request.play_options)
89+
90+
def test_recognize(self):
91+
mock_recognize = Mock()
92+
self.call_media_operations.recognize = mock_recognize
93+
play_source = FileSource(uri=self.uri)
94+
95+
recognize_options = CallMediaRecognizeDtmfOptions(
96+
target_participant=self.target_user,
97+
max_tones_to_collect=3)
98+
recognize_options.inter_tone_timeout = 10
99+
recognize_options.stop_dtmf_tones = [DtmfTone.FOUR]
100+
recognize_options.interrupt_prompt = True
101+
recognize_options.initial_silence_timeout = 5
102+
recognize_options.play_prompt = play_source
103+
104+
self.call_media_client.start_recognizing(recognize_options=recognize_options)
105+
106+
mock_recognize.assert_called_once()
107+
108+
actual_recognize_request = mock_recognize.call_args[0][1]
109+
110+
expected_recognize_request = RecognizeRequest(
111+
recognize_input_type=recognize_options.input_type,
112+
play_prompt=self.call_media_client._create_play_source_internal(play_source),
113+
interrupt_call_media_operation=recognize_options.interrupt_call_media_operation,
114+
operation_context=recognize_options.operation_context,
115+
recognize_options=RecognizeOptions(
116+
target_participant=_communication_identifier_serializer.serialize_identifier(
117+
recognize_options.target_participant),
118+
interrupt_prompt=recognize_options.interrupt_prompt,
119+
initial_silence_timeout_in_seconds=recognize_options.initial_silence_timeout,
120+
dtmf_options=DtmfOptions(
121+
inter_tone_timeout_in_seconds=recognize_options.inter_tone_timeout,
122+
max_tones_to_collect=recognize_options.max_tones_to_collect,
123+
stop_tones=recognize_options.stop_dtmf_tones
124+
)
125+
)
126+
)
127+
128+
self.assertEqual(expected_recognize_request.recognize_input_type, actual_recognize_request.recognize_input_type)
129+
self.assertEqual(expected_recognize_request.play_prompt.source_type, actual_recognize_request.play_prompt.source_type)
130+
self.assertEqual(expected_recognize_request.play_prompt.file_source.uri, actual_recognize_request.play_prompt.file_source.uri)
131+
self.assertEqual(expected_recognize_request.interrupt_call_media_operation, actual_recognize_request.interrupt_call_media_operation)
132+
self.assertEqual(expected_recognize_request.operation_context, actual_recognize_request.operation_context)
133+
self.assertEqual(expected_recognize_request.recognize_options.target_participant, actual_recognize_request.recognize_options.target_participant)
134+
self.assertEqual(expected_recognize_request.recognize_options.interrupt_prompt, actual_recognize_request.recognize_options.interrupt_prompt)
135+
self.assertEqual(expected_recognize_request.recognize_options.initial_silence_timeout_in_seconds, actual_recognize_request.recognize_options.initial_silence_timeout_in_seconds)
136+
self.assertEqual(expected_recognize_request.recognize_options.dtmf_options.inter_tone_timeout_in_seconds, actual_recognize_request.recognize_options.dtmf_options.inter_tone_timeout_in_seconds)
137+
self.assertEqual(expected_recognize_request.recognize_options.dtmf_options.max_tones_to_collect, actual_recognize_request.recognize_options.dtmf_options.max_tones_to_collect)
138+
self.assertEqual(expected_recognize_request.recognize_options.dtmf_options.stop_tones, actual_recognize_request.recognize_options.dtmf_options.stop_tones)
139+
140+
141+
def test_cancel(self):
142+
mock_cancel_all = Mock()
143+
self.call_media_operations.cancel_all_media_operations = mock_cancel_all
144+
145+
self.call_media_client.cancel_all_media_operations()
146+
147+
mock_cancel_all.assert_called_once()
148+
actual_call_connection_id = mock_cancel_all.call_args[0][0]
149+
self.assertEqual(self.call_connection_id, actual_call_connection_id)

0 commit comments

Comments
 (0)