public void CreateResults_WithNoDeliveredAmounts_PopulatesTotalAsNull()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult
            {
                SchemeId = Guid.NewGuid()
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy <IStoredProcedures>(),
                A.Dummy <IWeeeAuthorization>(),
                A.Dummy <CsvWriterFactory>());

            // Act
            IEnumerable <GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                new List <string>()
            {
                "AATF1"
            },
                new List <string>()
            {
                "AE1"
            });

            // Assert
            GetSchemeWeeeCsvHandler.CsvResult result1 = results.First();
            Assert.Equal(null, result1.TotalDelivered);
        }
        public void CreateResults_WithCollectedAmountWithSourceType2_PopulatesFinalHoldersWithValue()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeId = new Guid("3E299215-BA37-403F-B398-EB345371F3D2")
            });

            data.CollectedAmounts.Add(new SpgSchemeWeeeCsvResult.CollectedAmountResult()
            {
                SchemeId     = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                QuarterType  = 1,
                WeeeCategory = 1,
                SourceType   = 2,
                Tonnage      = 123.456m
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy <IStoredProcedures>(),
                A.Dummy <IWeeeAuthorization>(),
                A.Dummy <CsvWriterFactory>());

            // Act
            IEnumerable <GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                A.Dummy <IEnumerable <string> >(),
                A.Dummy <IEnumerable <string> >());

            // Assert
            GetSchemeWeeeCsvHandler.CsvResult result1 = results.First();
            Assert.Equal(123.456m, result1.FinalHolders);
        }
        public void CreateResults_WithNoCollectedAmounts_PopulatesFinalHoldersAsNull()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult
            {
                SchemeId = Guid.NewGuid()
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy <IStoredProcedures>(),
                A.Dummy <IWeeeAuthorization>(),
                A.Dummy <CsvWriterFactory>());

            // Act
            IEnumerable <GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                A.Dummy <IEnumerable <string> >(),
                A.Dummy <IEnumerable <string> >());

            // Assert
            GetSchemeWeeeCsvHandler.CsvResult result1 = results.First();
            Assert.Equal(null, result1.FinalHolders);
        }
        public void CreateResults_WithDeliveredAmountForLocationType1_PopulatesAeAmountAndTotal()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeId = new Guid("3E299215-BA37-403F-B398-EB345371F3D2")
            });

            data.DeliveredAmounts.Add(new SpgSchemeWeeeCsvResult.DeliveredAmountResult()
            {
                SchemeId               = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                QuarterType            = 1,
                WeeeCategory           = 1,
                LocationType           = 1,
                LocationApprovalNumber = "AE1",
                Tonnage = 123.456m
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy <IStoredProcedures>(),
                A.Dummy <IWeeeAuthorization>(),
                A.Dummy <CsvWriterFactory>());

            // Act
            IEnumerable <GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                new List <string>()
            {
                "AATF1"
            },
                new List <string>()
            {
                "AE1"
            });

            // Assert
            GetSchemeWeeeCsvHandler.CsvResult result1 = results.First();
            Assert.Equal(123.456m, result1.AeTonnage["AE1"]);
            Assert.Equal(123.456m, result1.TotalDelivered);
        }
        public void CreateResults_WithOneScheme_CreatesAResultForEachCategoryAndEachQuarter()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult
            {
                SchemeId = Guid.NewGuid()
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy <IStoredProcedures>(),
                A.Dummy <IWeeeAuthorization>(),
                A.Dummy <CsvWriterFactory>());

            // Act
            IEnumerable <GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                A.Dummy <IEnumerable <string> >(),
                A.Dummy <IEnumerable <string> >());

            // Assert
            Assert.Equal(56, results.Count());
            Assert.Collection(results.Take(15), // Just examine the first 15 rows
                              r => { Assert.Equal(1, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(2, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(3, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(4, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(5, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(6, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(7, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(8, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(9, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(10, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(11, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(12, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(13, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(14, r.Category); Assert.Equal(1, r.QuarterType); },
                              r => { Assert.Equal(1, r.Category); Assert.Equal(2, r.QuarterType); });
            // etc...
        }
        public void CreateResults_WithMultipleSchemes_OrdersSchemesBySchemeName()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeName = "Scheme B",
                SchemeId   = Guid.NewGuid()
            });

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeName = "Scheme A",
                SchemeId   = Guid.NewGuid()
            });

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeName = "Scheme C",
                SchemeId   = Guid.NewGuid()
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy <IStoredProcedures>(),
                A.Dummy <IWeeeAuthorization>(),
                A.Dummy <CsvWriterFactory>());

            // Act
            IEnumerable <GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                A.Dummy <IEnumerable <string> >(),
                A.Dummy <IEnumerable <string> >());

            // Assert
            GetSchemeWeeeCsvHandler.CsvResult result1 = results.First();
            Assert.Equal("Scheme A", result1.SchemeName);
        }
        public void CreateResults_WithMultipleSchemes_OrdersSchemesBySchemeName()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeName = "Scheme B",
                SchemeId = Guid.NewGuid()
            });

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeName = "Scheme A",
                SchemeId = Guid.NewGuid()
            });

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeName = "Scheme C",
                SchemeId = Guid.NewGuid()
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy<IStoredProcedures>(),
                A.Dummy<IWeeeAuthorization>(),
                A.Dummy<CsvWriterFactory>());

            // Act
            IEnumerable<GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                A.Dummy<IEnumerable<string>>(),
                A.Dummy<IEnumerable<string>>());

            // Assert
            GetSchemeWeeeCsvHandler.CsvResult result1 = results.First();
            Assert.Equal("Scheme A", result1.SchemeName);
        }
        public void CreateResults_WithDeliveredAmountsForVariousSchemesCategoriesAndQuarters_SumsAmountsAndPopulatesTotals()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeId = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                SchemeName = "Scheme 1"
            });

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeId = new Guid("9E1EE29C-5FFD-4137-BA55-98C0F0F7212D"),
                SchemeName = "Scheme 2"
            });

            data.DeliveredAmounts.Add(new SpgSchemeWeeeCsvResult.DeliveredAmountResult()
            {
                SchemeId = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                QuarterType = 1,
                WeeeCategory = 1,
                LocationType = 0,
                LocationApprovalNumber = "AATF1",
                Tonnage = 1
            });

            data.DeliveredAmounts.Add(new SpgSchemeWeeeCsvResult.DeliveredAmountResult()
            {
                SchemeId = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                QuarterType = 1,
                WeeeCategory = 1,
                LocationType = 1,
                LocationApprovalNumber = "AE1",
                Tonnage = 2
            });

            data.DeliveredAmounts.Add(new SpgSchemeWeeeCsvResult.DeliveredAmountResult()
            {
                SchemeId = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                QuarterType = 4,
                WeeeCategory = 1,
                LocationType = 1,
                LocationApprovalNumber = "AE1",
                Tonnage = 9999
            });

            data.DeliveredAmounts.Add(new SpgSchemeWeeeCsvResult.DeliveredAmountResult()
            {
                SchemeId = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                QuarterType = 1,
                WeeeCategory = 14,
                LocationType = 1,
                LocationApprovalNumber = "AE1",
                Tonnage = 9999
            });

            data.DeliveredAmounts.Add(new SpgSchemeWeeeCsvResult.DeliveredAmountResult()
            {
                SchemeId = new Guid("9E1EE29C-5FFD-4137-BA55-98C0F0F7212D"),
                QuarterType = 1,
                WeeeCategory = 1,
                LocationType = 1,
                LocationApprovalNumber = "AE1",
                Tonnage = 9999
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy<IStoredProcedures>(),
                A.Dummy<IWeeeAuthorization>(),
                A.Dummy<CsvWriterFactory>());

            // Act
            IEnumerable<GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                new List<string>() { "AATF1" },
                new List<string>() { "AE1" });

            // Assert
            GetSchemeWeeeCsvHandler.CsvResult result1 = results.First();
            Assert.Equal(3, result1.TotalDelivered);
        }
        public void CreateResults_WithDeliveredAmountForLocationType1_PopulatesAeAmountAndTotal()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeId = new Guid("3E299215-BA37-403F-B398-EB345371F3D2")
            });

            data.DeliveredAmounts.Add(new SpgSchemeWeeeCsvResult.DeliveredAmountResult()
            {
                SchemeId = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                QuarterType = 1,
                WeeeCategory = 1,
                LocationType = 1,
                LocationApprovalNumber = "AE1",
                Tonnage = 123.456m
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy<IStoredProcedures>(),
                A.Dummy<IWeeeAuthorization>(),
                A.Dummy<CsvWriterFactory>());

            // Act
            IEnumerable<GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                new List<string>() { "AATF1" },
                new List<string>() { "AE1" });

            // Assert
            GetSchemeWeeeCsvHandler.CsvResult result1 = results.First();
            Assert.Equal(123.456m, result1.AeTonnage["AE1"]);
            Assert.Equal(123.456m, result1.TotalDelivered);
        }
        public void CreateResults_WithNoDeliveredAmounts_PopulatesTotalAsNull()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();
            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult
            {
                SchemeId = Guid.NewGuid()
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy<IStoredProcedures>(),
                A.Dummy<IWeeeAuthorization>(),
                A.Dummy<CsvWriterFactory>());

            // Act
            IEnumerable<GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                new List<string>() { "AATF1" },
                new List<string>() { "AE1" });

            // Assert
            GetSchemeWeeeCsvHandler.CsvResult result1 = results.First();
            Assert.Equal(null, result1.TotalDelivered);
        }
        public void CreateResults_WithCollectedAmountWithSourceType2_PopulatesFinalHoldersWithValue()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeId = new Guid("3E299215-BA37-403F-B398-EB345371F3D2")
            });

            data.CollectedAmounts.Add(new SpgSchemeWeeeCsvResult.CollectedAmountResult()
            {
                SchemeId = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                QuarterType = 1,
                WeeeCategory = 1,
                SourceType = 2,
                Tonnage = 123.456m
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy<IStoredProcedures>(),
                A.Dummy<IWeeeAuthorization>(),
                A.Dummy<CsvWriterFactory>());

            // Act
            IEnumerable<GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                A.Dummy<IEnumerable<string>>(),
                A.Dummy<IEnumerable<string>>());

            // Assert
            GetSchemeWeeeCsvHandler.CsvResult result1 = results.First();
            Assert.Equal(123.456m, result1.FinalHolders);
        }
        public void CreateResults_WithNoCollectedAmounts_PopulatesFinalHoldersAsNull()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();
            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult
            {
                SchemeId = Guid.NewGuid()
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy<IStoredProcedures>(),
                A.Dummy<IWeeeAuthorization>(),
                A.Dummy<CsvWriterFactory>());

            // Act
            IEnumerable<GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                A.Dummy<IEnumerable<string>>(),
                A.Dummy<IEnumerable<string>>());

            // Assert
            GetSchemeWeeeCsvHandler.CsvResult result1 = results.First();
            Assert.Equal(null, result1.FinalHolders);
        }
        public void CreateResults_WithOneScheme_CreatesAResultForEachCategoryAndEachQuarter()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();
            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult
            {
                SchemeId = Guid.NewGuid()
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy<IStoredProcedures>(),
                A.Dummy<IWeeeAuthorization>(),
                A.Dummy<CsvWriterFactory>());

            // Act
            IEnumerable<GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                A.Dummy<IEnumerable<string>>(),
                A.Dummy<IEnumerable<string>>());

            // Assert
            Assert.Equal(56, results.Count());
            Assert.Collection(results.Take(15), // Just examine the first 15 rows
                r => { Assert.Equal(1, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(2, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(3, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(4, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(5, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(6, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(7, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(8, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(9, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(10, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(11, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(12, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(13, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(14, r.Category); Assert.Equal(1, r.QuarterType); },
                r => { Assert.Equal(1, r.Category); Assert.Equal(2, r.QuarterType); });
            // etc...
        }
        public void CreateResults_WithDeliveredAmountsForVariousSchemesCategoriesAndQuarters_SumsAmountsAndPopulatesTotals()
        {
            // Arrange
            SpgSchemeWeeeCsvResult data = new SpgSchemeWeeeCsvResult();

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeId   = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                SchemeName = "Scheme 1"
            });

            data.Schemes.Add(new SpgSchemeWeeeCsvResult.SchemeResult()
            {
                SchemeId   = new Guid("9E1EE29C-5FFD-4137-BA55-98C0F0F7212D"),
                SchemeName = "Scheme 2"
            });

            data.DeliveredAmounts.Add(new SpgSchemeWeeeCsvResult.DeliveredAmountResult()
            {
                SchemeId               = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                QuarterType            = 1,
                WeeeCategory           = 1,
                LocationType           = 0,
                LocationApprovalNumber = "AATF1",
                Tonnage = 1
            });

            data.DeliveredAmounts.Add(new SpgSchemeWeeeCsvResult.DeliveredAmountResult()
            {
                SchemeId               = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                QuarterType            = 1,
                WeeeCategory           = 1,
                LocationType           = 1,
                LocationApprovalNumber = "AE1",
                Tonnage = 2
            });

            data.DeliveredAmounts.Add(new SpgSchemeWeeeCsvResult.DeliveredAmountResult()
            {
                SchemeId               = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                QuarterType            = 4,
                WeeeCategory           = 1,
                LocationType           = 1,
                LocationApprovalNumber = "AE1",
                Tonnage = 9999
            });

            data.DeliveredAmounts.Add(new SpgSchemeWeeeCsvResult.DeliveredAmountResult()
            {
                SchemeId               = new Guid("3E299215-BA37-403F-B398-EB345371F3D2"),
                QuarterType            = 1,
                WeeeCategory           = 14,
                LocationType           = 1,
                LocationApprovalNumber = "AE1",
                Tonnage = 9999
            });

            data.DeliveredAmounts.Add(new SpgSchemeWeeeCsvResult.DeliveredAmountResult()
            {
                SchemeId               = new Guid("9E1EE29C-5FFD-4137-BA55-98C0F0F7212D"),
                QuarterType            = 1,
                WeeeCategory           = 1,
                LocationType           = 1,
                LocationApprovalNumber = "AE1",
                Tonnage = 9999
            });

            GetSchemeWeeeCsvHandler handler = new GetSchemeWeeeCsvHandler(
                A.Dummy <IStoredProcedures>(),
                A.Dummy <IWeeeAuthorization>(),
                A.Dummy <CsvWriterFactory>());

            // Act
            IEnumerable <GetSchemeWeeeCsvHandler.CsvResult> results = handler.CreateResults(
                data,
                new List <string>()
            {
                "AATF1"
            },
                new List <string>()
            {
                "AE1"
            });

            // Assert
            GetSchemeWeeeCsvHandler.CsvResult result1 = results.First();
            Assert.Equal(3, result1.TotalDelivered);
        }