示例#1
0
        private async Task CreateReturnToCopy(DateTime?approvalDate = null)
        {
            organisation = Organisation.CreateSoleTrader("Test Organisation");
            var quarter = new Quarter(2019, QuarterType.Q1);

            @return = new Domain.AatfReturn.Return(organisation, quarter, database.Model.AspNetUsers.First().Id, FacilityType.Aatf)
            {
                ReturnStatus = ReturnStatus.Submitted
            };

            database.WeeeContext.Returns.Add(@return);

            await database.WeeeContext.SaveChangesAsync();

            await AddReturnReportsOn();

            await AddReturnScheme();

            await AddNonObligated();

            await AddWeeeReceived(approvalDate);

            await AddWeeSentOn(approvalDate);

            await AddWeeeReused(approvalDate);
        }
示例#2
0
        private async Task ActionAndAssertApprovalDate(Action <Guid> assertion, DateTime?approvalDate, DateTime windowStartDate)
        {
            using (database = new DatabaseWrapper())
            {
                var helper       = new ModelHelper(database.Model);
                var domainHelper = new DomainHelper(database.WeeeContext);
                var userContext  = A.Fake <IUserContext>();

                A.CallTo(() => userContext.UserId).Returns(Guid.Parse(database.Model.AspNetUsers.First().Id));
                A.CallTo(() => quarterWindowFactory.GetQuarterWindow(A <Quarter> ._))
                .Returns(new Domain.DataReturns.QuarterWindow(windowStartDate, windowStartDate.AddDays(1), QuarterType.Q1));

                await CreateReturnToCopy(approvalDate);

                var message = new CopyReturn(@return.Id);

                var authorization = new AuthorizationBuilder().AllowEverything().Build();

                handler = new CopyReturnHandler(authorization,
                                                database.WeeeContext,
                                                userContext,
                                                quarterWindowFactory);

                var result = await handler.HandleAsync(message);

                @return      = database.WeeeContext.Returns.AsNoTracking().First(r => r.Id == message.ReturnId);
                copiedReturn = database.WeeeContext.Returns.First(r => r.Id == result);

                assertion(result);
            }
        }
示例#3
0
        private async Task ArrangeActAndCallAssertions(Action <Guid> assertions)
        {
            using (database = new DatabaseWrapper())
            {
                // Arrange
                var helper       = new ModelHelper(database.Model);
                var domainHelper = new DomainHelper(database.WeeeContext);
                var userContext  = A.Fake <IUserContext>();

                A.CallTo(() => userContext.UserId).Returns(Guid.Parse(database.Model.AspNetUsers.First().Id));

                await CreateReturnToCopy(DateTime.Now);

                var message = new CopyReturn(@return.Id);

                var authorization = new AuthorizationBuilder().AllowEverything().Build();

                handler = new CopyReturnHandler(authorization,
                                                database.WeeeContext,
                                                userContext,
                                                quarterWindowFactory);

                // Act
                var result = await handler.HandleAsync(message);

                @return      = database.WeeeContext.Returns.AsNoTracking().First(r => r.Id == message.ReturnId);
                copiedReturn = database.WeeeContext.Returns.First(r => r.Id == result);

                // Assert
                assertions(result);
            }
        }
示例#4
0
        private static async Task CreateWeeeSentOnAmounts(
            ObligatedSentOnDataAccess dataAccess,
            Return @return,
            Aatf aatf,
            AatfAddress siteAddress,
            AatfAddress operatorAddress)
        {
            var weeeSentOn = new WeeeSentOn(operatorAddress, siteAddress, aatf, @return);

            var weeeSentOnAmount = new List <WeeeSentOnAmount>();

            foreach (var category in Enum.GetValues(typeof(WeeeCategory)).Cast <WeeeCategory>())
            {
                weeeSentOnAmount.Add(new WeeeSentOnAmount(weeeSentOn, (int)category, (decimal?)category, (decimal?)category + 1));
            }

            await dataAccess.Submit(weeeSentOnAmount);
        }
示例#5
0
        private static async Task CreateWeeeReusedAmounts(
            ObligatedReusedDataAccess obligatedReusedDataAccess,
            AatfSiteDataAccess aatfSiteDataAccess,
            Return @return,
            Aatf aatf,
            AatfAddress address)
        {
            var weeeReused = new WeeeReused(aatf.Id, @return.Id);

            var weeeReusedAmount = new List <WeeeReusedAmount>();

            foreach (var category in Enum.GetValues(typeof(WeeeCategory)).Cast <WeeeCategory>())
            {
                weeeReusedAmount.Add(new WeeeReusedAmount(weeeReused, (int)category, (int)category, (int)category + 1));
            }

            var weeeReusedSite = new WeeeReusedSite(weeeReused, address);

            await obligatedReusedDataAccess.Submit(weeeReusedAmount);

            await aatfSiteDataAccess.Submit(weeeReusedSite);
        }
示例#6
0
        private static async Task CreateWeeeReceivedAmounts(
            ObligatedReceivedDataAccess dataAccess,
            ReturnSchemeDataAccess returnSchemeDataAccess,
            Return @return,
            Aatf aatf,
            Scheme scheme)
        {
            var returnScheme = new ReturnScheme(scheme, @return);

            var weeeReceived = new WeeeReceived(scheme, aatf, @return);

            var weeeReceivedAmount = new List <WeeeReceivedAmount>();

            foreach (var category in Enum.GetValues(typeof(WeeeCategory)).Cast <WeeeCategory>())
            {
                weeeReceivedAmount.Add(new WeeeReceivedAmount(weeeReceived, (int)category, (int)category, (int)category + 1));
            }

            await returnSchemeDataAccess.Submit(new List <ReturnScheme> {
                returnScheme
            });

            await dataAccess.Submit(weeeReceivedAmount);
        }
示例#7
0
        private static async Task CreateNonObligatedWeee(NonObligatedDataAccess dataAccess, Return @return)
        {
            var nonObligatedWee = new List <NonObligatedWeee>();

            foreach (var category in Enum.GetValues(typeof(WeeeCategory)).Cast <WeeeCategory>())
            {
                nonObligatedWee.Add(new NonObligatedWeee(@return, (int)category, false, (decimal?)category));
            }

            foreach (var category in Enum.GetValues(typeof(WeeeCategory)).Cast <WeeeCategory>())
            {
                nonObligatedWee.Add(new NonObligatedWeee(@return, (int)category, true, (decimal?)category));
            }

            await dataAccess.Submit(nonObligatedWee);
        }
示例#8
0
        private static async Task <(List <WeeeReused> submittedWeeeReused, List <AatfAddress> submittedWeeeReusedAddresses, List <WeeeReusedAmount> submittedWeeeReusedAmounts, List <WeeeReusedSite> submittedWeeeReusedSites)> RetrieveSubmittedWeeeReusedData(WeeeContext context, Return @return, GenericDataAccess dataAccess)
        {
            var submittedWeeeReused          = context.WeeeReused.Where(w => w.ReturnId == @return.Id).ToList();
            var submittedWeeeReusedAddresses = new List <AatfAddress>();
            var submittedWeeeReusedAmounts   = new List <WeeeReusedAmount>();
            var submittedWeeeReusedSites     = new List <WeeeReusedSite>();

            foreach (var weeeReused in submittedWeeeReused)
            {
                submittedWeeeReusedAmounts.AddRange(
                    await dataAccess.GetManyByExpression(new WeeeReusedAmountByWeeeReusedIdSpecification(weeeReused.Id)));
                submittedWeeeReusedSites.AddRange(
                    await dataAccess.GetManyByExpression(new WeeeReusedSiteByWeeeReusedIdSpecification(weeeReused.Id)));
            }

            foreach (var site in submittedWeeeReusedSites)
            {
                submittedWeeeReusedAddresses.Add(site.Address);
            }

            return(submittedWeeeReused, submittedWeeeReusedAddresses, submittedWeeeReusedAmounts, submittedWeeeReusedSites);
        }
示例#9
0
        private static async Task <(List <WeeeReceived> submittedWeeeReceived, List <ReturnScheme> submittedWeeeReturnScheme, List <WeeeReceivedAmount> submittedWeeeReceivedAmounts)> RetrieveSubmittedWeeeReceivedData(WeeeContext context, Return @return,
                                                                                                                                                                                                                         GenericDataAccess dataAccess)
        {
            var submittedWeeeReceived        = context.WeeeReceived.Where(w => w.ReturnId == @return.Id).ToList();
            var submittedWeeeReturnScheme    = context.ReturnScheme.Where(w => w.Return.Id == @return.Id).ToList();
            var submittedWeeeReceivedAmounts = new List <WeeeReceivedAmount>();

            foreach (var weeeReceived in submittedWeeeReceived)
            {
                submittedWeeeReceivedAmounts.AddRange(
                    await dataAccess.GetManyByExpression(new WeeeReceivedAmountByWeeeReceivedIdSpecification(weeeReceived.Id)));
            }

            return(submittedWeeeReceived, submittedWeeeReturnScheme, submittedWeeeReceivedAmounts);
        }
示例#10
0
        private static async Task <(List <WeeeSentOn> submittedWeeeSentOn, List <AatfAddress> submittedWeeeSentOnAddresses, List <WeeeSentOnAmount> submittedWeeeSentOnAmounts)> RetrieveSubmittedWeeeSentOnData(WeeeContext context, Return @return,
                                                                                                                                                                                                                 GenericDataAccess dataAccess)
        {
            var submittedWeeeSentOn          = context.WeeeSentOn.Where(w => w.ReturnId == @return.Id).ToList();
            var submittedWeeeSentOnAddresses = new List <AatfAddress>();
            var submittedWeeeSentOnAmounts   = new List <WeeeSentOnAmount>();

            foreach (var weeeSentOn in submittedWeeeSentOn)
            {
                submittedWeeeSentOnAmounts.AddRange(
                    await dataAccess.GetManyByExpression(new WeeeSentOnAmountByWeeeSentOnIdSpecification(weeeSentOn.Id)));
                if (weeeSentOn.OperatorAddress != null)
                {
                    submittedWeeeSentOnAddresses.Add(weeeSentOn.OperatorAddress);
                }

                submittedWeeeSentOnAddresses.Add(weeeSentOn.SiteAddress);
            }

            return(submittedWeeeSentOn, submittedWeeeSentOnAddresses, submittedWeeeSentOnAmounts);
        }