public async Task PublishRequest_Should_Have_Extra_Attributes()
        {
            var message = new TestMessage {
                Body = "body"
            };
            var assemblyQualifiedName = typeof(TestMessage).AssemblyQualifiedName;

            await smsMessagePublisher.PublishAsync("test_topic", message, new Dictionary <string, string> {
                { "A", "B" }
            });

            amazonSimpleNotificationServiceMock.Verify(
                p => p.PublishAsync(It.Is <PublishRequest>(
                                        q => q.Message == JsonConvert.SerializeObject(message) &&
                                        q.MessageAttributes.Any(r =>
                                                                r.Key == MessageAttributes.AssemblyQualifiedName && r.Value.StringValue == assemblyQualifiedName) &&
                                        q.MessageAttributes.Any(r =>
                                                                r.Key == MessageAttributes.Type && r.Value.StringValue == typeof(TestMessage).Name) &&
                                        q.MessageAttributes.Any(r =>
                                                                r.Key == "A" && r.Value.StringValue == "B") &&
                                        q.TopicArn == "test_topic"),
                                    CancellationToken.None),
                Times.Once);
        }
        public async Task SendRequest_Should_Have_Extra_Attributes()
        {
            var command = new TestMessage {
                Body = "body"
            };
            var assemblyQualifiedName = typeof(TestMessage).AssemblyQualifiedName;

            await sqsMessageSender.SendAsync("test_queue", command, new Dictionary <string, string> {
                { "A", "B" }
            });

            amazonSqsMock.Verify(
                p => p.SendMessageAsync(It.Is <SendMessageRequest>(
                                            q => q.MessageBody == JsonConvert.SerializeObject(command) &&
                                            q.MessageAttributes.Any(r =>
                                                                    r.Key == MessageAttributes.AssemblyQualifiedName && r.Value.StringValue == assemblyQualifiedName) &&
                                            q.MessageAttributes.Any(r =>
                                                                    r.Key == MessageAttributes.Type && r.Value.StringValue == typeof(TestMessage).Name) &&
                                            q.MessageAttributes.Any(r =>
                                                                    r.Key == "A" && r.Value.StringValue == "B") &&
                                            q.QueueUrl == "test_queue"),
                                        CancellationToken.None),
                Times.Once);
        }