コード例 #1
0
        public async Task Play_song_request__handle_request()
        {
            // Arrange
            var customSkillRequest = new CustomSkillRequest {
                Intent = new Intent {
                    Name  = "PlaySongTitleArtistRequest",
                    Slots = new Dictionary <string, Slot> {
                        {
                            "Title", new Slot {
                                Name  = "Title",
                                Value = "I Will Wait"
                            }
                        },
                        {
                            "ArtistName", new Slot {
                                Name  = "ArtistName",
                                Value = "Mumford & Sons"
                            }
                        }
                    }
                },
                DialogState = "STARTED",
                Type        = "PlaySongTitleArtistRequest"
            };

            // mock dependency provider common
            Mock <ICommonDependencyProvider> provider = new Mock <ICommonDependencyProvider>(MockBehavior.Strict);

            // mock dependency provider sqs
            var request = new JukeboxSqsRequest {
                Key         = "328",
                MessageBody = "foo-bar",
                RequestType = "PlaySongTitleArtistRequest"
            };
            var sendMessageRequest = new SendMessageRequest {
                QueueUrl               = "http://foo-bar",
                MessageGroupId         = "bat-baz",
                MessageDeduplicationId = "foo-date",
                MessageBody            = JsonConvert.SerializeObject(request)
            };
            Mock <IAmazonSQS> sqsClient = new Mock <IAmazonSQS>(MockBehavior.Strict);

            sqsClient.Setup(x => x.SendMessageAsync(sendMessageRequest, new CancellationToken()));

            // mock dependency provider dynamodb
            IEnumerable <SongModel.Song> foundDynamodbSongs = new List <SongModel.Song> {
                SongFixtures.Song1
            };
            Mock <IDynamodbDependencyProvider> dynamodbProvider = new Mock <IDynamodbDependencyProvider>(MockBehavior.Strict);

            dynamodbProvider.Setup(x => x.DynamoDbFindSongsByTitleArtistAsync("I Will Wait", "Mumford & Sons")).Returns(Task.FromResult(foundDynamodbSongs));
            var playSongRequest = new PlaySongTitleArtistRequest(provider.Object, sqsClient.Object, "http://foo-bar", dynamodbProvider.Object);

            // Act
            var response = await playSongRequest.HandleRequest(customSkillRequest);

            // Assert
            Assert.Contains("Sending song number 328", response.Message);
        }
コード例 #2
0
        public static async Task Abstract_intent_request__send_sqs_response__invalid()
        {
            // Arrange
            var request = new JukeboxSqsRequest {
                Key         = "123",
                MessageBody = "foo-bar",
                RequestType = "bat-baz"
            };
            var sendMessageRequest = new SendMessageRequest {
                QueueUrl               = "http://foo-bar",
                MessageGroupId         = "foooooo",
                MessageDeduplicationId = "foo-date",
                MessageBody            = JsonConvert.SerializeObject(request)
            };
            var provider = new Mock <ICommonDependencyProvider>(MockBehavior.Strict);

            provider.Setup(x => x.DateNow()).Returns("foo-date");
            var sqsClient = new Mock <IAmazonSQS>(MockBehavior.Strict);

            sqsClient.Setup(x => x.SendMessageAsync(sendMessageRequest, new CancellationToken()));
            var aIntentRequestFixture = new AIntentRequestFixture(provider.Object, sqsClient.Object);

            // Act
            await aIntentRequestFixture.SendSqsRequest(request, "bat-baz");

            // Assert
            provider.Verify(x => x.DateNow(), Times.Once);
            sqsClient.Verify(x => x.SendMessageAsync(
                                 It.Is <SendMessageRequest>(y =>
                                                            y.MessageBody == sendMessageRequest.MessageBody &&
                                                            y.MessageDeduplicationId == sendMessageRequest.MessageDeduplicationId &&
                                                            y.MessageGroupId == sendMessageRequest.MessageGroupId &&
                                                            y.QueueUrl == sendMessageRequest.QueueUrl
                                                            ),
                                 new CancellationToken()
                                 ), Times.Never);
        }
コード例 #3
0
        public virtual async Task <SendMessageResponse> SendSqsRequest(JukeboxSqsRequest request, string requestType)
        {
            try {
                if (request == null || _queueUrl.IsNullOrEmpty())
                {
                    return(null);
                }
                var sendMessageRequest = new SendMessageRequest {
                    QueueUrl               = _queueUrl,
                    MessageGroupId         = requestType,
                    MessageDeduplicationId = _provider.DateNow(),
                    MessageBody            = JsonConvert.SerializeObject(request)
                };
                LambdaLogger.Log($"Sending Sqs Message to Jukebox: {JsonConvert.SerializeObject(sendMessageRequest)}");
                var sendMessageResponse = await _sqsClient.SendMessageAsync(sendMessageRequest);

                return(sendMessageResponse);
            }
            catch (Exception e) {
                LambdaLogger.Log($"There was a problem sending message: {e}");
            }

            return(null);
        }