public async Task FetchInvoicedProducerSubmissionsAsync_ReturnsProducerSubmissionsForRemovedProducer_WhenProducerHasBeenInvoiced()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                var helper       = new ModelHelper(database.Model);
                var domainHelper = new DomainHelper(database.WeeeContext);

                // At least one user is required in the database.
                var user = helper.GetOrCreateUser("A user");

                Weee.Tests.Core.Model.Country country = new Weee.Tests.Core.Model.Country();
                country.Id   = new Guid("FA20ED45-5488-491D-A117-DFC09C9C1BA2");
                country.Name = "Test Country";

                CompetentAuthority competentAuthority = new CompetentAuthority();
                competentAuthority.Id                 = new Guid("DDE398F6-809E-416D-B70D-B36606F221FC");
                competentAuthority.Name               = "Test Authority 1";
                competentAuthority.Abbreviation       = "T1";
                competentAuthority.Country            = country;
                competentAuthority.Email              = "TestEmailAddress";
                competentAuthority.AnnualChargeAmount = 0;
                database.Model.CompetentAuthorities.Add(competentAuthority);

                InvoiceRun invoiceRunForAuthority = new InvoiceRun();
                invoiceRunForAuthority.Id = new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872");
                invoiceRunForAuthority.CompetentAuthority = competentAuthority;
                invoiceRunForAuthority.IssuedByUserId     = user.Id;
                invoiceRunForAuthority.IssuedDate         = new DateTime(2000, 12, 1);
                database.Model.InvoiceRuns.Add(invoiceRunForAuthority);

                var    scheme             = helper.CreateScheme();
                string registrationNumber = "AAAA";

                scheme.CompetentAuthorityId = competentAuthority.Id;
                var memberUpload = helper.CreateSubmittedMemberUpload(scheme, invoiceRunForAuthority);
                memberUpload.ComplianceYear = 2000;

                var producerSubmission = helper.CreateInvoicedProducer(memberUpload, registrationNumber);
                producerSubmission.RegisteredProducer.Removed = true;

                database.Model.SaveChanges();

                UKCompetentAuthority            domainAuthority = domainHelper.GetCompetentAuthority(competentAuthority.Id);
                FetchIssuedChargesCsvDataAccess dataAccess      = new FetchIssuedChargesCsvDataAccess(database.WeeeContext);

                // Act
                var results = await dataAccess.FetchInvoicedProducerSubmissionsAsync(domainAuthority, 2000, scheme.Id);

                // Assert
                Assert.Equal(1, results.Count());

                var producerResult = results.Single();
                Assert.Equal(producerSubmission.Id, producerResult.Id);
            }
        }
        public async Task FetchInvoicedProducerSubmissionsAsync_WithSpecifiedAuthorityYearAndSchemeName_OnlyReturnsProducerSubmissions()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                var helper = new ModelHelper(database.Model);
                // At least one user is required in the database.
                var user = helper.GetOrCreateUser("A user");

                Weee.Tests.Core.Model.Country country = new Weee.Tests.Core.Model.Country();
                country.Id   = new Guid("FA20ED45-5488-491D-A117-DFC09C9C1BA2");
                country.Name = "Test Country";

                CompetentAuthority databaseAuthority1 = new CompetentAuthority();
                databaseAuthority1.Id                 = new Guid("DDE398F6-809E-416D-B70D-B36606F221FC");
                databaseAuthority1.Name               = "Test Authority 1";
                databaseAuthority1.Abbreviation       = "T1";
                databaseAuthority1.Country            = country;
                databaseAuthority1.Email              = "TestEmailAddress";
                databaseAuthority1.AnnualChargeAmount = 0;
                database.Model.CompetentAuthorities.Add(databaseAuthority1);

                InvoiceRun invoiceRunForAuthority1 = new InvoiceRun();
                invoiceRunForAuthority1.Id = new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872");
                invoiceRunForAuthority1.CompetentAuthority = databaseAuthority1;
                invoiceRunForAuthority1.IssuedByUserId     = user.Id;
                invoiceRunForAuthority1.IssuedDate         = new DateTime(2016, 12, 1);
                database.Model.InvoiceRuns.Add(invoiceRunForAuthority1);

                var    scheme             = helper.CreateScheme();
                string registrationNumber = "AAAA";

                scheme.CompetentAuthorityId = databaseAuthority1.Id;
                var memberUpload = helper.CreateSubmittedMemberUpload(scheme, invoiceRunForAuthority1);

                var producerSubmission = helper.CreateInvoicedProducer(memberUpload, registrationNumber);

                database.Model.SaveChanges();
                UKCompetentAuthority            domainAuthority1 = database.WeeeContext.UKCompetentAuthorities.Find(databaseAuthority1.Id);
                FetchIssuedChargesCsvDataAccess dataAccess       = new FetchIssuedChargesCsvDataAccess(database.WeeeContext);

                // Act
                IEnumerable <Domain.Producer.ProducerSubmission> results = await dataAccess.FetchInvoicedProducerSubmissionsAsync(domainAuthority1, 2016, scheme.Id);

                List <Domain.Producer.ProducerSubmission> producerSubmissionList = results.ToList();

                Domain.Producer.ProducerSubmission producer = results.FirstOrDefault(p => p.RegisteredProducer.ProducerRegistrationNumber == registrationNumber);
                // Assert
                Assert.NotNull(producer);
                Assert.Equal(producerSubmission.RegisteredProducer.ProducerRegistrationNumber, producer.RegisteredProducer.ProducerRegistrationNumber);
                Assert.Equal(1, producerSubmissionList.Count);
            }
        }