Пример #1
0
        public async Task PlayAudioAsyncOverload_Passes(string expectedCallLegId, PlayAudioOptions expectedRequest)
        {
            Mock <CallClient> mockClient = new Mock <CallClient>()
            {
                CallBase = true
            };
            Response <PlayAudioResponse>?expectedResponse  = default;
            CancellationToken            cancellationToken = new CancellationTokenSource().Token;
            var callExpression = BuildExpression(x => x.PlayAudioAsync(It.IsAny <string>(), It.IsAny <PlayAudioOptions>(), It.IsAny <CancellationToken>()));

            mockClient
            .Setup(callExpression)
            .ReturnsAsync((string callLegId, PlayAudioOptions request, CancellationToken token) =>
            {
                Assert.AreEqual(expectedCallLegId, callLegId);
                Assert.AreEqual(expectedRequest, request);
                Assert.AreEqual(cancellationToken, token);
                return(expectedResponse = new Mock <Response <PlayAudioResponse> >().Object);
            });

            Response <PlayAudioResponse> actualResponse = await mockClient.Object.PlayAudioAsync(expectedCallLegId, expectedRequest, cancellationToken);

            mockClient.Verify(callExpression, Times.Once());
            Assert.AreEqual(expectedResponse, actualResponse);
        }
        private async Task PlayAudioAsync()
        {
            if (reportCancellationToken.IsCancellationRequested)
            {
                Logger.LogMessage(Logger.MessageType.INFORMATION, "Cancellation request, PlayAudio will not be performed");
                return;
            }

            try
            {
                // Preparing data for request
                var playAudioRequest = new PlayAudioOptions()
                {
                    AudioFileUri     = new Uri(callConfiguration.AudioFileUrl),
                    OperationContext = Guid.NewGuid().ToString(),
                    Loop             = true,
                };

                Logger.LogMessage(Logger.MessageType.INFORMATION, "Performing PlayAudio operation");
                var response = await callConnection.PlayAudioAsync(playAudioRequest, reportCancellationToken).ConfigureAwait(false);

                Logger.LogMessage(Logger.MessageType.INFORMATION, $"PlayAudioAsync response --> {response.GetRawResponse()}, Id: {response.Value.OperationId}, Status: {response.Value.Status}, OperationContext: {response.Value.OperationContext}, ResultInfo: {response.Value.ResultInfo}");

                if (response.Value.Status == OperationStatus.Running)
                {
                    Logger.LogMessage(Logger.MessageType.INFORMATION, $"Play Audio state: {response.Value.Status}");
                    // listen to play audio events
                    RegisterToPlayAudioResultEvent(playAudioRequest.OperationContext);

                    var completedTask = await Task.WhenAny(playAudioCompletedTask.Task, Task.Delay(30 * 1000)).ConfigureAwait(false);

                    if (completedTask != playAudioCompletedTask.Task)
                    {
                        Logger.LogMessage(Logger.MessageType.INFORMATION, "No response from user in 30 sec, initiating hangup");
                        playAudioCompletedTask.TrySetResult(false);
                        toneReceivedCompleteTask.TrySetResult(false);
                    }
                }
            }
            catch (TaskCanceledException)
            {
                Logger.LogMessage(Logger.MessageType.ERROR, "Play audio operation cancelled");
            }
            catch (Exception ex)
            {
                Logger.LogMessage(Logger.MessageType.ERROR, $"Failure occured while playing audio on the call. Exception: {ex.Message}");
            }
        }
        private async Task PlayAudioAsync(string audioFileUrl)
        {
            if (reportCancellationToken.IsCancellationRequested)
            {
                Logger.LogMessage(Logger.MessageType.INFORMATION, "Cancellation request, PlayAudio will not be performed");
                return;
            }

            try
            {
                if (string.IsNullOrEmpty(audioFileUrl))
                {
                    audioFileUrl = Environment.GetEnvironmentVariable("AudioFileUrl");
                }

                Logger.LogMessage(Logger.MessageType.INFORMATION, $"audioFileUrl = {audioFileUrl}");

                // Preparing data for request
                var playAudioRequest = new PlayAudioOptions()
                {
                    AudioFileUri     = new Uri(audioFileUrl),
                    OperationContext = Guid.NewGuid().ToString(),
                    Loop             = true,
                    AudioFileId      = "",
                };

                Logger.LogMessage(Logger.MessageType.INFORMATION, "Performing PlayAudio operation");
                var response = await callConnection.PlayAudioAsync(playAudioRequest, reportCancellationToken).ConfigureAwait(false);

                Logger.LogMessage(Logger.MessageType.INFORMATION, $"PlayAudioAsync response --> " +
                                  $"{response.GetRawResponse()}, Id: {response.Value.OperationId}, Status: " +
                                  $"{response.Value.Status}, OperationContext: {response.Value.OperationContext}, " +
                                  $"ResultInfo: {response.Value.ResultInfo}");

                if (response.Value.Status == OperationStatus.Running)
                {
                    Logger.LogMessage(Logger.MessageType.INFORMATION, $"Play Audio state: {response.Value.Status}");
                }
            }
            catch (TaskCanceledException)
            {
                Logger.LogMessage(Logger.MessageType.ERROR, "Play audio operation cancelled");
            }
            catch (Exception ex)
            {
                Logger.LogMessage(Logger.MessageType.ERROR, $"Failure occured while playing audio on the call. Exception: {ex.Message}");
            }
        }
        private async Task PlayAudioOperation(CallClient client, string callLegId)
        {
            var playAudioOptions = new PlayAudioOptions()
            {
                AudioFileUri     = new Uri(TestEnvironment.AudioFileUrl),
                OperationContext = "de346f03-7f8d-41ab-a232-cc5e14990769",
                Loop             = true,
                AudioFileId      = "ebb1d98d-fd86-4204-800c-f7bdfc2e515c"
            };

            Console.WriteLine("Performing PlayAudio operation");

            var response = await client.PlayAudioAsync(callLegId, playAudioOptions).ConfigureAwait(false);

            Assert.AreEqual(response.Value.Status, OperationStatus.Running);
        }
        public void PlayAudioOverload_Passes(Uri sampleAudioFileUri, string sampleAudioFileId, Uri sampleCallbackUri, string sampleOperationContext)
        {
            var callConnection = CreateMockCallConnection(202, PlayAudioResponsePayload);

            var playAudio = new PlayAudioOptions()
            {
                AudioFileUri     = sampleAudioFileUri,
                AudioFileId      = sampleAudioFileId,
                CallbackUri      = sampleCallbackUri,
                Loop             = false,
                OperationContext = sampleOperationContext
            };

            var result = callConnection.PlayAudio(playAudio);

            VerifyPlayAudioResult(result);
        }
        public async Task PlayAudioAsyncOverload_Passes(Uri sampleAudioFileUri, string sampleAudioFileId, Uri sampleCallbackUri, string sampleOperationContext)
        {
            var callConnection = CreateMockCallConnection(202, PlayAudioResponsePayload);

            var playAudio = new PlayAudioOptions()
            {
                AudioFileUri     = sampleAudioFileUri,
                AudioFileId      = sampleAudioFileId,
                CallbackUri      = sampleCallbackUri,
                Loop             = false,
                OperationContext = sampleOperationContext
            };

            var result = await callConnection.PlayAudioAsync(playAudio).ConfigureAwait(false);

            VerifyPlayAudioResult(result);
        }
        public void PlayAudioOverload_Failed(Uri sampleAudioFileUri, string sampleAudioFileId, Uri sampleCallbackUri, string sampleOperationContext)
        {
            var callConnection = CreateMockCallConnection(404);

            var playAudio = new PlayAudioOptions()
            {
                AudioFileUri     = sampleAudioFileUri,
                AudioFileId      = sampleAudioFileId,
                CallbackUri      = sampleCallbackUri,
                Loop             = false,
                OperationContext = sampleOperationContext
            };

            RequestFailedException?ex = Assert.Throws <RequestFailedException>(() => callConnection.PlayAudio(playAudio));

            Assert.NotNull(ex);
            Assert.AreEqual(ex?.Status, 404);
        }