Beispiel #1
0
        public async Task TryRetrievePendingOrderAsyncReturnsBlobContentWhenFound()
        {
            var config = new OrderSubmissionBlobStorageConfiguration
            {
                StorageConnectionString = "hey, connect to storage!",
                PendingContainer        = "the place where stuff lives"
            };

            var mockStorage = new Mock <OrderSubmissionBlobStorage>(config, null)
            {
                CallBase = true
            };
            var partner = "Henry";
            var orderId = "ABD123";
            var content = new CreateOrderMessage();

            mockStorage
            .Protected()
            .Setup <Task <(bool, string)> >("RetrieveBlobAsTextAsync", ItExpr.Is <string>(connection => connection == config.StorageConnectionString),
                                            ItExpr.Is <string>(container => container == config.PendingContainer),
                                            ItExpr.Is <string>(blob => ((blob.Contains(partner)) && (blob.Contains(orderId)))))
            .Returns(Task.FromResult((true, JsonConvert.SerializeObject(content))))
            .Verifiable("The blob text should have been requested");

            var result = await mockStorage.Object.TryRetrievePendingOrderAsync(partner, orderId);

            result.Found.Should().BeTrue("because the content was returned");
            result.Order.ShouldBeEquivalentTo(content, "because the content should have been retrieved");

            mockStorage.VerifyAll();
        }
Beispiel #2
0
        public async Task DeletePendingOrderAsyncAttemptsToDeleteTheBlob()
        {
            var config = new OrderSubmissionBlobStorageConfiguration
            {
                StorageConnectionString = "hey, connect to storage!",
                PendingContainer        = "the place where stuff lives"
            };

            var mockStorage = new Mock <OrderSubmissionBlobStorage>(config, null)
            {
                CallBase = true
            };
            var partner = "Henry";
            var orderId = "ABD123";

            mockStorage
            .Protected()
            .Setup <Task>("DeleteBlobAsync", ItExpr.Is <string>(connection => connection == config.StorageConnectionString),
                          ItExpr.Is <string>(container => container == config.PendingContainer),
                          ItExpr.Is <string>(blob => ((blob.Contains(partner)) && (blob.Contains(orderId)))))
            .Returns(Task.CompletedTask)
            .Verifiable("The blob deletion should have been requested");

            await mockStorage.Object.DeletePendingOrderAsync(partner, orderId);

            mockStorage.VerifyAll();
        }
Beispiel #3
0
        public async Task SaveCompletedOrderAsyncAttemptsToUploadTheBlob()
        {
            var config = new OrderSubmissionBlobStorageConfiguration
            {
                StorageConnectionString = "hey, connect to storage!",
                CompletedContainer      = "the place where stuff lives"
            };

            var mockStorage = new Mock <OrderSubmissionBlobStorage>(config, null)
            {
                CallBase = true
            };
            var partner = "Henry";
            var orderId = "ABD123";
            var order   = new CreateOrderMessage {
                Identity = new OrderIdentity {
                    PartnerCode = partner, PartnerOrderId = orderId
                }
            };
            var serialized = JsonConvert.SerializeObject(order);

            mockStorage
            .Protected()
            .Setup <Task>("UploadTextAsBlobAsync", ItExpr.Is <string>(connection => connection == config.StorageConnectionString),
                          ItExpr.Is <string>(container => container == config.CompletedContainer),
                          ItExpr.Is <string>(blob => ((blob.Contains(partner)) && (blob.Contains(orderId)))),
                          ItExpr.Is <string>(content => content == serialized))
            .Returns(Task.CompletedTask)
            .Verifiable("The blob upload should have been requested");

            await mockStorage.Object.SaveCompletedOrderAsync(order);

            mockStorage.VerifyAll();
        }
Beispiel #4
0
        public async Task SaveCompletedOrderAsyncReturnsARepresentativeBlobPath()
        {
            var config = new OrderSubmissionBlobStorageConfiguration
            {
                StorageConnectionString = "hey, connect to storage!",
                CompletedContainer      = "the place where stuff lives"
            };

            var mockStorage = new Mock <OrderSubmissionBlobStorage>(config, null)
            {
                CallBase = true
            };
            var partner = "Henry";
            var orderId = "ABD123";
            var order   = new CreateOrderMessage {
                Identity = new OrderIdentity {
                    PartnerCode = partner, PartnerOrderId = orderId
                }
            };
            var serialized = JsonConvert.SerializeObject(order);

            mockStorage
            .Protected()
            .Setup <Task>("UploadTextAsBlobAsync", ItExpr.Is <string>(connection => connection == config.StorageConnectionString),
                          ItExpr.Is <string>(container => container == config.CompletedContainer),
                          ItExpr.Is <string>(blob => ((blob.Contains(partner)) && (blob.Contains(orderId)))),
                          ItExpr.Is <string>(content => content == serialized))
            .Returns(Task.CompletedTask);

            var result = await mockStorage.Object.SaveCompletedOrderAsync(order);

            result.Should().Contain(partner, "because the partner should be part of the blob key");
            result.Should().Contain(orderId, "because the order id should be part of the blob key");
        }
Beispiel #5
0
        public void SaveCompletedOrderAsyncVerifiesTheOrderIsPresent()
        {
            var config = new OrderSubmissionBlobStorageConfiguration
            {
                StorageConnectionString = "hey, connect to storage!",
                CompletedContainer      = "the place where stuff lives"
            };

            var storage = new OrderSubmissionBlobStorage(config, null);

            Action actionUnderTest = () => storage.SaveCompletedOrderAsync(null).GetAwaiter().GetResult();

            actionUnderTest.ShouldThrow <ArgumentNullException>("because the order is required");
        }
Beispiel #6
0
        public void SaveCompletedOrderAsyncFailsWhenTheOrderIdentityIsNull()
        {
            var config = new OrderSubmissionBlobStorageConfiguration
            {
                StorageConnectionString = "hey, connect to storage!",
                CompletedContainer      = "the place where stuff lives"
            };

            var order   = new CreateOrderMessage();
            var storage = new OrderSubmissionBlobStorage(config, null);

            Action actionUnderTest = () => storage.SaveCompletedOrderAsync(order).GetAwaiter().GetResult();

            actionUnderTest.ShouldThrow <ArgumentException>("because the order is required");
        }
Beispiel #7
0
        public void SavePendingOrderAsyncValidatesTheOrderId()
        {
            var config = new OrderSubmissionBlobStorageConfiguration
            {
                StorageConnectionString = "hey, connect to storage!",
                PendingContainer        = "the place where stuff lives"
            };

            var partner = "ABC123";
            var orderId = (string)null;
            var order   = new CreateOrderMessage();
            var storage = new OrderSubmissionBlobStorage(config, null);

            Action actionUnderTest = () => storage.SavePendingOrderAsync(partner, orderId, order).GetAwaiter().GetResult();

            actionUnderTest.ShouldThrow <ArgumentException>("because the order id is required").And.ParamName.Should().Be(nameof(orderId));
        }
Beispiel #8
0
        public void SaveCompletedOrderAsyncValidatesThePartnerCode()
        {
            var config = new OrderSubmissionBlobStorageConfiguration
            {
                StorageConnectionString = "hey, connect to storage!",
                CompletedContainer      = "the place where stuff lives"
            };

            var order = new CreateOrderMessage {
                Identity = new OrderIdentity {
                    PartnerOrderId = "ABC123"
                }
            };
            var storage = new OrderSubmissionBlobStorage(config, null);

            Action actionUnderTest = () => storage.SaveCompletedOrderAsync(order).GetAwaiter().GetResult();

            actionUnderTest.ShouldThrow <ArgumentException>("because the partner is required").And.ParamName.Should().Be(nameof(order.Identity.PartnerCode));
        }
 /// <summary>
 ///   Initializes a new instance of the <see cref="OrderSubmissionBlobStorage"/> class.
 /// </summary>
 ///
 /// <param name="configuration">The configuration to use for storage operations.</param>
 /// <param name="serializerSettings">The settings to use for JSON serialization.</param>
 ///
 public OrderSubmissionBlobStorage(OrderSubmissionBlobStorageConfiguration configuration,
                                   JsonSerializerSettings serializerSettings)
 {
     this.configuration      = configuration ?? throw new ArgumentNullException(nameof(configuration));
     this.serializerSettings = serializerSettings;
 }