public async Task TestStoreEmployerProviderPriority()
        {
            // arrange
            var employerChangedProviderPriority = new EmployerChangedProviderPriority
            {
                EmployerAccountId = 1,
                OrderedProviders  = new List <long> {
                    1, 2, 3
                }
            };

            levyAccountRepositoryMock
            .Setup(x => x.ReplaceEmployerProviderPriorities(
                       employerChangedProviderPriority.EmployerAccountId,
                       It.Is <List <EmployerProviderPriorityModel> >(o => o.Count == 3 && o[0].EmployerAccountId == 1 && o[0].Order == 1 && o[0].Ukprn == 1),
                       CancellationToken.None))
            .Returns(Task.CompletedTask).Verifiable();

            employerProviderPrioritiesMock
            .Setup(x => x.AddOrReplace(CacheKeys.EmployerPaymentPriorities,
                                       It.Is <List <EmployerProviderPriorityModel> >(o => o.Count == 3 && o[0].EmployerAccountId == 1 && o[0].Order == 1 && o[0].Ukprn == 1),
                                       CancellationToken.None))
            .Returns(Task.CompletedTask).Verifiable();

            // act
            await service.StoreEmployerProviderPriority(employerChangedProviderPriority);

            // assert in tear down
        }
        public async Task HandleEmployerProviderPriorityChange(EmployerChangedProviderPriority message)
        {
            try
            {
                using (var operation =
                           telemetry.StartOperation("LevyFundedService.HandleEmployerProviderPriorityChange",
                                                    message.EventId.ToString()))
                {
                    var stopwatch = Stopwatch.StartNew();
                    paymentLogger.LogDebug(
                        $"Storing EmployerChangedProviderPriority event for {Id},  Account Id: {message.EmployerAccountId}");
                    await employerProviderPriorityStorageService.StoreEmployerProviderPriority(message)
                    .ConfigureAwait(false);

                    paymentLogger.LogInfo(
                        $"Finished Storing EmployerChangedProviderPriority event for {Id},  Account Id: {message.EmployerAccountId}");
                    TrackInfrastructureEvent("LevyFundedService.HandleEmployerProviderPriorityChange", stopwatch);
                    telemetry.StopOperation(operation);
                }
            }
            catch (Exception ex)
            {
                paymentLogger.LogError(
                    $"Error while handling EmployerChangedProviderPriority event for {Id},  Account Id: {message.EmployerAccountId} Error:{ex.Message}",
                    ex);
                throw;
            }
        }
Beispiel #3
0
        public void SetUp()
        {
            dataContext = new Mock <IFundingSourceDataContext>();

            providerPriorityEvent = new EmployerChangedProviderPriority
            {
                EmployerAccountId = 112,
                EventId           = Guid.NewGuid(),
                EventTime         = DateTimeOffset.UtcNow,
                OrderedProviders  = new List <long>
                {
                    113849,
                    384950,
                    299837
                }
            };

            service = new EmployerProviderPriorityStorageService(dataContext.Object);
        }
        public async Task StoreEmployerProviderPriority(EmployerChangedProviderPriority providerPriorityEvent)
        {
            var order             = 1;
            var paymentPriorities = new List <EmployerProviderPriorityModel>();

            foreach (var providerUkprn in providerPriorityEvent.OrderedProviders)
            {
                paymentPriorities.Add(new EmployerProviderPriorityModel
                {
                    Ukprn             = providerUkprn,
                    EmployerAccountId = providerPriorityEvent.EmployerAccountId,
                    Order             = order
                });

                order++;
            }

            await dataContext.ReplaceEmployerProviderPriorities(providerPriorityEvent.EmployerAccountId, paymentPriorities,
                                                                CancellationToken.None);

            await dataContext.SaveChanges(CancellationToken.None);
        }
        public async Task StoreEmployerProviderPriority(EmployerChangedProviderPriority providerPriorityEvent)
        {
            try
            {
                int order             = 1;
                var paymentPriorities = new List <EmployerProviderPriorityModel>();
                foreach (var providerUkprn in providerPriorityEvent.OrderedProviders)
                {
                    paymentPriorities.Add(new EmployerProviderPriorityModel
                    {
                        Ukprn             = providerUkprn,
                        EmployerAccountId = providerPriorityEvent.EmployerAccountId,
                        Order             = order
                    });

                    order++;
                }

                using (var scope = new TransactionScope(TransactionScopeOption.Required, TransactionScopeAsyncFlowOption.Enabled))
                {
                    paymentLogger.LogDebug($"Replacing Previous EmployerProviderPriority for Account Id {providerPriorityEvent.EmployerAccountId}");
                    await levyFundingSourceRepository.ReplaceEmployerProviderPriorities(providerPriorityEvent.EmployerAccountId, paymentPriorities).ConfigureAwait(false);

                    paymentLogger.LogDebug($"Successfully Replaced Previous EmployerProviderPriority for Account Id {providerPriorityEvent.EmployerAccountId}");

                    paymentLogger.LogDebug($"Adding EmployerProviderPriority to Cache for Account Id {providerPriorityEvent.EmployerAccountId}");
                    await employerProviderPriorities.AddOrReplace(CacheKeys.EmployerPaymentPriorities, paymentPriorities).ConfigureAwait(false);

                    paymentLogger.LogInfo($"Successfully Add EmployerProviderPriority to Cache for Account Id {providerPriorityEvent.EmployerAccountId}");

                    scope.Complete();
                }
            }
            catch (Exception e)
            {
                paymentLogger.LogError($"Error while updating  EmployerProviderPriority for Account Id {providerPriorityEvent.EmployerAccountId}", e);
                throw;
            }
        }
Beispiel #6
0
        public async Task ProcessPaymentOrderChange(PaymentOrderChangedEvent paymentOrderChangedEvent)
        {
            try
            {
                logger.LogDebug($"Now processing Payment Order Changed Event for Account id: {paymentOrderChangedEvent.AccountId}");

                var priorityEvent = new EmployerChangedProviderPriority
                {
                    EmployerAccountId = paymentOrderChangedEvent.AccountId,
                    OrderedProviders  = paymentOrderChangedEvent.PaymentOrder.Select(x => (long)x).ToList()
                };

                var endpointInstance = await endpointInstanceFactory.GetEndpointInstance().ConfigureAwait(false);

                await endpointInstance.Publish(priorityEvent).ConfigureAwait(false);

                logger.LogDebug($"Finished processing Payment Order Changed Event for Account id: {paymentOrderChangedEvent.AccountId}");
            }
            catch (Exception ex)
            {
                logger.LogError($"Error processing Payment Order Changed Event. Error: {ex.Message}", ex);
                throw;
            }
        }