Ejemplo n.º 1
0
        public async Task FetchSchemeAsync_ReturnsSchemeWithSpecifiedOrganisationId()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                // Arrange
                var modelHelper = new ModelHelper(database.Model);

                var organisationId = new Guid("C826DCE8-78EB-4BE4-B419-4DE73D1AD181");

                var organisation = modelHelper.CreateOrganisation();
                organisation.Id = organisationId;

                modelHelper.CreateScheme(organisation);

                database.Model.SaveChanges();

                OrganisationDetailsDataAccess dataAccess = new OrganisationDetailsDataAccess(database.WeeeContext);

                // Act
                Domain.Scheme.Scheme result = await dataAccess.FetchSchemeAsync(organisationId);

                // Assert
                Assert.NotNull(result);
                Assert.Equal(organisationId, result.OrganisationId);
            }
        }
        public async Task RemoveRegisteredProducer_ProducerIsMarkedAsRemovedAndRemovedDateIsSet()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                var context = database.WeeeContext;

                var organisation = Organisation.CreateSoleTrader("My trading name");
                context.Organisations.Add(organisation);
                await context.SaveChangesAsync();

                var scheme = new Scheme(organisation.Id);
                context.Schemes.Add(scheme);
                await context.SaveChangesAsync();

                var producer = new RegisteredProducer("ABC12345", 2017, scheme);
                context.AllRegisteredProducers.Add(producer);

                SystemTime.Freeze(new DateTime(2016, 10, 1));

                producer.Remove();

                SystemTime.Unfreeze();

                await context.SaveChangesAsync();

                producer = context.AllRegisteredProducers
                    .SingleOrDefault(p => p.Id == producer.Id);

                Assert.NotNull(producer);
                Assert.True(producer.Removed);
                Assert.NotNull(producer.RemovedDate);
                Assert.Equal(new DateTime(2016, 10, 1), producer.RemovedDate);
            }
        }
Ejemplo n.º 3
0
        public async Task CreateRegisteredProducer_ProducerIsNotRemoved()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                var context = database.WeeeContext;

                var organisation = Organisation.CreateSoleTrader("My trading name");
                context.Organisations.Add(organisation);
                await context.SaveChangesAsync();

                var scheme = new Scheme(organisation.Id);
                context.Schemes.Add(scheme);
                await context.SaveChangesAsync();

                var producer = new RegisteredProducer("ABC12345", 2017, scheme);
                context.AllRegisteredProducers.Add(producer);
                await context.SaveChangesAsync();

                producer = context.RegisteredProducers
                           .SingleOrDefault(p => p.Id == producer.Id);

                Assert.NotNull(producer);
                Assert.False(producer.Removed);
                Assert.Null(producer.RemovedDate);
            }
        }
Ejemplo n.º 4
0
        public async Task RemoveRegisteredProducer_ProducerIsMarkedAsRemovedAndRemovedDateIsSet()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                var context = database.WeeeContext;

                var organisation = Organisation.CreateSoleTrader("My trading name");
                context.Organisations.Add(organisation);
                await context.SaveChangesAsync();

                var scheme = new Scheme(organisation.Id);
                context.Schemes.Add(scheme);
                await context.SaveChangesAsync();

                var producer = new RegisteredProducer("ABC12345", 2017, scheme);
                context.AllRegisteredProducers.Add(producer);

                SystemTime.Freeze(new DateTime(2016, 10, 1));

                producer.Remove();

                SystemTime.Unfreeze();

                await context.SaveChangesAsync();

                producer = context.AllRegisteredProducers
                           .SingleOrDefault(p => p.Id == producer.Id);

                Assert.NotNull(producer);
                Assert.True(producer.Removed);
                Assert.NotNull(producer.RemovedDate);
                Assert.Equal(new DateTime(2016, 10, 1), producer.RemovedDate);
            }
        }
        public async Task CreateRegisteredProducer_ProducerIsNotRemoved()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                var context = database.WeeeContext;

                var organisation = Organisation.CreateSoleTrader("My trading name");
                context.Organisations.Add(organisation);
                await context.SaveChangesAsync();

                var scheme = new Scheme(organisation.Id);
                context.Schemes.Add(scheme);
                await context.SaveChangesAsync();

                var producer = new RegisteredProducer("ABC12345", 2017, scheme);
                context.AllRegisteredProducers.Add(producer);
                await context.SaveChangesAsync();

                producer = context.RegisteredProducers
                    .SingleOrDefault(p => p.Id == producer.Id);

                Assert.NotNull(producer);
                Assert.False(producer.Removed);
                Assert.Null(producer.RemovedDate);
            }
        }
        public async Task <List <int> > HandleAsync(Request message)
        {
            Domain.Scheme.Scheme scheme = await dataAccess.FetchSchemeByOrganisationIdAsync(message.PcsId);

            authorization.EnsureSchemeAccess(scheme.Id);
            return(await dataAccess.GetDataReturnComplianceYearsForScheme(scheme.Id));
        }
Ejemplo n.º 7
0
        public async Task HandleAsync_Always_CreatesFileNameWithSchemeApprovalNumberComplianceYearAndCurrentTime()
        {
            // Arrange
            Domain.Scheme.Scheme scheme = new Domain.Scheme.Scheme(A.Dummy <Organisation>());
            scheme.UpdateScheme(
                "Scheme name",
                "WEE/AB1234CD/SCH",
                A.Dummy <string>(),
                A.Dummy <Domain.Obligation.ObligationType?>(),
                A.Dummy <UKCompetentAuthority>());

            IFetchSummaryCsvDataAccess dataAccess = A.Fake <IFetchSummaryCsvDataAccess>();

            A.CallTo(() => dataAccess.FetchSchemeAsync(A <Guid> ._))
            .Returns(scheme);

            FetchSummaryCsvHandler handler = new FetchSummaryCsvHandler(
                A.Dummy <IWeeeAuthorization>(),
                A.Dummy <CsvWriterFactory>(),
                dataAccess);

            // Act
            Requests.DataReturns.FetchSummaryCsv request = new Requests.DataReturns.FetchSummaryCsv(
                A.Dummy <Guid>(),
                2017);

            SystemTime.Freeze(new DateTime(2016, 1, 2, 15, 22, 59), true);
            FileInfo result = await handler.HandleAsync(request);

            SystemTime.Unfreeze();

            // Assert
            Assert.NotNull(result);
            Assert.Equal("WEE/AB1234CD/SCH_EEE_WEEE_data_2017_02012016_1522.csv", result.FileName);
        }
 public DataReturnVersionBuilderExtension(Scheme scheme, Quarter quarter,
                                          Func <Scheme, Quarter, Func <Scheme, Quarter, IDataReturnVersionBuilderDataAccess>, IEeeValidator> eeeValidatorDelegate,
                                          Func <Scheme, Quarter, IDataReturnVersionBuilderDataAccess> dataAccessDelegate, ISubmissionWindowClosed submissionWindowClosed, List <ErrorData> errorData)
     : base(scheme, quarter, eeeValidatorDelegate, dataAccessDelegate, submissionWindowClosed)
 {
     Errors = errorData;
 }
Ejemplo n.º 9
0
 public EeeValidator(Scheme scheme, Quarter quarter,
                     Func <Scheme, Quarter, IDataReturnVersionBuilderDataAccess> dataAccessDelegate)
 {
     this.scheme             = scheme;
     this.quarter            = quarter;
     schemeQuarterDataAccess = dataAccessDelegate(scheme, quarter);
 }
Ejemplo n.º 10
0
 public EeeValidator(Scheme scheme, Quarter quarter,
     Func<Scheme, Quarter, IDataReturnVersionBuilderDataAccess> dataAccessDelegate)
 {
     this.scheme = scheme;
     this.quarter = quarter;
     schemeQuarterDataAccess = dataAccessDelegate(scheme, quarter);
 }
Ejemplo n.º 11
0
        public void CheckSchemeAccess_ReturnsTrue_WhenUserHasRequiredClaims()
        {
            // Arrange
            Guid organisationID = Guid.NewGuid();
            Guid userId         = Guid.NewGuid();
            Guid schemeID       = new Guid("5F3069F4-EDA3-43A3-BDD8-726028CDABB0");

            Domain.Scheme.Scheme scheme = new Domain.Scheme.Scheme(organisationID);
            typeof(Entity).GetProperty("Id").SetValue(scheme, schemeID); // <- sad but necessary

            IUserContext userContext = A.Fake <IUserContext>();

            WeeeContext weeeContext =
                MakeFakeWeeeContext(
                    userContext,
                    userId,
                    new List <OrganisationUser> {
                new OrganisationUser(userId, organisationID, UserStatus.Active)
            },
                    new List <Domain.Scheme.Scheme> {
                scheme
            });

            A.CallTo(() => userContext.UserId).Returns(userId);

            WeeeAuthorization authorization = new WeeeAuthorization(weeeContext, userContext);

            // Act
            bool result = authorization.CheckSchemeAccess(schemeID);

            // Assert
            Assert.Equal(true, result);
        }
        public async Task Execute_GivenWeeeReceivedData_ReturnsPcsAatfDiscrepancyDataShouldBeCorrect()
        {
            using (DatabaseWrapper db = new DatabaseWrapper())
            {
                // Arrange
                Organisation organisation             = Organisation.CreateSoleTrader("Test Organisation");
                Domain.UKCompetentAuthority authority = db.WeeeContext.UKCompetentAuthorities.Single(c => c.Abbreviation == UKCompetentAuthorityAbbreviationType.EA);
                var     year    = 2019;
                Quarter quarter = new Quarter(year, QuarterType.Q1);

                Scheme scheme1 = new Scheme(organisation);
                scheme1.UpdateScheme("Test Scheme 1", "WEE/AH7453NF/SCH", "WEE9462846", Domain.Obligation.ObligationType.B2B, authority);
                scheme1.SetStatus(Domain.Scheme.SchemeStatus.Approved);

                Domain.DataReturns.DataReturn dataReturn1 = new Domain.DataReturns.DataReturn(scheme1, quarter);

                Domain.DataReturns.DataReturnVersion version1 = new Domain.DataReturns.DataReturnVersion(dataReturn1);

                Domain.DataReturns.WeeeDeliveredAmount amount1 = new Domain.DataReturns.WeeeDeliveredAmount(
                    Domain.Obligation.ObligationType.B2B,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m, new AatfDeliveryLocation("WEE/AA1111AA/ATF", string.Empty));

                db.WeeeContext.DataReturns.Add(dataReturn1);
                db.WeeeContext.DataReturnVersions.Add(version1);
                version1.WeeeDeliveredReturnVersion.AddWeeeDeliveredAmount(amount1);
                await db.WeeeContext.SaveChangesAsync();

                dataReturn1.SetCurrentVersion(version1);
                await db.WeeeContext.SaveChangesAsync();

                var @return = CreateSubmittedReturn(db, organisation);
                var aatf    = new Aatf("aatfName", db.WeeeContext.UKCompetentAuthorities.First(), "WEE/AA1111AA/ATF", AatfStatus.Approved, organisation, AddressHelper.GetAatfAddress(db), AatfSize.Large, DateTime.Now, ObligatedWeeeIntegrationCommon.CreateDefaultContact(db.WeeeContext.Countries.First()), FacilityType.Aatf, (short)year, null, null);

                var weeeReceived        = new EA.Weee.Domain.AatfReturn.WeeeReceived(scheme1, aatf, @return);
                var weeeReceivedAmounts = new List <WeeeReceivedAmount>()
                {
                    new Domain.AatfReturn.WeeeReceivedAmount(weeeReceived, 1, 2, 10)
                };

                db.WeeeContext.Returns.Add(@return);
                db.WeeeContext.ReturnAatfs.Add(new ReturnAatf(aatf, @return));
                db.WeeeContext.WeeeReceived.Add(weeeReceived);
                db.WeeeContext.WeeeReceivedAmount.AddRange(weeeReceivedAmounts);
                await db.WeeeContext.SaveChangesAsync();

                // Act
                var results = await db.StoredProcedures.GetPcsAatfComparisonDataCsvData(year, null, string.Empty);

                var record = results.First(x => x.AatfApprovalNumber == "WEE/AA1111AA/ATF" && x.ObligationType == "B2B");

                //Assert
                Assert.NotNull(record);
                Assert.Equal("WEE/AA1111AA/ATF", record.AatfApprovalNumber);
                Assert.Equal(123.456m, record.PcsTonnage);
                Assert.Equal(10, record.AatfTonnage);
                Assert.Equal(113.456m, record.DifferenceTonnage);
            }
        }
Ejemplo n.º 13
0
            public EeeValidatorBuilder()
            {
                Year    = 2016;
                Quarter = QuarterType.Q1;
                Scheme  = A.Fake <Scheme>();

                DataAccess = A.Fake <IDataReturnVersionBuilderDataAccess>();
            }
            public DataReturnVersionBuilderHelper()
            {
                Scheme                 = A.Dummy <Scheme>();
                Quarter                = A.Dummy <Quarter>();
                EeeValidator           = A.Fake <IEeeValidator>();
                DataAccess             = A.Fake <IDataReturnVersionBuilderDataAccess>();
                SubmissionWindowClosed = A.Fake <ISubmissionWindowClosed>();

                dataAccessDelegate   = (x, y) => DataAccess;
                eeeValidatorDelegate = (s, q, z) => EeeValidator;
            }
Ejemplo n.º 15
0
        public ReturnMapTests()
        {
            mapper             = A.Fake <IMapper>();
            organisationMapper = A.Fake <IMap <Organisation, OrganisationData> >();
            statusMapper       = A.Fake <IMap <AatfStatus, Core.AatfReturn.AatfStatus> >();

            map = new ReturnMap(mapper, organisationMapper, statusMapper);

            aatf         = A.Fake <DomainAatf>();
            scheme       = A.Fake <DomainScheme>();
            organisation = Organisation.CreatePartnership("trading name");
        }
Ejemplo n.º 16
0
        public async Task <SchemePublicInfo> HandleAsync(Requests.Scheme.GetSchemePublicInfo message)
        {
            Domain.Scheme.Scheme scheme = await dataAccess.FetchSchemeByOrganisationId(message.OrganisationId);

            return(new SchemePublicInfo()
            {
                SchemeId = scheme.Id,
                OrganisationId = scheme.OrganisationId,
                Name = scheme.SchemeName,
                ApprovalNo = scheme.ApprovalNumber,
                StatusName = scheme.SchemeStatus.DisplayName
            });
        }
Ejemplo n.º 17
0
        public async Task <FileInfo> HandleAsync(FetchIssuedChargesCsv message)
        {
            authorization.EnsureCanAccessInternalArea();

            UKCompetentAuthority authority = await dataAccess.FetchCompetentAuthority(message.Authority);

            IEnumerable <ProducerSubmission> results = await dataAccess.FetchInvoicedProducerSubmissionsAsync(authority, message.ComplianceYear, message.SchemeId);

            CsvWriter <ProducerSubmission> csvWriter = csvWriterFactory.Create <ProducerSubmission>();

            csvWriter.DefineColumn("Scheme name", ps => ps.RegisteredProducer.Scheme.SchemeName);
            csvWriter.DefineColumn("Compliance year", ps => ps.RegisteredProducer.ComplianceYear);
            csvWriter.DefineColumn("Submission date and time (GMT)", ps => ps.MemberUpload.SubmittedDate.Value.ToString("dd/MM/yyyy HH:mm:ss"));
            csvWriter.DefineColumn("Producer name", ps => ps.OrganisationName);
            csvWriter.DefineColumn("PRN", ps => ps.RegisteredProducer.ProducerRegistrationNumber);
            csvWriter.DefineColumn("Charge value (GBP)", ps => ps.ChargeThisUpdate);
            csvWriter.DefineColumn("Charge band", ps => ps.ChargeBandAmount.ChargeBand);
            csvWriter.DefineColumn("Issued date", ps => ps.MemberUpload.InvoiceRun.IssuedDate.ToString("dd/MM/yyyy HH:mm:ss"));
            csvWriter.DefineColumn(@"Reg. Off. or PPoB country", ps => ps.RegOfficeOrPBoBCountry);
            csvWriter.DefineColumn(@"Includes annual charge", ps => ps.HasAnnualCharge);

            string content = csvWriter.Write(results);

            byte[] data = Encoding.UTF8.GetBytes(content);

            string schemeApprovalNumber = string.Empty;
            string fileName             = string.Empty;

            if (message.SchemeId.HasValue)
            {
                //get approval number for scheme to display in the filename.
                Domain.Scheme.Scheme scheme = await dataAccess.FetchSchemeAsync(message.SchemeId);

                schemeApprovalNumber = scheme.ApprovalNumber.Replace("/", string.Empty);
                fileName             = string.Format(
                    "{0}_{1}_issuedcharges_{2:ddMMyyyy_HHmm}.csv",
                    message.ComplianceYear,
                    schemeApprovalNumber,
                    SystemTime.UtcNow);
            }
            else
            {
                fileName = string.Format(
                    "{0}_issuedcharges_{1:ddMMyyyy_HHmm}.csv",
                    message.ComplianceYear,
                    SystemTime.UtcNow);
            }
            return(new FileInfo(fileName, data));
        }
Ejemplo n.º 18
0
        private RegisteredProducer CreateRegisteredProducer(Scheme scheme, int complianceYear, string registrationNumber, string organisationName)
        {
            var registeredProducer = new RegisteredProducer(registrationNumber, complianceYear, scheme);

            var producerSubmission = A.Fake <ProducerSubmission>();

            A.CallTo(() => producerSubmission.OrganisationName)
            .Returns(organisationName);
            A.CallTo(() => producerSubmission.RegisteredProducer)
            .Returns(registeredProducer);

            registeredProducer.SetCurrentSubmission(producerSubmission);

            return(registeredProducer);
        }
Ejemplo n.º 19
0
            public DataReturnVersionFromXmlBuilderHelper(string schemeApprovalNumber)
            {
                DataReturnVersionBuilder     = A.Fake <IDataReturnVersionBuilder>();
                SchemeApprovalNumberMismatch = A.Fake <ISchemeApprovalNumberMismatch>();

                Scheme scheme = new Scheme(new Guid("FE4056B3-F892-476E-A4AB-7C111AE1EF14"));

                scheme.UpdateScheme(
                    "Test scheme",
                    schemeApprovalNumber,
                    "1B1S",
                    ObligationType.Both,
                    new Guid("C5D400BE-0CE7-43D7-BD7B-B7936967E500"));

                A.CallTo(() => DataReturnVersionBuilder.Scheme).Returns(scheme);
            }
        public async Task <Scheme> FetchSchemeAsync(Guid schemeId)
        {
            Scheme scheme = await context.Schemes
                            .Where(s => s.Id == schemeId)
                            .SingleOrDefaultAsync();

            if (scheme == null)
            {
                string errorMessage = string.Format(
                    "A scheme with ID \"{0}\" could not be found.",
                    schemeId);

                throw new ArgumentException(errorMessage);
            }

            return(scheme);
        }
Ejemplo n.º 21
0
        public async Task Add_EntityShouldBeAdded()
        {
            using (var database = new DatabaseWrapper())
            {
                int originalSchemesCount = database.WeeeContext.Schemes.Count();
                UpdateSchemeInformationDataAccess dataAccess = new UpdateSchemeInformationDataAccess(database.WeeeContext);

                Organisation organisation = ObligatedWeeeIntegrationCommon.CreateOrganisation();
                Scheme       scheme       = ObligatedWeeeIntegrationCommon.CreateScheme(organisation);

                dataAccess.AddScheme(scheme);
                await dataAccess.SaveAsync();

                database.WeeeContext.Schemes.Where(p => Equals(scheme)).Should().NotBeNull();

                int newSchemesCount = database.WeeeContext.Schemes.Count();

                (newSchemesCount - originalSchemesCount).Should().Be(1);
            }
        }
Ejemplo n.º 22
0
        public async Task <CSVFileData> HandleAsync(GetProducerEeeDataCsv request)
        {
            authorization.EnsureCanAccessInternalArea();

            string obligationType = ConvertEnumToDatabaseString(request.ObligationType);

            CsvWriter <ProducerEeeCsvData> csvWriter = CreateWriter(obligationType);

            List <ProducerEeeCsvData> items = await dataAccess.GetItemsAsync(
                request.ComplianceYear,
                request.SchemeId,
                obligationType);

            string fileContent = csvWriter.Write(items);

            string fileName;

            if (request.SchemeId == null)
            {
                fileName = string.Format("{0}_{1}_producerEEE_{2:ddMMyyyy_HHmm}.csv",
                                         request.ComplianceYear,
                                         obligationType,
                                         DateTime.UtcNow);
            }
            else
            {
                Domain.Scheme.Scheme scheme = await dataAccess.GetSchemeAsync(request.SchemeId.Value);

                fileName = string.Format("{0}_{1}_{2}_producerEEE_{3:ddMMyyyy_HHmm}.csv",
                                         request.ComplianceYear,
                                         scheme.ApprovalNumber.Replace("/", string.Empty),
                                         obligationType,
                                         DateTime.UtcNow);
            }

            return(new CSVFileData
            {
                FileContent = fileContent,
                FileName = fileName
            });
        }
Ejemplo n.º 23
0
        public DataReturnVersionBuilder(
            Scheme scheme,
            Quarter quarter,
            Func <Scheme, Quarter, Func <Scheme, Quarter, IDataReturnVersionBuilderDataAccess>, IEeeValidator> eeeValidatorDelegate,
            Func <Scheme, Quarter, IDataReturnVersionBuilderDataAccess> dataAccessDelegate,
            ISubmissionWindowClosed submissionWindowClosed)
        {
            Guard.ArgumentNotNull(() => scheme, scheme);
            Guard.ArgumentNotNull(() => quarter, quarter);

            Scheme                      = scheme;
            Quarter                     = quarter;
            eeeValidator                = eeeValidatorDelegate(scheme, quarter, dataAccessDelegate);
            schemeQuarterDataAccess     = dataAccessDelegate(scheme, quarter);
            this.submissionWindowClosed = submissionWindowClosed;

            Errors = new List <ErrorData>();
            weeeCollectedAmounts = new List <WeeeCollectedAmount>();
            weeeDeliveredAmounts = new List <WeeeDeliveredAmount>();
            eeeOutputAmounts     = new List <EeeOutputAmount>();
        }
Ejemplo n.º 24
0
        public void ContactAddedToExistingScheme_SchemeUpdateIsAudited_ContactCreateIsAudited()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                var context      = database.WeeeContext;
                var organisation = Organisation.CreateSoleTrader("test name");
                var scheme       = new Scheme(organisation);

                organisation = context.Organisations.Add(organisation);
                scheme       = context.Schemes.Add(scheme);

                context.SaveChanges(); // This will reset the change tracker

                scheme.AddOrUpdateMainContactPerson(new Contact("first", "last", "position"));

                var schemeChanges  = context.ChangeTracker.Entries <Scheme>();
                var contactChanges = context.ChangeTracker.Entries <Contact>();

                Assert.Equal(EntityState.Added, contactChanges.Single().State);
                Assert.Equal(EntityState.Modified, schemeChanges.Single().State);
            }
        }
Ejemplo n.º 25
0
        public async Task FetchOrganisations_OrganisationWithRejectedPcs_OneAatf_OrganisationReturned()
        {
            var dbContextHelper = new DbContextHelper();

            var organisationId = Guid.NewGuid();

            var organisation = A.Dummy <Domain.Organisation.Organisation>();

            A.CallTo(() => organisation.Id).Returns(organisationId);
            A.CallTo(() => organisation.OrganisationStatus).Returns(Domain.Organisation.OrganisationStatus.Complete);

            var organisations = new List <Domain.Organisation.Organisation>()
            {
                organisation
            };

            var aatfs = new List <Aatf>()
            {
                new Aatf("one", A.Dummy <UKCompetentAuthority>(), "1234", AatfStatus.Approved, organisation, A.Dummy <AatfAddress>(), AatfSize.Large, DateTime.Now, A.Dummy <AatfContact>(), FacilityType.Aatf, 2019, A.Dummy <LocalArea>(), A.Dummy <PanArea>())
            };

            var scheme = new Domain.Scheme.Scheme(organisation);

            scheme.SetStatus(Domain.Scheme.SchemeStatus.Rejected);
            var schemes = new List <Domain.Scheme.Scheme>()
            {
                scheme
            };

            A.CallTo(() => context.Organisations).Returns(dbContextHelper.GetAsyncEnabledDbSet(organisations));
            A.CallTo(() => context.Aatfs).Returns(dbContextHelper.GetAsyncEnabledDbSet(aatfs));
            A.CallTo(() => context.Schemes).Returns(dbContextHelper.GetAsyncEnabledDbSet(schemes));

            var dataAccess = new FetchOrganisationSearchResultsForCacheDataAccess(context, new AddressMap());

            var results = await dataAccess.FetchCompleteOrganisations();

            Assert.NotEmpty(results);
        }
Ejemplo n.º 26
0
        private async Task CreateScheme(DatabaseWrapper db)
        {
            const Domain.Obligation.ObligationType obligationType = Domain.Obligation.ObligationType.B2B;

            var contact = new Domain.Organisation.Contact("firstName", "LastName", "Position");

            Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
            var          address      = new Address("address1", "address2", "town", "county", "postcode", db.WeeeContext.Countries.First(), "telephone", "email");

            organisation.AddOrUpdateAddress(Domain.AddressType.RegisteredOrPPBAddress, address);

            Domain.UKCompetentAuthority authority = db.WeeeContext.UKCompetentAuthorities.Single(c => c.Abbreviation == UKCompetentAuthorityAbbreviationType.EA);

            Scheme scheme1 = new Scheme(organisation);

            scheme1.UpdateScheme("BBB", "TT", "Test", obligationType, authority);
            scheme1.AddOrUpdateMainContactPerson(contact);
            scheme1.AddOrUpdateAddress(address);
            db.WeeeContext.Organisations.Add(organisation);
            db.WeeeContext.Schemes.Add(scheme1);
            await db.WeeeContext.SaveChangesAsync();
        }
Ejemplo n.º 27
0
        public void AddressAddedToExistingScheme_SchemeUpdateIsAudited_AddressCreateIsAudited()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                var context      = database.WeeeContext;
                var organisation = Organisation.CreateSoleTrader("test name");
                var scheme       = new Scheme(organisation);

                organisation = context.Organisations.Add(organisation);
                scheme       = context.Schemes.Add(scheme);

                context.SaveChanges(); // This will reset the change tracker

                scheme.AddOrUpdateAddress(ValidAddress());

                var schemeChanges  = context.ChangeTracker.Entries <Scheme>();
                var addressChanges = context.ChangeTracker.Entries <Address>();

                Assert.Equal(EntityState.Added, addressChanges.Single().State);
                Assert.Equal(EntityState.Modified, schemeChanges.Single().State);
            }
        }
Ejemplo n.º 28
0
        public async Task HandleAsync_GivenSchemeListAndOperator_SchemeDataListShouldBeOrderedBySchemeName()
        {
            var organisationData = A.Fake <Core.Organisations.OrganisationData>();

            Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
            Scheme       scheme1      = new Scheme(organisation);
            Scheme       scheme2      = new Scheme(organisation);

            var @return      = A.Dummy <Return>();
            var returnScheme = new List <ReturnScheme>()
            {
                new ReturnScheme(scheme1, @return),
                new ReturnScheme(scheme2, @return)
            };

            schemeData1              = A.Fake <SchemeData>();
            schemeData1.SchemeName   = "Scheme D";
            schemeData1.SchemeStatus = Core.Shared.SchemeStatus.Approved;
            A.CallTo(() => mapper.Map <Scheme, SchemeData>(scheme1)).Returns(schemeData1);

            schemeData2              = A.Fake <SchemeData>();
            schemeData2.SchemeName   = "Scheme A";
            schemeData2.SchemeStatus = Core.Shared.SchemeStatus.Approved;
            A.CallTo(() => mapper.Map <Scheme, SchemeData>(scheme2)).Returns(schemeData2);

            var schemeList = new List <SchemeData> {
                schemeData1, schemeData2
            };

            A.CallTo(() => mapper.Map <Organisation, OrganisationData>(A <Organisation> ._)).Returns(organisationData);
            A.CallTo(() => returnSchemeDataAccess.GetSelectedSchemesByReturnId(A <Guid> ._)).Returns(returnScheme);
            var result = await handler.HandleAsync(A.Dummy <GetReturnScheme>());

            Assert.Collection(
                result.SchemeDataItems,
                (element1) => Assert.Equal("Scheme A", element1.SchemeName),
                (element2) => Assert.Equal("Scheme D", element2.SchemeName));
        }
Ejemplo n.º 29
0
        public async Task CanCreateReturnScheme()
        {
            using (var database = new DatabaseWrapper())
            {
                var context = database.WeeeContext;

                var          name        = "Test Name" + Guid.NewGuid();
                var          tradingName = "Test Trading Name" + Guid.NewGuid();
                const string crn         = "ABC12345";

                var organisation = Organisation.Organisation.CreateRegisteredCompany(name, crn, tradingName);

                context.Organisations.Add(organisation);
                await context.SaveChangesAsync();

                var scheme = new Scheme(organisation.Id);
                context.Schemes.Add(scheme);

                var quarter = new Quarter(2019, QuarterType.Q1);
                var @return = new Return(organisation, quarter, database.Model.AspNetUsers.First().Id, FacilityType.Aatf);

                context.Returns.Add(@return);
                await context.SaveChangesAsync();

                var dataAccess = new ReturnSchemeDataAccess(database.WeeeContext);

                var returnScheme = new ReturnScheme(scheme, @return);

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

                var returnSchemeReturned = context.ReturnScheme.First(o => o.Id == returnScheme.Id);
                returnSchemeReturned.Should().NotBeNull();
                returnSchemeReturned.ReturnId.Should().Be(@return.Id);
                returnSchemeReturned.SchemeId.Should().Be(scheme.Id);
            }
        }
Ejemplo n.º 30
0
        public async Task <FileInfo> HandleAsync(Requests.DataReturns.FetchSummaryCsv message)
        {
            authorization.EnsureInternalOrOrganisationAccess(message.OrganisationId);

            Domain.Scheme.Scheme scheme = await dataAccess.FetchSchemeAsync(message.OrganisationId);

            List <DataReturnSummaryCsvData> results = await dataAccess.FetchResultsAsync(
                scheme.Id,
                message.ComplianceYear);

            CsvWriter <DataReturnSummaryCsvData> csvWriter = CreateWriter();

            string content = csvWriter.Write(results);

            byte[] data = Encoding.UTF8.GetBytes(content);

            string fileName = string.Format("{0}_EEE_WEEE_data_{1}_{2:ddMMyyyy_HHmm}.csv",
                                            scheme.ApprovalNumber,
                                            message.ComplianceYear,
                                            SystemTime.Now);

            return(new FileInfo(fileName, data));
        }
Ejemplo n.º 31
0
        public async Task FetchOrganisations_OrganisationWithRejectedPcs_NoAatfs_OrganisationNotReturned()
        {
            var dbContextHelper = new DbContextHelper();

            var organisationId = Guid.NewGuid();

            var organisation = A.Dummy <Domain.Organisation.Organisation>();

            A.CallTo(() => organisation.Id).Returns(organisationId);
            A.CallTo(() => organisation.OrganisationStatus).Returns(Domain.Organisation.OrganisationStatus.Complete);

            var organisations = new List <Domain.Organisation.Organisation>()
            {
                organisation
            };

            var aatfs = new List <Aatf>();

            var scheme = new Domain.Scheme.Scheme(organisation);

            scheme.SetStatus(Domain.Scheme.SchemeStatus.Rejected);
            var schemes = new List <Domain.Scheme.Scheme>()
            {
                scheme
            };

            A.CallTo(() => context.Organisations).Returns(dbContextHelper.GetAsyncEnabledDbSet(organisations));
            A.CallTo(() => context.Aatfs).Returns(dbContextHelper.GetAsyncEnabledDbSet(aatfs));
            A.CallTo(() => context.Schemes).Returns(dbContextHelper.GetAsyncEnabledDbSet(schemes));

            var dataAccess = new FetchOrganisationSearchResultsForCacheDataAccess(context, new AddressMap());

            var results = await dataAccess.FetchCompleteOrganisations();

            Assert.Empty(results);
        }
Ejemplo n.º 32
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);
        }
 public DataReturnVersionBuilderDataAccess(Scheme scheme, Quarter quarter, WeeeContext context)
 {
     this.context = context;
     this.scheme = scheme;
     this.quarter = quarter;
 }
        public async Task Execute_WithoutSchemeFilter_ReturnsResultsForAllSchemes()
        {
            using (DatabaseWrapper wrapper = new DatabaseWrapper())
            {
                // Arrange
                Domain.Organisation.Organisation organisation = Domain.Organisation.Organisation.CreateSoleTrader("Test Organisation");
                Domain.UKCompetentAuthority authority = wrapper.WeeeContext.UKCompetentAuthorities.Single(c => c.Abbreviation == "EA");
                Quarter quarter = new Quarter(2099, QuarterType.Q1);

                // Arrange - Scheme 1

                Domain.Scheme.Scheme scheme1 = new Domain.Scheme.Scheme(organisation);
                scheme1.UpdateScheme("Test Scheme 1", "WEE/AH7453NF/SCH", "WEE9462846", ObligationType.B2C, authority);
                scheme1.SetStatus(Domain.Scheme.SchemeStatus.Approved);

                Domain.DataReturns.DataReturn dataReturn1 = new Domain.DataReturns.DataReturn(scheme1, quarter);

                Domain.DataReturns.DataReturnVersion version1 = new Domain.DataReturns.DataReturnVersion(dataReturn1);

                Domain.DataReturns.WeeeCollectedAmount amount1 = new Domain.DataReturns.WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);

                version1.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amount1);

                wrapper.WeeeContext.DataReturnVersions.Add(version1);

                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn1.SetCurrentVersion(version1);

                await wrapper.WeeeContext.SaveChangesAsync();

                // Arrange - Scheme 2

                Domain.Scheme.Scheme scheme2 = new Domain.Scheme.Scheme(organisation);
                scheme2.UpdateScheme("Test Scheme 2", "WEE/ZU6355HV/SCH", "WEE5746395", ObligationType.B2C, authority);
                scheme2.SetStatus(Domain.Scheme.SchemeStatus.Approved);

                Domain.DataReturns.DataReturn dataReturn2 = new Domain.DataReturns.DataReturn(scheme2, quarter);

                Domain.DataReturns.DataReturnVersion version2 = new Domain.DataReturns.DataReturnVersion(dataReturn2);

                Domain.DataReturns.WeeeCollectedAmount amount2 = new Domain.DataReturns.WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);

                version2.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amount2);

                wrapper.WeeeContext.DataReturnVersions.Add(version2);

                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn2.SetCurrentVersion(version2);

                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                SpgSchemeWeeeCsvResult result = await wrapper.WeeeContext.StoredProcedures.SpgSchemeWeeeCsvAsync(
                    2099,
                    null,
                    "B2C");

                // Assert
                Assert.NotNull(result);

                Assert.NotNull(result.Schemes);
                Assert.Equal(2, result.Schemes.Count);

                Assert.NotNull(result.CollectedAmounts);
                Assert.Equal(2, result.CollectedAmounts.Count);
            }
        }
        public void CheckSchemeAccess_ReturnsTrue_WhenUserHasRequiredClaims()
        {
            // Arrange
            Guid organisationID = Guid.NewGuid();
            Guid userId = Guid.NewGuid();
            Guid schemeID = new Guid("5F3069F4-EDA3-43A3-BDD8-726028CDABB0");
            Domain.Scheme.Scheme scheme = new Domain.Scheme.Scheme(organisationID);
            typeof(Entity).GetProperty("Id").SetValue(scheme, schemeID); // <- sad but necessary

            IUserContext userContext = A.Fake<IUserContext>();

            WeeeContext weeeContext =
                MakeFakeWeeeContext(
                    userContext,
                    userId,
                    new List<OrganisationUser> { new OrganisationUser(userId, organisationID, UserStatus.Active) },
                    new List<Domain.Scheme.Scheme> { scheme });

            A.CallTo(() => userContext.UserId).Returns(userId);

            WeeeAuthorization authorization = new WeeeAuthorization(weeeContext, userContext);

            // Act
            bool result = authorization.CheckSchemeAccess(schemeID);

            // Assert
            Assert.Equal(true, result);
        }
 public SchemeFieldException(Scheme scheme, Exception exception)
 {
     Scheme = scheme;
     Exception = exception;
 }
Ejemplo n.º 37
0
        public async Task Execute_WithoutSchemeFilter_ReturnsResultsForAllSchemes()
        {
            using (DatabaseWrapper wrapper = new DatabaseWrapper())
            {
                // Arrange
                Domain.Organisation.Organisation organisation = Domain.Organisation.Organisation.CreateSoleTrader("Test Organisation");
                Domain.UKCompetentAuthority      authority    = wrapper.WeeeContext.UKCompetentAuthorities.Single(c => c.Abbreviation == UKCompetentAuthorityAbbreviationType.EA);
                Quarter quarter = new Quarter(2099, QuarterType.Q1);

                // Arrange - Scheme 1

                Domain.Scheme.Scheme scheme1 = new Domain.Scheme.Scheme(organisation);
                scheme1.UpdateScheme("Test Scheme 1", "WEE/AH7453NF/SCH", "WEE9462846", Domain.Obligation.ObligationType.B2C, authority);
                scheme1.SetStatus(Domain.Scheme.SchemeStatus.Approved);

                Domain.DataReturns.DataReturn dataReturn1 = new Domain.DataReturns.DataReturn(scheme1, quarter);

                Domain.DataReturns.DataReturnVersion version1 = new Domain.DataReturns.DataReturnVersion(dataReturn1);

                Domain.DataReturns.WeeeCollectedAmount amount1 = new Domain.DataReturns.WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    Domain.Obligation.ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);

                version1.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amount1);

                wrapper.WeeeContext.DataReturnVersions.Add(version1);

                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn1.SetCurrentVersion(version1);

                await wrapper.WeeeContext.SaveChangesAsync();

                // Arrange - Scheme 2

                Domain.Scheme.Scheme scheme2 = new Domain.Scheme.Scheme(organisation);
                scheme2.UpdateScheme("Test Scheme 2", "WEE/ZU6355HV/SCH", "WEE5746395", Domain.Obligation.ObligationType.B2C, authority);
                scheme2.SetStatus(Domain.Scheme.SchemeStatus.Approved);

                Domain.DataReturns.DataReturn dataReturn2 = new Domain.DataReturns.DataReturn(scheme2, quarter);

                Domain.DataReturns.DataReturnVersion version2 = new Domain.DataReturns.DataReturnVersion(dataReturn2);

                Domain.DataReturns.WeeeCollectedAmount amount2 = new Domain.DataReturns.WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    Domain.Obligation.ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);

                version2.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amount2);

                wrapper.WeeeContext.DataReturnVersions.Add(version2);

                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn2.SetCurrentVersion(version2);

                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                SpgSchemeWeeeCsvResult result = await wrapper.WeeeContext.StoredProcedures.SpgSchemeWeeeCsvAsync(
                    2099,
                    null,
                    "B2C");

                // Assert
                Assert.NotNull(result);

                Assert.NotNull(result.Schemes);
                Assert.Equal(2, result.Schemes.Count);

                Assert.NotNull(result.CollectedAmounts);
                Assert.Equal(2, result.CollectedAmounts.Count);
            }
        }
            public DataReturnVersionBuilderHelper()
            {
                Scheme = A.Dummy<Scheme>();
                Quarter = A.Dummy<Quarter>();
                EeeValidator = A.Fake<IEeeValidator>();
                DataAccess = A.Fake<IDataReturnVersionBuilderDataAccess>();
                SubmissionWindowClosed = A.Fake<ISubmissionWindowClosed>();

                dataAccessDelegate = (x, y) => DataAccess;
                eeeValidatorDelegate = (s, q, z) => EeeValidator;
            }
            public EeeValidatorBuilder()
            {
                Year = 2016;
                Quarter = QuarterType.Q1;
                Scheme = A.Fake<Scheme>();

                DataAccess = A.Fake<IDataReturnVersionBuilderDataAccess>();
            }
            public DataReturnVersionFromXmlBuilderHelper(string schemeApprovalNumber)
            {
                DataReturnVersionBuilder = A.Fake<IDataReturnVersionBuilder>();
                SchemeApprovalNumberMismatch = A.Fake<ISchemeApprovalNumberMismatch>();

                Scheme scheme = new Scheme(new Guid("FE4056B3-F892-476E-A4AB-7C111AE1EF14"));

                scheme.UpdateScheme(
                    "Test scheme",
                    schemeApprovalNumber,
                    "1B1S",
                    ObligationType.Both,
                    new Guid("C5D400BE-0CE7-43D7-BD7B-B7936967E500"));

                A.CallTo(() => DataReturnVersionBuilder.Scheme).Returns(scheme);
            }
 public DataReturnVersionBuilderExtension(Scheme scheme, Quarter quarter,
 Func<Scheme, Quarter, Func<Scheme, Quarter, IDataReturnVersionBuilderDataAccess>, IEeeValidator> eeeValidatorDelegate,
 Func<Scheme, Quarter, IDataReturnVersionBuilderDataAccess> dataAccessDelegate, ISubmissionWindowClosed submissionWindowClosed, List<ErrorData> errorData)
     : base(scheme, quarter, eeeValidatorDelegate, dataAccessDelegate, submissionWindowClosed)
 {
     Errors = errorData;
 }
        public async Task Execute_WithSchemeFilter_ReturnsResultsForSelectedSchemeOnly()
        {
            using (DatabaseWrapper wrapper = new DatabaseWrapper())
            {
                // Arrange
                Domain.Organisation.Organisation organisation = Domain.Organisation.Organisation.CreateSoleTrader("Test Organisation");
                Domain.UKCompetentAuthority authority = wrapper.WeeeContext.UKCompetentAuthorities.Single(c => c.Abbreviation == "EA");
                Domain.Lookup.ChargeBandAmount chargeBandAmount = wrapper.WeeeContext.ChargeBandAmounts.First();
                Quarter quarter = new Quarter(2099, QuarterType.Q1);

                wrapper.WeeeContext.Organisations.Add(organisation);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Arrange - Scheme 1

                Domain.Scheme.Scheme scheme1 = new Domain.Scheme.Scheme(organisation);
                scheme1.UpdateScheme("Test Scheme 1", "WEE/AH7453NF/SCH", "WEE9462846", ObligationType.B2C, authority);
                scheme1.SetStatus(Domain.Scheme.SchemeStatus.Approved);

                Domain.Producer.RegisteredProducer registeredProducer1 = new Domain.Producer.RegisteredProducer("WEE/AG48365JN", 2099, scheme1);

                Domain.Scheme.MemberUpload memberUpload1 = new Domain.Scheme.MemberUpload(
                    organisation.Id,
                    "data",
                    new List<Domain.Scheme.MemberUploadError>(),
                    0,
                    2099,
                    scheme1,
                    "file name");

                Domain.Producer.ProducerSubmission submission1 = new Domain.Producer.ProducerSubmission(registeredProducer1, memberUpload1,
                    new Domain.Producer.ProducerBusiness(),
                    new Domain.Producer.AuthorisedRepresentative("Foo"),
                    new DateTime(2016, 1, 1),
                    0,
                    true,
                    null,
                    "Trading Name 2",
                    Domain.Producer.Classfication.EEEPlacedOnMarketBandType.Both,
                    Domain.Producer.Classfication.SellingTechniqueType.Both,
                    Domain.Obligation.ObligationType.B2C,
                    Domain.Producer.Classfication.AnnualTurnOverBandType.Lessthanorequaltoonemillionpounds,
                    new List<Domain.Producer.BrandName>(),
                    new List<Domain.Producer.SICCode>(),
                    chargeBandAmount,
                    0);

                memberUpload1.ProducerSubmissions.Add(submission1);

                wrapper.WeeeContext.MemberUploads.Add(memberUpload1);
                await wrapper.WeeeContext.SaveChangesAsync();

                registeredProducer1.SetCurrentSubmission(submission1);
                await wrapper.WeeeContext.SaveChangesAsync();

                Domain.DataReturns.DataReturn dataReturn1 = new Domain.DataReturns.DataReturn(scheme1, quarter);

                Domain.DataReturns.DataReturnVersion version1 = new Domain.DataReturns.DataReturnVersion(dataReturn1);

                Domain.DataReturns.EeeOutputAmount amount1 = new Domain.DataReturns.EeeOutputAmount(
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m,
                    registeredProducer1);

                version1.EeeOutputReturnVersion.AddEeeOutputAmount(amount1);

                wrapper.WeeeContext.DataReturnVersions.Add(version1);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn1.SetCurrentVersion(version1);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Arrange - Scheme 2

                Domain.Scheme.Scheme scheme2 = new Domain.Scheme.Scheme(organisation);
                scheme2.UpdateScheme("Test Scheme 2", "WEE/ZU6355HV/SCH", "WEE5746395", ObligationType.B2C, authority);
                scheme2.SetStatus(Domain.Scheme.SchemeStatus.Approved);

                Domain.Producer.RegisteredProducer registeredProducer2 = new Domain.Producer.RegisteredProducer("WEE/HT7483HD", 2099, scheme2);

                Domain.Scheme.MemberUpload memberUpload2 = new Domain.Scheme.MemberUpload(
                    organisation.Id,
                    "data",
                    new List<Domain.Scheme.MemberUploadError>(),
                    0,
                    2099,
                    scheme2,
                    "file name");

                Domain.Producer.ProducerSubmission submission2 = new Domain.Producer.ProducerSubmission(registeredProducer2, memberUpload2,
                    new Domain.Producer.ProducerBusiness(),
                    new Domain.Producer.AuthorisedRepresentative("Foo"),
                    new DateTime(2016, 1, 1),
                    0,
                    true,
                    null,
                    "Trading Name 1",
                    Domain.Producer.Classfication.EEEPlacedOnMarketBandType.Both,
                    Domain.Producer.Classfication.SellingTechniqueType.Both,
                    Domain.Obligation.ObligationType.B2C,
                    Domain.Producer.Classfication.AnnualTurnOverBandType.Lessthanorequaltoonemillionpounds,
                    new List<Domain.Producer.BrandName>(),
                    new List<Domain.Producer.SICCode>(),
                    chargeBandAmount,
                    0);

                memberUpload2.ProducerSubmissions.Add(submission2);

                wrapper.WeeeContext.MemberUploads.Add(memberUpload2);
                await wrapper.WeeeContext.SaveChangesAsync();

                registeredProducer2.SetCurrentSubmission(submission2);
                await wrapper.WeeeContext.SaveChangesAsync();

                Domain.DataReturns.DataReturn dataReturn2 = new Domain.DataReturns.DataReturn(scheme2, quarter);

                Domain.DataReturns.DataReturnVersion version2 = new Domain.DataReturns.DataReturnVersion(dataReturn2);

                Domain.DataReturns.EeeOutputAmount amount2 = new Domain.DataReturns.EeeOutputAmount(
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m,
                    registeredProducer2);

                version2.EeeOutputReturnVersion.AddEeeOutputAmount(amount2);

                wrapper.WeeeContext.DataReturnVersions.Add(version2);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn2.SetCurrentVersion(version2);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                List<ProducerEeeCsvData> results = await wrapper.WeeeContext.StoredProcedures.SpgProducerEeeCsvData(
                    2099,
                    scheme1.Id,
                    "B2C");

                // Assert
                Assert.NotNull(results);

                Assert.Equal(1, results.Count);

                Assert.NotNull(results[0]);
                Assert.Equal("Test Scheme 1", results[0].SchemeName);
            }
        }