public async void DataProcessor_IncludesProducerThatHadSubmittedData_WhereSubmittedDataHasBeenRemovedInLatestSubmission()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper = new ModelHelper(db.Model);
                var         scheme = helper.CreateScheme();
                scheme.ApprovalNumber = "WEE/TE0001ST/SCH";

                var memberUpload = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload.ComplianceYear = 2000;
                var prod1 = helper.CreateProducerAsCompany(memberUpload, "PRN123", "B2B");
                var prod2 = helper.CreateProducerAsCompany(memberUpload, "PRN456", "B2B");

                // Prod1 given data for Q1, then Q1 data overwritten with just Prod2 - Expect just Prod1 Q1 missing
                var dataReturnVersionFirst = helper.CreateDataReturnVersion(scheme, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionFirst, prod1.RegisteredProducer, "B2B", 1, 500);  //Prod1, Q1
                var dataReturnVersionSecond = helper.CreateDataReturnVersion(scheme, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionSecond, prod2.RegisteredProducer, "B2B", 1, 500); //Prod2, Q1

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                var results = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2B", 1, null);

                // Assert
                Assert.NotNull(results);

                Assert.Equal(1, results.Count);
                MissingProducerDataCsvData result1 = results[0];
                Assert.Equal("PRN123", result1.PRN);
            }
        }
        public async void DataProcessor_ReturnsMissingB2C_WhenOnlyB2BProvidedForSchemeWithBothObligation()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper = new ModelHelper(db.Model);
                var         scheme = helper.CreateScheme();

                var memberUpload = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload.ComplianceYear = 2000;
                var prod = helper.CreateProducerAsCompany(memberUpload, "PRN123", "Both");

                var dataReturnVersionQ1 = helper.CreateDataReturnVersion(scheme, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionQ1, prod.RegisteredProducer, "B2B", 1, 500);

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                List <MissingProducerDataCsvData>      results           = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2C", 1, null);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(1, results.Count);
                MissingProducerDataCsvData result1 = results[0];
                Assert.Equal(1, result1.Quarter);
            }
        }
        public async void DataProcessor_DoesNotIncludeProducerWithBothObligation_WhenB2BSpecifiedAndSubmitted_AndProducerIsMissingB2C()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper = new ModelHelper(db.Model);
                var         scheme = helper.CreateScheme();

                var memberUpload = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload.ComplianceYear = 2000;
                var prod = helper.CreateProducerAsCompany(memberUpload, "PRN123", "Both");

                // Set up data for P1 Q1/2/3 and P2 Q4 - Expect 4 results, one for each quarter
                var dataReturnVersionQ1 = helper.CreateDataReturnVersion(scheme, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionQ1, prod.RegisteredProducer, "B2B", 1, 500);

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                List <MissingProducerDataCsvData>      results           = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2B", 1, null);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(0, results.Count);
            }
        }
        public async void DataProcessor_ReturnsOnlyQuartersForProducer_ThatHaveNotHadDataReturnsUploaded()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper = new ModelHelper(db.Model);
                var         scheme = helper.CreateScheme();
                scheme.ApprovalNumber = "WEE/TE0001ST/SCH";

                var memberUpload = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload.ComplianceYear = 2000;
                var prod = helper.CreateProducerAsCompany(memberUpload, "PRN123", "B2B");

                // Set up data for Q1 and Q4 - Expect to see Q2 and Q3 in results
                var dataReturnVersionQ1 = helper.CreateDataReturnVersion(scheme, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionQ1, prod.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersionQ4 = helper.CreateDataReturnVersion(scheme, 2000, 4);
                helper.CreateEeeOutputAmount(dataReturnVersionQ4, prod.RegisteredProducer, "B2B", 2, 600);

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                var results = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2B", null, null);

                // Assert
                Assert.NotNull(results);

                Assert.Equal(2, results.Count);
                MissingProducerDataCsvData result1 = results[0];
                Assert.Equal(2, result1.Quarter);
                MissingProducerDataCsvData result2 = results[1];
                Assert.Equal(3, result2.Quarter);
            }
        }
        public async void DataProcessor_DoesNotIncludeQuarter_WithExplicitZeroDataSubmission()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper = new ModelHelper(db.Model);
                var         scheme = helper.CreateScheme();

                var memberUpload = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload.ComplianceYear = 2000;
                var prod = helper.CreateProducerAsCompany(memberUpload, "PRN123", "B2B");

                var dataReturnVersionQ1 = helper.CreateDataReturnVersion(scheme, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionQ1, prod.RegisteredProducer, "B2B", 1, 0);

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                List <MissingProducerDataCsvData>      results           = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2B", 1, null);

                // Assert
                Assert.NotNull(results);

                Assert.Equal(0, results.Count);
            }
        }
        public async void DataProcessor_ReturnsOnlySpecifiedQuarter_WhenQuarterGiven()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper = new ModelHelper(db.Model);
                var         scheme = helper.CreateScheme();

                var memberUpload = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload.ComplianceYear = 2000;
                helper.CreateProducerAsCompany(memberUpload, "PRN123", "B2B");

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                var results = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2B", 2, null);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(1, results.Count);
                MissingProducerDataCsvData result = results[0];
                Assert.Equal(2, result.Quarter);
            }
        }
        public async void DataProcessor_ReturnsAllSchemes_WhenSchemeIdIsNull()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper  = new ModelHelper(db.Model);
                var         scheme1 = helper.CreateScheme();
                scheme1.SchemeName = "Scheme1";
                var scheme2 = helper.CreateScheme();
                scheme2.SchemeName = "Scheme2";

                var memberUploadS1 = helper.CreateSubmittedMemberUpload(scheme1);
                memberUploadS1.ComplianceYear = 2000;
                var prodS1         = helper.CreateProducerAsCompany(memberUploadS1, "PRN123", "B2B");
                var memberUploadS2 = helper.CreateSubmittedMemberUpload(scheme2);
                memberUploadS2.ComplianceYear = 2000;
                var prodS2 = helper.CreateProducerAsCompany(memberUploadS2, "PRN456", "B2B");

                // Set up data for S1 Q1/2/3 and S2 Q1/2/3 - Expect to see missing Q4 results for both schemes
                var dataReturnVersionS1Q1 = helper.CreateDataReturnVersion(scheme1, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionS1Q1, prodS1.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersionS1Q2 = helper.CreateDataReturnVersion(scheme1, 2000, 2);
                helper.CreateEeeOutputAmount(dataReturnVersionS1Q2, prodS1.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersionS1Q3 = helper.CreateDataReturnVersion(scheme1, 2000, 3);
                helper.CreateEeeOutputAmount(dataReturnVersionS1Q3, prodS1.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersionS2Q1 = helper.CreateDataReturnVersion(scheme2, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionS2Q1, prodS2.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersionS2Q2 = helper.CreateDataReturnVersion(scheme2, 2000, 2);
                helper.CreateEeeOutputAmount(dataReturnVersionS2Q2, prodS2.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersionS2Q3 = helper.CreateDataReturnVersion(scheme2, 2000, 3);
                helper.CreateEeeOutputAmount(dataReturnVersionS2Q3, prodS2.RegisteredProducer, "B2B", 1, 500);

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                var results = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2B", null, null);

                // Assert
                Assert.NotNull(results);

                Assert.Equal(2, results.Count);
                MissingProducerDataCsvData result1 = results[0];
                Assert.Equal("Scheme1", result1.SchemeName);
                Assert.Equal(4, result1.Quarter);
                MissingProducerDataCsvData result2 = results[1];
                Assert.Equal("Scheme2", result2.SchemeName);
                Assert.Equal(4, result2.Quarter);
            }
        }
        public async void DataProcessor_ReturnsOnlyQuartersForProducer_AssociatedWithCorrectProducer()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper = new ModelHelper(db.Model);
                var         scheme = helper.CreateScheme();
                scheme.ApprovalNumber = "WEE/TE0001ST/SCH";

                var memberUpload = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload.ComplianceYear = 2000;
                var prod1 = helper.CreateProducerAsCompany(memberUpload, "PRN123", "B2B");
                prod1.Business.Company.Name = "Prod1";
                var prod2 = helper.CreateProducerAsCompany(memberUpload, "PRN456", "B2B");
                prod2.Business.Company.Name = "Prod2";

                // Prod1 given data for Q1,2,3. Prod 2 given data for Q2,3,4
                var dataReturnVersionQ1 = helper.CreateDataReturnVersion(scheme, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionQ1, prod1.RegisteredProducer, "B2B", 1, 500); //Prod1, Q1
                var dataReturnVersionQ2 = helper.CreateDataReturnVersion(scheme, 2000, 2);
                helper.CreateEeeOutputAmount(dataReturnVersionQ2, prod1.RegisteredProducer, "B2B", 1, 500); //Prod1, Q2
                helper.CreateEeeOutputAmount(dataReturnVersionQ2, prod2.RegisteredProducer, "B2B", 1, 500); //Prod2, Q2
                var dataReturnVersionQ3 = helper.CreateDataReturnVersion(scheme, 2000, 3);
                helper.CreateEeeOutputAmount(dataReturnVersionQ3, prod1.RegisteredProducer, "B2B", 1, 500); //Prod1, Q3
                helper.CreateEeeOutputAmount(dataReturnVersionQ3, prod2.RegisteredProducer, "B2B", 1, 500); //Prod2, Q3
                var dataReturnVersionQ4 = helper.CreateDataReturnVersion(scheme, 2000, 4);
                helper.CreateEeeOutputAmount(dataReturnVersionQ4, prod2.RegisteredProducer, "B2B", 1, 500); //Prod2, Q4

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                var results = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2B", null, null);

                // Assert
                Assert.NotNull(results);

                Assert.Equal(2, results.Count);
                MissingProducerDataCsvData result1 = results[0];
                Assert.Equal("Prod1", result1.ProducerName);
                Assert.Equal(4, result1.Quarter);
                MissingProducerDataCsvData result2 = results[1];
                Assert.Equal("Prod2", result2.ProducerName);
                Assert.Equal(1, result2.Quarter);
            }
        }
        public async void DataProcessor_ReturnsOnlySpecifiedScheme_WhenSchemeIdGiven()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper  = new ModelHelper(db.Model);
                var         scheme1 = helper.CreateScheme();
                scheme1.SchemeName = "Scheme1";
                scheme1.Id         = new Guid("CFD9B56F-6C3C-4E49-825C-A125ACFFEC3B");
                var scheme2 = helper.CreateScheme();

                var memberUploadS1 = helper.CreateSubmittedMemberUpload(scheme1);
                memberUploadS1.ComplianceYear = 2000;
                var prodS1         = helper.CreateProducerAsCompany(memberUploadS1, "PRN123", "B2B");
                var memberUploadS2 = helper.CreateSubmittedMemberUpload(scheme2);
                memberUploadS2.ComplianceYear = 2000;
                var prodS2 = helper.CreateProducerAsCompany(memberUploadS2, "PRN456", "B2B");

                // Set up data for S1 Q1/2/3 and S2 Q1 - Expect to see missing Q4 result for scheme1 only
                var dataReturnVersionS1Q1 = helper.CreateDataReturnVersion(scheme1, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionS1Q1, prodS1.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersionS1Q2 = helper.CreateDataReturnVersion(scheme1, 2000, 2);
                helper.CreateEeeOutputAmount(dataReturnVersionS1Q2, prodS1.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersionS1Q3 = helper.CreateDataReturnVersion(scheme1, 2000, 3);
                helper.CreateEeeOutputAmount(dataReturnVersionS1Q3, prodS1.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersionS2Q1 = helper.CreateDataReturnVersion(scheme2, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionS2Q1, prodS2.RegisteredProducer, "B2B", 1, 500);

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                var results = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2B", null, scheme1.Id);

                // Assert
                Assert.NotNull(results);

                Assert.Equal(1, results.Count);
                MissingProducerDataCsvData result = results[0];
                Assert.Equal("Scheme1", result.SchemeName);
            }
        }
        public async void DataProcessor_ReturnsMissingDataOnlyForSpecifiedCompianceYear()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper = new ModelHelper(db.Model);
                var         scheme = helper.CreateScheme();

                var memberUpload_2000 = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload_2000.ComplianceYear = 2000;
                var prod_2000 = helper.CreateProducerAsCompany(memberUpload_2000, "PRN123", "B2B");

                var memberUpload_2001 = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload_2001.ComplianceYear = 2001;
                var prod_2001 = helper.CreateProducerAsCompany(memberUpload_2001, "PRN123", "B2B");

                // Set up data for 2000 Q1/2/3 and 2001 Q4 - Expect to see missing 2000 Q4 result only
                var dataReturnVersion2000Q1 = helper.CreateDataReturnVersion(scheme, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersion2000Q1, prod_2000.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersion2000Q2 = helper.CreateDataReturnVersion(scheme, 2000, 2);
                helper.CreateEeeOutputAmount(dataReturnVersion2000Q2, prod_2000.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersion2000Q3 = helper.CreateDataReturnVersion(scheme, 2000, 3);
                helper.CreateEeeOutputAmount(dataReturnVersion2000Q3, prod_2000.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersion2001Q2 = helper.CreateDataReturnVersion(scheme, 2001, 4);
                helper.CreateEeeOutputAmount(dataReturnVersion2001Q2, prod_2001.RegisteredProducer, "B2B", 2, 600);

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                var results = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2B", null, null);

                // Assert
                Assert.NotNull(results);

                Assert.Equal(1, results.Count);
                MissingProducerDataCsvData result = results[0];
                Assert.Equal(4, result.Quarter);
            }
        }
        public async void DataProcessor_DoesNotIncludeB2COnlyProducer_WhenB2BSpecified()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper = new ModelHelper(db.Model);
                var         scheme = helper.CreateScheme();

                var memberUpload = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload.ComplianceYear = 2000;
                helper.CreateProducerAsCompany(memberUpload, "PRN123", "B2C");

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                List <MissingProducerDataCsvData>      results           = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2B", 1, null);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(0, results.Count);
            }
        }
        public async void DataProcessor_ReturnsAllQuarters_WhenQuarterIsNull()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper = new ModelHelper(db.Model);
                var         scheme = helper.CreateScheme();
                scheme.SchemeName = "Scheme1";

                var memberUpload = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload.ComplianceYear = 2000;
                var prod1 = helper.CreateProducerAsCompany(memberUpload, "PRN123", "B2B");
                var prod2 = helper.CreateProducerAsCompany(memberUpload, "PRN456", "B2B");

                // Set up data for P1 Q1/2/3 and P2 Q4 - Expect 4 results, one for each quarter
                var dataReturnVersionQ1 = helper.CreateDataReturnVersion(scheme, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionQ1, prod1.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersionQ2 = helper.CreateDataReturnVersion(scheme, 2000, 2);
                helper.CreateEeeOutputAmount(dataReturnVersionQ2, prod1.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersionQ3 = helper.CreateDataReturnVersion(scheme, 2000, 3);
                helper.CreateEeeOutputAmount(dataReturnVersionQ3, prod1.RegisteredProducer, "B2B", 1, 500);
                var dataReturnVersionQ4 = helper.CreateDataReturnVersion(scheme, 2000, 4);
                helper.CreateEeeOutputAmount(dataReturnVersionQ4, prod2.RegisteredProducer, "B2B", 1, 500);

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                List <MissingProducerDataCsvData>      results           = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2B", null, null);

                // Assert
                Assert.NotNull(results);

                Assert.Equal(4, results.Count);
            }
        }
        public async void DataProcessor_ReturnsCorrectResultsInCorrectOrder()
        {
            using (var db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper  = new ModelHelper(db.Model);
                var         scheme1 = helper.CreateScheme();
                scheme1.SchemeName = "Scheme1";
                var scheme2 = helper.CreateScheme();
                scheme2.SchemeName = "Scheme2";

                var memberUploadS1 = helper.CreateSubmittedMemberUpload(scheme1);
                memberUploadS1.ComplianceYear = 2000;
                var prod2S1 = helper.CreateProducerAsCompany(memberUploadS1, "PRN123", "B2B");
                prod2S1.Business.Company.Name = "Prod2";
                var memberUploadS2 = helper.CreateSubmittedMemberUpload(scheme2);
                memberUploadS2.ComplianceYear = 2000;
                var prod3S2 = helper.CreateProducerAsCompany(memberUploadS2, "PRN456", "B2B");
                prod3S2.Business.Company.Name = "Prod3";
                var prod1S2 = helper.CreateProducerAsCompany(memberUploadS2, "PRN789", "B2B");
                prod1S2.Business.Company.Name = "Prod1";

                // Set up data for P1 Q1/2/3, P2 Q1/2, P3 Q1/2/3
                var dataReturnVersionS2Q1 = helper.CreateDataReturnVersion(scheme2, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionS2Q1, prod3S2.RegisteredProducer, "B2B", 1, 500);
                helper.CreateEeeOutputAmount(dataReturnVersionS2Q1, prod1S2.RegisteredProducer, "B2B", 4, 40);
                var dataReturnVersionS2Q3 = helper.CreateDataReturnVersion(scheme2, 2000, 3);
                helper.CreateEeeOutputAmount(dataReturnVersionS2Q3, prod3S2.RegisteredProducer, "B2B", 3, 321);
                helper.CreateEeeOutputAmount(dataReturnVersionS2Q3, prod1S2.RegisteredProducer, "B2B", 6, 420);
                var dataReturnVersionS2Q2 = helper.CreateDataReturnVersion(scheme2, 2000, 2);
                helper.CreateEeeOutputAmount(dataReturnVersionS2Q2, prod3S2.RegisteredProducer, "B2B", 9, 600);
                helper.CreateEeeOutputAmount(dataReturnVersionS2Q2, prod1S2.RegisteredProducer, "B2B", 12, 100);

                var dataReturnVersionS1Q1 = helper.CreateDataReturnVersion(scheme1, 2000, 1);
                helper.CreateEeeOutputAmount(dataReturnVersionS1Q1, prod2S1.RegisteredProducer, "B2B", 4, 0);
                var dataReturnVersionS1Q2 = helper.CreateDataReturnVersion(scheme1, 2000, 2);
                helper.CreateEeeOutputAmount(dataReturnVersionS1Q2, prod2S1.RegisteredProducer, "B2B", 9, 0);

                db.Model.SaveChanges();

                // Act
                GetMissingProducerDataCsvDataProcessor missingDataAccess = new GetMissingProducerDataCsvDataProcessor(db.WeeeContext);
                var results = await missingDataAccess.FetchMissingProducerDataAsync(2000, "B2B", null, null);

                // Assert
                Assert.NotNull(results);
                // ordered by scheme name, then producer name, then quarter
                Assert.Equal(4, results.Count);
                MissingProducerDataCsvData result1 = results[0];
                Assert.Equal("Scheme1", result1.SchemeName);
                Assert.Equal("Prod2", result1.ProducerName);
                Assert.Equal(3, result1.Quarter);
                MissingProducerDataCsvData result2 = results[1];
                Assert.Equal("Scheme1", result2.SchemeName);
                Assert.Equal("Prod2", result2.ProducerName);
                Assert.Equal(4, result2.Quarter);
                MissingProducerDataCsvData result3 = results[2];
                Assert.Equal("Scheme2", result3.SchemeName);
                Assert.Equal("Prod1", result3.ProducerName);
                Assert.Equal(4, result3.Quarter);
                MissingProducerDataCsvData result4 = results[3];
                Assert.Equal("Scheme2", result4.SchemeName);
                Assert.Equal("Prod3", result4.ProducerName);
                Assert.Equal(4, result4.Quarter);
            }
        }