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