예제 #1
0
        private async Task ValidateReturnMessage(AddReturn message)
        {
            var existingReturn =
                await returnFactoryDataAccess.HasReturnQuarter(message.OrganisationId, message.Year, (QuarterType)message.Quarter, message.FacilityType);

            var returnWindow = await returnFactory.GetReturnQuarter(message.OrganisationId, message.FacilityType);

            if (existingReturn || returnWindow.Q != message.Quarter || returnWindow.Year != message.Year)
            {
                throw new InvalidOperationException("Return already exists");
            }
        }
예제 #2
0
        public async Task HandleAsync_GivenAddReturnRequestAndReturnAlreadyExists_InvalidOperationExceptionExpected()
        {
            var request = new AddReturn {
                OrganisationId = Guid.NewGuid(), Year = year, Quarter = quarter, FacilityType = FacilityType.Aatf
            };

            A.CallTo(() => returnFactoryDataAccess.HasReturnQuarter(request.OrganisationId, request.Year, (Domain.DataReturns.QuarterType)request.Quarter, request.FacilityType))
            .Returns(true);

            var result = await Record.ExceptionAsync(() => handler.HandleAsync(request));

            result.Should().BeOfType <InvalidOperationException>();
            A.CallTo(() => returnDataAccess.Submit(A <Return> ._)).MustNotHaveHappened();
        }
예제 #3
0
        public AddReturnUploadHandlerTests()
        {
            var weeeAuthorization = A.Fake <IWeeeAuthorization>();

            returnDataAccess        = A.Fake <IReturnDataAccess>();
            genericDataAccess       = A.Fake <IGenericDataAccess>();
            userContext             = A.Fake <IUserContext>();
            returnFactoryDataAccess = A.Fake <IReturnFactoryDataAccess>();
            returnFactory           = A.Fake <IReturnFactory>();

            A.CallTo(() => returnFactoryDataAccess.HasReturnQuarter(A <Guid> ._, A <int> ._, A <EA.Weee.Domain.DataReturns.QuarterType> ._, A <FacilityType> ._)).Returns(false);
            A.CallTo(() => returnFactory.GetReturnQuarter(A <Guid> ._, A <FacilityType> ._)).Returns(new Quarter(year, quarter));

            handler = new AddReturnHandler(weeeAuthorization, returnDataAccess, genericDataAccess, userContext, returnFactoryDataAccess, returnFactory);
        }
예제 #4
0
        public async Task <Quarter> GetReturnQuarter(Guid organisationId, FacilityType facilityType)
        {
            var currentDate    = SystemTime.Now;
            var systemSettings = await systemDataDataAccess.Get();

            if (systemSettings.UseFixedCurrentDate)
            {
                currentDate = systemSettings.FixedCurrentDate;
            }

            var availableQuarterWindows = await quarterWindowFactory.GetQuarterWindowsForDate(currentDate);

            if (!availableQuarterWindows.Any())
            {
                return(null);
            }

            var windowDates = availableQuarterWindows.OrderBy(a => a.StartDate);

            foreach (var quarterWindow in windowDates)
            {
                var year = quarterWindow.QuarterType == Domain.DataReturns.QuarterType.Q4
                    ? quarterWindow.StartDate.Year - 1
                    : quarterWindow.StartDate.Year;

                var hasAatfWithApprovalDate = await returnFactoryDataAccess.ValidateAatfApprovalDate(organisationId, quarterWindow.StartDate, year, facilityType);

                var hasReturnExists = await returnFactoryDataAccess.HasReturnQuarter(organisationId, year, quarterWindow.QuarterType, facilityType);

                if (hasAatfWithApprovalDate && !hasReturnExists)
                {
                    return(new Quarter(year, (QuarterType)quarterWindow.QuarterType));
                }
            }

            return(null);
        }