public HandleShould()
            {
                receivedEvent = new ProvisionRequestedMessage
                {
                    Name          = "Neil Armstrong",
                    MobileId      = Guid.NewGuid(),
                    MobileOrderId = Guid.NewGuid()
                };

                existingSimCardOrder = new SimCardOrder
                {
                    Name          = "Alan Turing",
                    MobileId      = Guid.NewGuid(),
                    MobileOrderId = Guid.NewGuid()
                };

                transactionMock = new Mock <ITransaction>();
                dataStoreMock   = new Mock <ISimCardOrdersDataStore>();
                dataStoreMock.Setup(x => x.BeginTransaction()).Returns(transactionMock.Object);
                dataStoreMock.Setup(x => x.GetExisting(existingSimCardOrder.MobileId, existingSimCardOrder.MobileOrderId)).Returns(existingSimCardOrder);

                externalSimCardProviderServiceMock = new Mock <IExternalSimCardsProviderService>();
                var loggerMock           = new Mock <ILogger <ProvisionRequestedHandler> >();
                var messagePublisherMock = new Mock <IMessagePublisher>();
                var monitoringMock       = new Mock <IMonitoring>();

                sut = new ProvisionRequestedHandler(loggerMock.Object, dataStoreMock.Object, externalSimCardProviderServiceMock.Object, messagePublisherMock.Object, monitoringMock.Object);
            }
            public async void CallCompletedOrderCheker()
            {
                var config = new Config
                {
                    ExternalSimCardsProviderApiUrl = "http://api:5000"
                };
                var expectedOrder = new SimCardOrder()
                {
                    MobileOrderId = Guid.NewGuid(),
                    Name          = "Neil Armstrong",
                    Status        = "Sent"
                };
                var dataStoreMock = new Mock <ISimCardOrdersDataStore>();

                dataStoreMock.Setup(x => x.GetSent())
                .Returns(new[] { expectedOrder });
                var completedOrderChecker = new Mock <ICompletedOrderChecker>();

                var sut = new CompletedOrderPollingHostedService(Options.Create(config), Mock.Of <ILogger <CompletedOrderPollingHostedService> >(),
                                                                 dataStoreMock.Object,
                                                                 completedOrderChecker.Object);

                await sut.DoWork();

                completedOrderChecker.Verify(x => x.Check(expectedOrder));
            }
コード例 #3
0
        public async Task Check(SimCardOrder sentOrder)
        {
            var request = new HttpRequestMessage(HttpMethod.Get, $"{externalApiUrl}/api/orders/{sentOrder.MobileOrderId}");
            var client  = clientFactory.CreateClient();

            var response = await client.SendAsync(request);

            if (response.IsSuccessStatusCode)
            {
                using var responseStream = await response.Content.ReadAsStreamAsync();

                var simCardOrderFromExternalProvider = await JsonSerializer.DeserializeAsync <SimCardOrderFromExternalProvider>(responseStream, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });

                if (simCardOrderFromExternalProvider.Status.Trim() == "Completed")
                {
                    using var tx = simCardOrdersDataStore.BeginTransaction();
                    simCardOrdersDataStore.Complete(sentOrder.MobileOrderId);
                    PublishProvisioningOrderCompleted(sentOrder.MobileOrderId);
                    monitoring.SimCardOrderCompleted();
                    simCardOrdersDataStore.IncrementAttempts(sentOrder);
                }
                else
                {
                    using var tx = simCardOrdersDataStore.BeginTransaction();
                    simCardOrdersDataStore.IncrementAttempts(sentOrder);
                }
            }
            else
            {
                using var tx = simCardOrdersDataStore.BeginTransaction();
                simCardOrdersDataStore.IncrementAttempts(sentOrder);
            }
        }
コード例 #4
0
        public async void CallExternalService()
        {
            var config = new Config
            {
                ExternalSimCardsProviderApiUrl = "http://api:5000"
            };
            var expectedOrder = new SimCardOrder()
            {
                MobileOrderId = Guid.NewGuid()
            };
            var expectedUrl   = new Uri($"{config.ExternalSimCardsProviderApiUrl}/api/orders/{expectedOrder.MobileOrderId}");
            var externalOrder = new SimCardOrder
            {
                Name   = "Neil Armstrong",
                Status = "Completed"
            };
            var httpClientFactoryMock = new Mock <IHttpClientFactory>();
            var dataStoreMock         = new Mock <ISimCardOrdersDataStore>();
            var messagePublisherMock  = new Mock <IMessagePublisher>();
            var monitoringMock        = new Mock <IMonitoring>();
            var options     = Options.Create(config);
            var handlerMock = new Mock <DelegatingHandler>();

            handlerMock.Protected()
            .Setup <Task <HttpResponseMessage> >("SendAsync",
                                                 ItExpr.Is <HttpRequestMessage>(
                                                     x => x.RequestUri == expectedUrl),
                                                 ItExpr.IsAny <CancellationToken>())
            .Returns(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(JsonSerializer.Serialize(externalOrder))
            }
                                     ));
            var client = new HttpClient(handlerMock.Object);

            httpClientFactoryMock.Setup(x => x.CreateClient(It.IsAny <string>()))
            .Returns(client);

            var sut = new CompletedOrderChecker(Mock.Of <ILogger <CompletedOrderChecker> >(),
                                                httpClientFactoryMock.Object,
                                                dataStoreMock.Object,
                                                messagePublisherMock.Object,
                                                options,
                                                monitoringMock.Object);

            await sut.Check(expectedOrder);

            handlerMock.VerifyAll();
        }
        public void InsertSimCardOrder(SimCardOrder simCardOrder)
        {
            var options = Options.Create(new Config
            {
                ConnectionString = connectionString
            });

            sut = new SimCardOrdersDataStore(options);

            output.WriteLine($"Inserting SimCards.Order with MobileId={simCardOrder.MobileId}");

            using var tx = sut.BeginTransaction();
            sut.Add(simCardOrder);

            insertedSimCardOrders.Add(simCardOrder);
        }
            public void ReturnExistingSimCardOrder()
            {
                var expectedSimCardOrder = new SimCardOrder()
                {
                    MobileId      = Guid.NewGuid(),
                    MobileOrderId = Guid.NewGuid(),
                    Name          = "Neil Armstrong",
                    PhoneNumber   = "0123456789",
                    Status        = "New"
                };

                fixture.SimCardOrdersDataAccess.InsertSimCardOrder(expectedSimCardOrder);

                var actual = sut.GetExisting(expectedSimCardOrder.MobileId, expectedSimCardOrder.MobileOrderId);

                actual.Should().BeEquivalentTo(expectedSimCardOrder, o => o.Excluding(x => x.CreatedAt));
            }
            public void ReturnEmpty_WhenNoSentSimCardOrders()
            {
                var expectedSimCardOrder = new SimCardOrder()
                {
                    MobileId      = Guid.NewGuid(),
                    MobileOrderId = Guid.NewGuid(),
                    Name          = "Neil Armstrong",
                    PhoneNumber   = "0123456789",
                    Status        = "New"
                };

                fixture.SimCardOrdersDataAccess.InsertSimCardOrder(expectedSimCardOrder);

                var actual = sut.GetSent();

                actual.Should().BeEmpty();
            }
            public void AddSimCardOrder()
            {
                var sut = fixture.CreateSimCardOrdersDataStore();

                expectedSimCardOrder = new SimCardOrder()
                {
                    MobileId      = Guid.NewGuid(),
                    MobileOrderId = Guid.NewGuid(),
                    Name          = "Neil Armstrong",
                    PhoneNumber   = "0123456789",
                    Status        = "New"
                };

                using (sut.BeginTransaction())
                    sut.Add(expectedSimCardOrder);

                var actual = sut.GetExisting(expectedSimCardOrder.MobileId, expectedSimCardOrder.MobileOrderId);

                actual.Should().BeEquivalentTo(expectedSimCardOrder, o => o.Excluding(x => x.CreatedAt));
            }
            public void SetSimCardOrderToSent()
            {
                var sut = fixture.CreateSimCardOrdersDataStore();

                var expectedSimCardOrder = new SimCardOrder()
                {
                    MobileId      = Guid.NewGuid(),
                    MobileOrderId = Guid.NewGuid(),
                    Name          = "Neil Armstrong",
                    PhoneNumber   = "0123456789",
                    Status        = "Sent"
                };

                fixture.SimCardOrdersDataAccess.InsertSimCardOrder(expectedSimCardOrder);

                using (var tx = sut.BeginTransaction())
                    sut.Complete(expectedSimCardOrder.MobileOrderId);

                var actual = sut.GetExisting(expectedSimCardOrder.MobileId, expectedSimCardOrder.MobileOrderId);

                actual.Status.Should().Be("Completed");
            }
            public void ReturnSentSimCardOrders()
            {
                var expectedSimCardOrder = new SimCardOrder()
                {
                    MobileId      = Guid.NewGuid(),
                    MobileOrderId = Guid.NewGuid(),
                    Name          = "Neil Armstrong",
                    PhoneNumber   = "0700100001",
                    Status        = "Sent"
                };
                var expectedSimCardOrder2 = new SimCardOrder()
                {
                    MobileId      = Guid.NewGuid(),
                    MobileOrderId = Guid.NewGuid(),
                    Name          = "Buzz Aldrin",
                    PhoneNumber   = "0700100002",
                    Status        = "Sent"
                };
                var expectedSimCardOrder3 = new SimCardOrder()
                {
                    MobileId      = Guid.NewGuid(),
                    MobileOrderId = Guid.NewGuid(),
                    Name          = "Michael Collins",
                    PhoneNumber   = "0700100003",
                    Status        = "Sent"
                };

                fixture.SimCardOrdersDataAccess.InsertSimCardOrder(expectedSimCardOrder);
                fixture.SimCardOrdersDataAccess.InsertSimCardOrder(expectedSimCardOrder2);
                fixture.SimCardOrdersDataAccess.InsertSimCardOrder(expectedSimCardOrder3);

                var actual = sut.GetSent().ToList();

                actual.First().Should().BeEquivalentTo(expectedSimCardOrder, o => o.Excluding(x => x.CreatedAt));
                actual.ElementAt(1).Should().BeEquivalentTo(expectedSimCardOrder2, o => o.Excluding(x => x.CreatedAt));
                actual.ElementAt(2).Should().BeEquivalentTo(expectedSimCardOrder3, o => o.Excluding(x => x.CreatedAt));
            }