public void CreateResults_WithProducerConsecutivelyRemovedInNetUploadsbutLatesOnAdded_ReturnsEeeDataHistoryWithOneBlankDataRowforProducer()
        {
            // Arrange
            IWeeeAuthorization authorization = new AuthorizationBuilder().AllowInternalAreaAccess().Build();
            var context          = A.Fake <WeeeContext>();
            var csvWriterFactory = A.Fake <CsvWriterFactory>();
            GetProducerEeeDataHistoryCsvHandler handler = new GetProducerEeeDataHistoryCsvHandler(
                authorization,
                context,
                csvWriterFactory);

            //first upload
            ProducerEeeHistoryCsvData results = new ProducerEeeHistoryCsvData();

            ProducerEeeHistoryCsvData.ProducerInReturnsResult upload1 = CreateEeeDataForProducer("WEE/MM0841AA", "WEE/FA0000KE/SCH", "Test Scheme", 2007, 1, new DateTime(2016, 1, 1), 100, "No");
            results.ProducerReturnsHistoryData.Add(upload1);

            //producer removed in second upload
            ProducerEeeHistoryCsvData.ProducerRemovedFromReturnsResult removedUpload = CreateRemovedProducerResults("WEE/FA0000KE/SCH", 2007, new DateTime(2016, 1, 2), 1);
            results.ProducerRemovedFromReturnsData.Add(removedUpload);

            //producer removed in third upload
            ProducerEeeHistoryCsvData.ProducerRemovedFromReturnsResult removedUpload1 = CreateRemovedProducerResults("WEE/FA0000KE/SCH", 2007, new DateTime(2016, 1, 3), 1);
            results.ProducerRemovedFromReturnsData.Add(removedUpload1);

            //In this upload producer added back again with same data as first upload
            ProducerEeeHistoryCsvData.ProducerInReturnsResult upload2 = CreateEeeDataForProducer("WEE/MM0841AA", "WEE/FA0000KE/SCH", "Test Scheme", 2007, 1, new DateTime(2016, 1, 4), 200, "Yes");
            results.ProducerReturnsHistoryData.Add(upload2);

            //Act
            IEnumerable <GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult> csvResults = new List <GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult>();

            csvResults = handler.CreateResults(results);

            //Assert
            Assert.NotNull(csvResults);
            Assert.Equal(3, csvResults.Count());
            Assert.Collection(csvResults,
                              (r1) => Assert.Equal(new DateTime(2016, 1, 4), r1.SubmittedDate),
                              (r2) => Assert.Equal(new DateTime(2016, 1, 2), r2.SubmittedDate),
                              (r3) => Assert.Equal(new DateTime(2016, 1, 1), r3.SubmittedDate));

            Assert.Collection(csvResults,
                              (r1) => Assert.Equal("Yes", r1.LatestData),
                              (r2) => Assert.Equal("No", r2.LatestData),
                              (r3) => Assert.Equal("No", r3.LatestData));

            Assert.Collection(csvResults,
                              (r1) => Assert.Equal(200, r1.Cat1B2B),
                              (r2) => Assert.Equal(null, r2.Cat1B2B),
                              (r3) => Assert.Equal(100, r3.Cat1B2B));
        }
        public async Task HandleAsync_ReturnsFileContent()
        {
            // Arrange
            IWeeeAuthorization authorization = new AuthorizationBuilder().AllowInternalAreaAccess().Build();
            var context = A.Fake<WeeeContext>();
            var csvWriterFactory = A.Fake<CsvWriterFactory>();
            GetProducerEeeDataHistoryCsvHandler handler = new GetProducerEeeDataHistoryCsvHandler(
                authorization,
                context,
                csvWriterFactory);

            GetProducerEeeDataHistoryCsv request = new GetProducerEeeDataHistoryCsv("PRN");
            // Act
            CSVFileData data = await handler.HandleAsync(request);

            // Assert
            Assert.NotEmpty(data.FileContent);
        }
        public async Task HandleAsync_ReturnsFileContent()
        {
            // Arrange
            IWeeeAuthorization authorization = new AuthorizationBuilder().AllowInternalAreaAccess().Build();
            var context          = A.Fake <WeeeContext>();
            var csvWriterFactory = A.Fake <CsvWriterFactory>();
            GetProducerEeeDataHistoryCsvHandler handler = new GetProducerEeeDataHistoryCsvHandler(
                authorization,
                context,
                csvWriterFactory);

            GetProducerEeeDataHistoryCsv request = new GetProducerEeeDataHistoryCsv("PRN");
            // Act
            CSVFileData data = await handler.HandleAsync(request);

            // Assert
            Assert.NotEmpty(data.FileContent);
        }
        public async Task HandleAsync_WithNoRegistrationNumber_ThrowsArgumentException()
        {
            // Arrange            
            IWeeeAuthorization authorization = new AuthorizationBuilder().AllowInternalAreaAccess().Build();
            var context = A.Fake<WeeeContext>();
            var csvWriterFactory = A.Fake<CsvWriterFactory>();
            GetProducerEeeDataHistoryCsvHandler handler = new GetProducerEeeDataHistoryCsvHandler(
                authorization,
                context,
                csvWriterFactory);

            GetProducerEeeDataHistoryCsv request = new GetProducerEeeDataHistoryCsv(string.Empty);

            // Act
            Func<Task<CSVFileData>> action = async () => await handler.HandleAsync(request);

            // Assert
            await Assert.ThrowsAsync<ArgumentException>(action);
        }
        public async Task HandleAsync_WithNonInternalUser_ThrowsSecurityException()
        {
            // Arrange            
            var authorization = new AuthorizationBuilder().DenyInternalAreaAccess().Build();
            var context = A.Fake<WeeeContext>();
            var csvWriterFactory = A.Fake<CsvWriterFactory>();
            GetProducerEeeDataHistoryCsvHandler handler = new GetProducerEeeDataHistoryCsvHandler(
                authorization,
                context,
                csvWriterFactory);

            GetProducerEeeDataHistoryCsv request = new GetProducerEeeDataHistoryCsv(A.Dummy<string>());

            // Act
            Func<Task> action = async () => await handler.HandleAsync(request);

            // Assert
            await Assert.ThrowsAsync<SecurityException>(action);
        }
        public async Task HandleAsync_WithNoRegistrationNumber_ThrowsArgumentException()
        {
            // Arrange
            IWeeeAuthorization authorization = new AuthorizationBuilder().AllowInternalAreaAccess().Build();
            var context          = A.Fake <WeeeContext>();
            var csvWriterFactory = A.Fake <CsvWriterFactory>();
            GetProducerEeeDataHistoryCsvHandler handler = new GetProducerEeeDataHistoryCsvHandler(
                authorization,
                context,
                csvWriterFactory);

            GetProducerEeeDataHistoryCsv request = new GetProducerEeeDataHistoryCsv(string.Empty);

            // Act
            Func <Task <CSVFileData> > action = async() => await handler.HandleAsync(request);

            // Assert
            await Assert.ThrowsAsync <ArgumentException>(action);
        }
        public async Task HandleAsync_WithNonInternalUser_ThrowsSecurityException()
        {
            // Arrange
            var authorization    = new AuthorizationBuilder().DenyInternalAreaAccess().Build();
            var context          = A.Fake <WeeeContext>();
            var csvWriterFactory = A.Fake <CsvWriterFactory>();
            GetProducerEeeDataHistoryCsvHandler handler = new GetProducerEeeDataHistoryCsvHandler(
                authorization,
                context,
                csvWriterFactory);

            GetProducerEeeDataHistoryCsv request = new GetProducerEeeDataHistoryCsv(A.Dummy <string>());

            // Act
            Func <Task> action = async() => await handler.HandleAsync(request);

            // Assert
            await Assert.ThrowsAsync <SecurityException>(action);
        }
        public void CreateResults_WithProducerRemovedAfterFirstUpload_ReturnsEeeDataHistorywithLatestAsBlankDataforProducer()
        {
            // Arrange
            IWeeeAuthorization authorization = new AuthorizationBuilder().AllowInternalAreaAccess().Build();
            var context          = A.Fake <WeeeContext>();
            var csvWriterFactory = A.Fake <CsvWriterFactory>();
            GetProducerEeeDataHistoryCsvHandler handler = new GetProducerEeeDataHistoryCsvHandler(
                authorization,
                context,
                csvWriterFactory);

            ProducerEeeHistoryCsvData results = new ProducerEeeHistoryCsvData();

            results.ProducerReturnsHistoryData.Add(CreateEeeDataForProducer("WEE/MM0841AA", "WEE/FA0000KE/SCH", "schemeB2B", 2007, 1, new DateTime(2016, 1, 1), 100, "Yes"));
            results.ProducerRemovedFromReturnsData.Add(CreateRemovedProducerResults("WEE/FA0000KE/SCH", 2007, new DateTime(2016, 1, 2), 1));

            //Act
            IEnumerable <GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult> csvResults = new List <GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult>();

            csvResults = handler.CreateResults(results);

            //Assert
            Assert.NotNull(csvResults);
            Assert.Equal(2, csvResults.Count());
            Assert.Collection(csvResults,
                              (r1) => Assert.Equal(new DateTime(2016, 1, 2), r1.SubmittedDate),
                              (r2) => Assert.Equal(new DateTime(2016, 1, 1), r2.SubmittedDate));

            Assert.Collection(csvResults,
                              (r1) => Assert.Equal("Yes", r1.LatestData),
                              (r2) => Assert.Equal("No", r2.LatestData));

            Assert.Collection(csvResults,
                              (r1) => Assert.Equal(null, r1.Cat1B2B),
                              (r2) => Assert.Equal(100, r2.Cat1B2B));
        }
        public async void CreateResults_EeeHistoryCsvResult_PopulatedWithCorrectValues()
        {
            var authorization = new AuthorizationBuilder().AllowInternalAreaAccess().Build();
            var csvWriterFactory = A.Fake<CsvWriterFactory>();

            const int complianceYear = 2995;
            const string prn = "WEE/AW0101AW";

            using (var database = new DatabaseWrapper())
            {
                // Arrange
                var helper = new ModelHelper(database.Model);

                var organisation = helper.CreateOrganisation();
                var scheme = helper.CreateScheme(organisation);
                var memberUpload = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload.ComplianceYear = complianceYear;

                var producer1 = helper.CreateProducerAsCompany(memberUpload, prn);

                var dataReturnVersion = helper.CreateDataReturnVersion(scheme, complianceYear, 1);

                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 1, (decimal)1.01);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 2, (decimal)1.02);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 3, (decimal)1.03);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 4, (decimal)1.04);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 5, (decimal)1.05);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 6, (decimal)1.06);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 7, (decimal)1.07);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 8, (decimal)1.08);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 9, (decimal)1.09);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 10, (decimal)1.10);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 11, (decimal)1.11);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 12, (decimal)1.12);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 13, (decimal)1.13);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 14, (decimal)1.14);

                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 1, (decimal)2.01);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 2, (decimal)2.02);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 3, (decimal)2.03);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 4, (decimal)2.04);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 5, (decimal)2.05);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 6, (decimal)2.06);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 7, (decimal)2.07);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 8, (decimal)2.08);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 9, (decimal)2.09);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 10, (decimal)2.10);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 11, (decimal)2.11);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 12, (decimal)2.12);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 13, (decimal)2.13);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 14, (decimal)2.14);

                database.Model.SaveChanges();

                // Act
                var dataAccess = new GetProducerEeeDataHistoryCsvHandler(authorization, database.WeeeContext, csvWriterFactory);
                var items = await database.WeeeContext.StoredProcedures.SpgProducerEeeHistoryCsvData(prn);
                IEnumerable<GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult> results = dataAccess.CreateResults(items);

                // Assert
                Assert.Single(results);
                using (IEnumerator<GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult> iterator = results.GetEnumerator())
                {
                    iterator.MoveNext();
                    GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult result = iterator.Current;

                    Assert.Equal(result.PRN, prn);
                    Assert.Equal(result.Quarter, 1);
                    Assert.Equal(result.ComplianceYear, complianceYear);

                    Assert.Equal(result.Cat1B2C, (decimal)1.01);
                    Assert.Equal(result.Cat2B2C, (decimal)1.02);
                    Assert.Equal(result.Cat3B2C, (decimal)1.03);
                    Assert.Equal(result.Cat4B2C, (decimal)1.04);
                    Assert.Equal(result.Cat5B2C, (decimal)1.05);
                    Assert.Equal(result.Cat6B2C, (decimal)1.06);
                    Assert.Equal(result.Cat7B2C, (decimal)1.07);
                    Assert.Equal(result.Cat8B2C, (decimal)1.08);
                    Assert.Equal(result.Cat9B2C, (decimal)1.09);
                    Assert.Equal(result.Cat10B2C, (decimal)1.10);
                    Assert.Equal(result.Cat11B2C, (decimal)1.11);
                    Assert.Equal(result.Cat12B2C, (decimal)1.12);
                    Assert.Equal(result.Cat13B2C, (decimal)1.13);
                    Assert.Equal(result.Cat14B2C, (decimal)1.14);

                    Assert.Equal(result.Cat1B2B, (decimal)2.01);
                    Assert.Equal(result.Cat2B2B, (decimal)2.02);
                    Assert.Equal(result.Cat3B2B, (decimal)2.03);
                    Assert.Equal(result.Cat4B2B, (decimal)2.04);
                    Assert.Equal(result.Cat5B2B, (decimal)2.05);
                    Assert.Equal(result.Cat6B2B, (decimal)2.06);
                    Assert.Equal(result.Cat7B2B, (decimal)2.07);
                    Assert.Equal(result.Cat8B2B, (decimal)2.08);
                    Assert.Equal(result.Cat9B2B, (decimal)2.09);
                    Assert.Equal(result.Cat10B2B, (decimal)2.10);
                    Assert.Equal(result.Cat11B2B, (decimal)2.11);
                    Assert.Equal(result.Cat12B2B, (decimal)2.12);
                    Assert.Equal(result.Cat13B2B, (decimal)2.13);
                    Assert.Equal(result.Cat14B2B, (decimal)2.14);
                }
            }
        }
        public async void CreateResults_EeeHistoryCsvResult_PopulatedWithCorrectValues()
        {
            var authorization    = new AuthorizationBuilder().AllowInternalAreaAccess().Build();
            var csvWriterFactory = A.Fake <CsvWriterFactory>();

            const int    complianceYear = 2995;
            const string prn            = "WEE/AW0101AW";

            using (var database = new DatabaseWrapper())
            {
                // Arrange
                var helper = new ModelHelper(database.Model);

                var organisation = helper.CreateOrganisation();
                var scheme       = helper.CreateScheme(organisation);
                var memberUpload = helper.CreateSubmittedMemberUpload(scheme);
                memberUpload.ComplianceYear = complianceYear;

                var producer1 = helper.CreateProducerAsCompany(memberUpload, prn);

                var dataReturnVersion = helper.CreateDataReturnVersion(scheme, complianceYear, 1);

                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 1, (decimal)1.01);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 2, (decimal)1.02);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 3, (decimal)1.03);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 4, (decimal)1.04);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 5, (decimal)1.05);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 6, (decimal)1.06);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 7, (decimal)1.07);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 8, (decimal)1.08);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 9, (decimal)1.09);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 10, (decimal)1.10);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 11, (decimal)1.11);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 12, (decimal)1.12);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 13, (decimal)1.13);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2C", 14, (decimal)1.14);

                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 1, (decimal)2.01);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 2, (decimal)2.02);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 3, (decimal)2.03);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 4, (decimal)2.04);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 5, (decimal)2.05);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 6, (decimal)2.06);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 7, (decimal)2.07);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 8, (decimal)2.08);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 9, (decimal)2.09);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 10, (decimal)2.10);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 11, (decimal)2.11);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 12, (decimal)2.12);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 13, (decimal)2.13);
                helper.CreateEeeOutputAmount(dataReturnVersion, producer1.RegisteredProducer, "B2B", 14, (decimal)2.14);

                database.Model.SaveChanges();

                // Act
                var dataAccess = new GetProducerEeeDataHistoryCsvHandler(authorization, database.WeeeContext, csvWriterFactory);
                var items      = await database.WeeeContext.StoredProcedures.SpgProducerEeeHistoryCsvData(prn);

                IEnumerable <GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult> results = dataAccess.CreateResults(items);

                // Assert
                Assert.Single(results);
                using (IEnumerator <GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult> iterator = results.GetEnumerator())
                {
                    iterator.MoveNext();
                    GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult result = iterator.Current;

                    Assert.Equal(result.PRN, prn);
                    Assert.Equal(result.Quarter, 1);
                    Assert.Equal(result.ComplianceYear, complianceYear);

                    Assert.Equal(result.Cat1B2C, (decimal)1.01);
                    Assert.Equal(result.Cat2B2C, (decimal)1.02);
                    Assert.Equal(result.Cat3B2C, (decimal)1.03);
                    Assert.Equal(result.Cat4B2C, (decimal)1.04);
                    Assert.Equal(result.Cat5B2C, (decimal)1.05);
                    Assert.Equal(result.Cat6B2C, (decimal)1.06);
                    Assert.Equal(result.Cat7B2C, (decimal)1.07);
                    Assert.Equal(result.Cat8B2C, (decimal)1.08);
                    Assert.Equal(result.Cat9B2C, (decimal)1.09);
                    Assert.Equal(result.Cat10B2C, (decimal)1.10);
                    Assert.Equal(result.Cat11B2C, (decimal)1.11);
                    Assert.Equal(result.Cat12B2C, (decimal)1.12);
                    Assert.Equal(result.Cat13B2C, (decimal)1.13);
                    Assert.Equal(result.Cat14B2C, (decimal)1.14);

                    Assert.Equal(result.Cat1B2B, (decimal)2.01);
                    Assert.Equal(result.Cat2B2B, (decimal)2.02);
                    Assert.Equal(result.Cat3B2B, (decimal)2.03);
                    Assert.Equal(result.Cat4B2B, (decimal)2.04);
                    Assert.Equal(result.Cat5B2B, (decimal)2.05);
                    Assert.Equal(result.Cat6B2B, (decimal)2.06);
                    Assert.Equal(result.Cat7B2B, (decimal)2.07);
                    Assert.Equal(result.Cat8B2B, (decimal)2.08);
                    Assert.Equal(result.Cat9B2B, (decimal)2.09);
                    Assert.Equal(result.Cat10B2B, (decimal)2.10);
                    Assert.Equal(result.Cat11B2B, (decimal)2.11);
                    Assert.Equal(result.Cat12B2B, (decimal)2.12);
                    Assert.Equal(result.Cat13B2B, (decimal)2.13);
                    Assert.Equal(result.Cat14B2B, (decimal)2.14);
                }
            }
        }
        public void CreateResults_WithProducerRemovedAfterFirstUpload_ReturnsEeeDataHistorywithLatestAsBlankDataforProducer()
        {
            // Arrange
            IWeeeAuthorization authorization = new AuthorizationBuilder().AllowInternalAreaAccess().Build();
            var context = A.Fake<WeeeContext>();
            var csvWriterFactory = A.Fake<CsvWriterFactory>();
            GetProducerEeeDataHistoryCsvHandler handler = new GetProducerEeeDataHistoryCsvHandler(
                authorization,
                context,
                csvWriterFactory);

            ProducerEeeHistoryCsvData results = new ProducerEeeHistoryCsvData();
            results.ProducerReturnsHistoryData.Add(CreateEeeDataForProducer("WEE/MM0841AA", "WEE/FA0000KE/SCH", "schemeB2B", 2007, 1, new DateTime(2016, 1, 1), 100, "Yes"));
            results.ProducerRemovedFromReturnsData.Add(CreateRemovedProducerResults("WEE/FA0000KE/SCH", 2007, new DateTime(2016, 1, 2), 1));

            //Act
            IEnumerable<GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult> csvResults = new List<GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult>();
            csvResults = handler.CreateResults(results);

            //Assert
            Assert.NotNull(csvResults);
            Assert.Equal(2, csvResults.Count());
            Assert.Collection(csvResults,
               (r1) => Assert.Equal(new DateTime(2016, 1, 2), r1.SubmittedDate),
               (r2) => Assert.Equal(new DateTime(2016, 1, 1), r2.SubmittedDate));

            Assert.Collection(csvResults,
               (r1) => Assert.Equal("Yes", r1.LatestData),
               (r2) => Assert.Equal("No", r2.LatestData));

            Assert.Collection(csvResults,
              (r1) => Assert.Equal(null, r1.Cat1B2B),
              (r2) => Assert.Equal(100, r2.Cat1B2B));
        }
        public void CreateResults_WithProducerConsecutivelyRemovedInNetUploadsbutLatesOnAdded_ReturnsEeeDataHistoryWithOneBlankDataRowforProducer()
        {
            // Arrange
            IWeeeAuthorization authorization = new AuthorizationBuilder().AllowInternalAreaAccess().Build();
            var context = A.Fake<WeeeContext>();
            var csvWriterFactory = A.Fake<CsvWriterFactory>();
            GetProducerEeeDataHistoryCsvHandler handler = new GetProducerEeeDataHistoryCsvHandler(
                authorization,
                context,
                csvWriterFactory);

            //first upload
            ProducerEeeHistoryCsvData results = new ProducerEeeHistoryCsvData();
            ProducerEeeHistoryCsvData.ProducerInReturnsResult upload1 = CreateEeeDataForProducer("WEE/MM0841AA", "WEE/FA0000KE/SCH", "Test Scheme", 2007, 1, new DateTime(2016, 1, 1), 100, "No");
            results.ProducerReturnsHistoryData.Add(upload1);

            //producer removed in second upload
            ProducerEeeHistoryCsvData.ProducerRemovedFromReturnsResult removedUpload = CreateRemovedProducerResults("WEE/FA0000KE/SCH", 2007, new DateTime(2016, 1, 2), 1);
            results.ProducerRemovedFromReturnsData.Add(removedUpload);

            //producer removed in third upload
            ProducerEeeHistoryCsvData.ProducerRemovedFromReturnsResult removedUpload1 = CreateRemovedProducerResults("WEE/FA0000KE/SCH", 2007, new DateTime(2016, 1, 3), 1);
            results.ProducerRemovedFromReturnsData.Add(removedUpload1);

            //In this upload producer added back again with same data as first upload
            ProducerEeeHistoryCsvData.ProducerInReturnsResult upload2 = CreateEeeDataForProducer("WEE/MM0841AA", "WEE/FA0000KE/SCH", "Test Scheme", 2007, 1, new DateTime(2016, 1, 4), 200, "Yes");
            results.ProducerReturnsHistoryData.Add(upload2);

            //Act
            IEnumerable<GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult> csvResults = new List<GetProducerEeeDataHistoryCsvHandler.EeeHistoryCsvResult>();
            csvResults = handler.CreateResults(results);

            //Assert
            Assert.NotNull(csvResults);
            Assert.Equal(3, csvResults.Count());
            Assert.Collection(csvResults,
               (r1) => Assert.Equal(new DateTime(2016, 1, 4), r1.SubmittedDate),
               (r2) => Assert.Equal(new DateTime(2016, 1, 2), r2.SubmittedDate),
               (r3) => Assert.Equal(new DateTime(2016, 1, 1), r3.SubmittedDate));

            Assert.Collection(csvResults,
               (r1) => Assert.Equal("Yes", r1.LatestData),
               (r2) => Assert.Equal("No", r2.LatestData),
               (r3) => Assert.Equal("No", r3.LatestData));

            Assert.Collection(csvResults,
              (r1) => Assert.Equal(200, r1.Cat1B2B),
              (r2) => Assert.Equal(null, r2.Cat1B2B),
              (r3) => Assert.Equal(100, r3.Cat1B2B));
        }