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)); }
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); } }
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)); }