コード例 #1
0
            public void Should_Return_Not_Found_When_Not_Found()
            {
                progDatastoreActor.SetResponseForRequest <RelationalDataStoreActor.ExecuteScalar>(request =>
                                                                                                  new RelationalDataStoreActor.ScalarResult(null));

                Subject.Tell(input);

                Kit.ExpectMsg <ProductActor.ProductNotFound>();
            }
コード例 #2
0
            public void Should_Return_Failure_When_Could_Not_Retrieve_Data()
            {
                progDatastoreActor.SetResponseForRequest <RelationalDataStoreActor.ExecuteScalar>(request =>
                                                                                                  new RelationalDataStoreActor.ExecuteFailed());

                Subject.Tell(input);

                Kit.ExpectMsg <ProductActor.ProductRetrievalFailed>();
            }
コード例 #3
0
            public void Should_Return_Order_Processed_When_Processing_Successful()
            {
                // Act
                Subject.Tell(message);

                // Assert
                Kit.ExpectMsg <ProcessingCoordinatorActor.OrderIsProcessed>();

                progHttpRequestActor.GetRequest <HttpRequestActor.Get>().Should().BeEquivalentTo(
                    new HttpRequestActor.Get
                {
                    ServiceUrl = "http://order-service:5000",
                    Path       = "/private/order/5"
                });

                progHttpRequestActor.GetRequest <HttpRequestActor.Post>().Should().BeEquivalentTo(
                    new HttpRequestActor.Post
                {
                    ServiceUrl = "http://product-service:5000",
                    Path       = $"/private/product/list",
                    Data       = new
                    {
                        ProductIds = new[] { 5, 10 }
                    }
                });

                progWarehouseSendActor.GetRequests <Models.WarehouseOrderModel>().Should().BeEquivalentTo(
                    new[]
                {
                    new Models.WarehouseOrderModel
                    {
                        Id          = "5-1",
                        OrderId     = 5,
                        WarehouseId = 1,
                        OrderDate   = DateTimeOffset.Parse("2020-07-01T19:00:00Z", CultureInfo.InvariantCulture),
                        Lines       = new[]
                        {
                            new Models.WarehouseOrderModel.OrderLine {
                                Line = 1, ProductId = 5, Description = "product 1", Amount = 5
                            }
                        }
                    },
                    new Models.WarehouseOrderModel
                    {
                        Id          = "5-2",
                        OrderId     = 5,
                        WarehouseId = 2,
                        OrderDate   = DateTimeOffset.Parse("2020-07-01T19:00:00Z", CultureInfo.InvariantCulture),
                        Lines       = new[]
                        {
                            new Models.WarehouseOrderModel.OrderLine {
                                Line = 2, ProductId = 10, Description = "product 2", Amount = 2
                            }
                        }
                    }
                });
            }
コード例 #4
0
            public void Should_Return_Order_Processing_Failed_When_Product_Service_Communication_Failure()
            {
                // Arrange
                progHttpRequestActor.SetResponseForRequest <HttpRequestActor.Post>(_ =>
                                                                                   new HttpRequestActor.ServiceRequestFailed(HttpRequestActor.ServiceRequestFailed.FailureReason.ServiceRequestTimeout));

                // Act
                Subject.Tell(message);

                // Assert
                Kit.ExpectMsg <ProcessingCoordinatorActor.OrderFailedToProcess>();
            }
コード例 #5
0
            public void Should_Return_Order_Processing_Failed_When_Product_Service_Returns_Non_OK()
            {
                // Arrange
                progHttpRequestActor.SetResponseForRequest <HttpRequestActor.Post>(_ =>
                                                                                   new HttpRequestActor.ReceivedNonSuccessServiceResponse(HttpStatusCode.BadGateway, Array.Empty <byte>()));

                // Act
                Subject.Tell(message);

                // Assert
                Kit.ExpectMsg <ProcessingCoordinatorActor.OrderFailedToProcess>();
            }
コード例 #6
0
            public void Should_Return_Order_Duplicate_When_Has_Existing_Order()
            {
                Subject.As <TestActorRef <ActorUnderTest> >().UnderlyingActor.HasExistingOrder = true;

                Subject.Tell(
                    new ProcessingCoordinatorActor.ProcessOrder
                {
                    OrderId   = 5,
                    OrderDate = DateTimeOffset.Parse("2020-07-01T19:00:00Z", CultureInfo.InvariantCulture)
                });

                Kit.ExpectMsg <ProcessingCoordinatorActor.OrderIsDuplicate>();
            }
コード例 #7
0
            public void Should_Return_Order_Partially_Processed_When_Processing_Unit_Actor_Returns_Partially_Processed()
            {
                progProcessingUnitActor.SetResponseForRequest <ProcessingUnitActor.StartProcessing>(
                    r => new ProcessingCoordinatorActor.OrderIsPartiallyProcessed());

                Subject.Tell(
                    new ProcessingCoordinatorActor.ProcessOrder
                {
                    OrderId   = 5,
                    OrderDate = DateTimeOffset.Parse("2020-07-01T19:00:00Z", CultureInfo.InvariantCulture)
                });

                Kit.ExpectMsg <ProcessingCoordinatorActor.OrderIsPartiallyProcessed>();
            }
コード例 #8
0
            public void Should_Return_Order_Processing_Failed_When_All_Warehouse_Orders_Are_Not_Sent()
            {
                // Arrange
                progWarehouseSendActor.SetResponseForRequest <Models.WarehouseOrderModel>(m =>
                                                                                          new WarehouseSendActor.OrderIsNotSent {
                    WarehouseId = m.WarehouseId
                });

                // Act
                Subject.Tell(message);

                // Assert
                Kit.ExpectMsg <ProcessingCoordinatorActor.OrderFailedToProcess>();
            }
コード例 #9
0
            public void Should_Return_Order_Processing_Failed_When_One_Warehouse_Order_Is_Not_Sent()
            {
                // Arrange
                progWarehouseSendActor.SetResponseForRequest <Models.WarehouseOrderModel>(m =>
                                                                                          m.WarehouseId == 1 ?
                                                                                          new WarehouseSendActor.OrderIsSent {
                    WarehouseId = m.WarehouseId
                } :
                                                                                          new WarehouseSendActor.OrderIsNotSent {
                    WarehouseId = m.WarehouseId
                });

                // Act
                Subject.Tell(message);

                // Assert
                Kit.ExpectMsg <ProcessingCoordinatorActor.OrderIsPartiallyProcessed>();
            }
コード例 #10
0
            public void Should_Return_Product_When_Found()
            {
                var document = new ProductDocument
                {
                    Description = "shirt",
                    Price       = 13000,
                    WarehouseId = 2,
                    Properties  =
                        new[]
                    {
                        new ProductDocument.Property {
                            Name = "color", Value = "blue"
                        },
                        new ProductDocument.Property {
                            Name = "size", Value = "M"
                        }
                    }
                };

                progDatastoreActor.SetResponseForRequest <RelationalDataStoreActor.ExecuteScalar>(request =>
                                                                                                  new RelationalDataStoreActor.ScalarResult(JsonSerializer.Serialize(document)));

                Subject.Tell(input);

                Kit.ExpectMsg <ProductActor.ProductFound>().Should().BeEquivalentTo(
                    new ProductActor.ProductFound
                {
                    Id       = 12,
                    Document = document
                });

                progDatastoreActor.GetRequest <RelationalDataStoreActor.ExecuteScalar>()
                .Should().BeEquivalentTo(new RelationalDataStoreActor.ExecuteScalar(
                                             DataStoreStatements.GetProductById,
                                             new
                {
                    Id = 12
                }));
            }
コード例 #11
0
            public void Should_Return_Order_When_Found()
            {
                var document = new OrderDocument
                {
                    OrderDate = DateTimeOffset.Parse("2020-07-01T19:00:00Z", CultureInfo.InvariantCulture),
                    Lines     = new[]
                    {
                        new OrderDocument.OrderLine {
                            ProductId = 5, Amount = 1
                        },
                        new OrderDocument.OrderLine {
                            ProductId = 7, Amount = 5
                        }
                    }
                };

                progDatastoreActor.SetResponseForRequest <RelationalDataStoreActor.ExecuteScalar>(request =>
                                                                                                  new RelationalDataStoreActor.ScalarResult(JsonSerializer.Serialize(document)));

                Subject.Tell(input);

                Kit.ExpectMsg <OrderActor.OrderFound>().Should().BeEquivalentTo(
                    new OrderActor.OrderFound
                {
                    Id       = 501,
                    Document = document
                });

                progDatastoreActor.GetRequest <RelationalDataStoreActor.ExecuteScalar>()
                .Should().BeEquivalentTo(new RelationalDataStoreActor.ExecuteScalar(
                                             DataStoreStatements.GetOrderById,
                                             new
                {
                    Id = 501
                }));
            }