private void SetAatfDeleteFlags(DeleteAnAatf message)
        {
            var canAatfBeDeletedFlags = new CanAatfBeDeletedFlags();

            canAatfBeDeletedFlags |= CanAatfBeDeletedFlags.CanDelete;

            A.CallTo(() => getAatfDeletionStatus.Validate(message.AatfId)).Returns(canAatfBeDeletedFlags);
        }
Example #2
0
        public async Task <CanAatfBeDeletedFlags> Validate(Guid aatfId)
        {
            var result = new CanAatfBeDeletedFlags();

            var aatf = await aatfDataAccess.GetDetails(aatfId);

            var isLatest = await aatfDataAccess.IsLatestAatf(aatf.Id, aatf.AatfId);

            if (!isLatest)
            {
                result |= CanAatfBeDeletedFlags.IsNotLatest;
                return(result);
            }

            var hasData = await aatfDataAccess.HasAatfData(aatfId);

            if (hasData)
            {
                result |= CanAatfBeDeletedFlags.HasData;
                return(result);
            }

            var organisationDeletionStatus = await getOrganisationDeletionStatus.Validate(aatf.Organisation.Id, aatf.ComplianceYear, aatf.FacilityType);

            if (organisationDeletionStatus.HasFlag(CanOrganisationBeDeletedFlags.HasReturns) &&
                await aatfDataAccess.HasAatfOrganisationOtherAeOrAatf(aatf))
            {
                result |= CanAatfBeDeletedFlags.CanDelete;
            }
            else if (!organisationDeletionStatus.HasFlag(CanOrganisationBeDeletedFlags.HasReturns) &&
                     await aatfDataAccess.HasAatfOrganisationOtherAeOrAatf(aatf))
            {
                result |= CanAatfBeDeletedFlags.CanDelete;
            }
            else if (!organisationDeletionStatus.HasFlag(CanOrganisationBeDeletedFlags.HasReturns) &&
                     !await aatfDataAccess.HasAatfOrganisationOtherAeOrAatf(aatf))
            {
                result |= CanAatfBeDeletedFlags.CanDelete;

                if (!organisationDeletionStatus.HasFlag(CanOrganisationBeDeletedFlags.HasScheme) && !organisationDeletionStatus.HasFlag(CanOrganisationBeDeletedFlags.HasMultipleOfFacility) &&
                    (aatf.FacilityType == FacilityType.Aatf && !organisationDeletionStatus.HasFlag(CanOrganisationBeDeletedFlags.HasAe) ||
                     (aatf.FacilityType == FacilityType.Ae && !organisationDeletionStatus.HasFlag(CanOrganisationBeDeletedFlags.HasAatf))))
                {
                    result |= CanAatfBeDeletedFlags.CanDeleteOrganisation;
                }
            }

            return(result);
        }
        public async Task HandleAsync_GivenAatfCannotBeDeleted_InvalidOperationExceptionExpectedAndAatfShouldNotBeDeleted()
        {
            using (var databaseWrapper = new DatabaseWrapper())
            {
                var message      = fixture.Create <DeleteAnAatf>();
                var organisation = EA.Weee.Domain.Organisation.Organisation.CreatePartnership("trading");
                var aatf         = ObligatedWeeeIntegrationCommon.CreateAatf(databaseWrapper, organisation);

                databaseWrapper.WeeeContext.Aatfs.Add(aatf);

                await databaseWrapper.WeeeContext.SaveChangesAsync();

                databaseWrapper.WeeeContext.Aatfs.Where(a => a.Id == aatf.Id).Should().NotBeEmpty();

                var canAatfBeDeletedFlags = new CanAatfBeDeletedFlags();
                A.CallTo(() => getAatfDeletionStatus.Validate(message.AatfId)).Returns(canAatfBeDeletedFlags);

                var result = await Xunit.Record.ExceptionAsync(() => Handler(databaseWrapper).HandleAsync(message));

                result.Should().BeOfType <InvalidOperationException>();
            }
        }
Example #4
0
 public AatfDeletionData(CanOrganisationBeDeletedFlags canOrganisationBeDeletedFlags,
                         CanAatfBeDeletedFlags canAatfBeDeletedFlags)
 {
     CanOrganisationBeDeletedFlags = canOrganisationBeDeletedFlags;
     CanAatfBeDeletedFlags         = canAatfBeDeletedFlags;
 }