public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithAllExistingEeeOutputAmounts_ReturnsDataReturnVersionWithExistingEeeOutputReturnVersion()
        {
            var registeredProducer = A.Fake <RegisteredProducer>();

            A.CallTo(() => registeredProducer.Equals(A <RegisteredProducer> ._))
            .Returns(true);

            var eeeOutputReturnVersion = new EeeOutputReturnVersion();

            eeeOutputReturnVersion.AddEeeOutputAmount(
                new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100, registeredProducer));

            var dataReturn        = new DataReturn(A.Dummy <Scheme>(), A.Dummy <Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy <WeeeCollectedReturnVersion>(),
                                                          A.Dummy <WeeeDeliveredReturnVersion>(), eeeOutputReturnVersion);

            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
            .Returns(dataReturn);

            A.CallTo(() => helper.DataAccess.GetRegisteredProducer(A <string> ._))
            .Returns(registeredProducer);

            var builder = helper.Create();
            await builder.AddEeeOutputAmount("PRN", "ProducerName", WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.Same(eeeOutputReturnVersion, result.DataReturnVersion.EeeOutputReturnVersion);
        }
示例#2
0
        public async Task SpgProducerEeeDataHistoryCsvTests_EEEDataHistory_OmitsDataReturnsNotChanged()
        {
            using (DatabaseWrapper db = new DatabaseWrapper())
            {
                //Arrange
                ModelHelper helper  = new ModelHelper(db.Model);
                var         scheme1 = helper.CreateScheme();
                scheme1.ApprovalNumber = "WEE/TE3334ST/SCH";
                var memberUpload1 = helper.CreateSubmittedMemberUpload(scheme1);
                memberUpload1.ComplianceYear = 2000;

                var producer1 = helper.CreateProducerAsCompany(memberUpload1, "PRN897");
                producer1.ObligationType = "B2B";

                // Create a submission
                EeeOutputAmount eeeOutputAmount1 =
                    helper.CreateEeeOutputAmount(producer1.RegisteredProducer, "B2B", 1, 100);
                EeeOutputReturnVersion eeeOutputReturnVersion1 = helper.CreateEeeOutputReturnVersion();
                helper.AddEeeOutputAmount(eeeOutputReturnVersion1, eeeOutputAmount1);

                var dataReturnVersion1 = helper.CreateDataReturnVersion(scheme1, 2000, 1);
                dataReturnVersion1.SubmittedDate = new DateTime(2015, 1, 1);

                dataReturnVersion1.EeeOutputReturnVersion = eeeOutputReturnVersion1;

                // Create two additional submissions, both having the same data
                // but are different from the first
                EeeOutputAmount eeeOutputAmount2 =
                    helper.CreateEeeOutputAmount(producer1.RegisteredProducer, "B2B", 1, 200);
                EeeOutputReturnVersion eeeOutputReturnVersion2 = helper.CreateEeeOutputReturnVersion();
                helper.AddEeeOutputAmount(eeeOutputReturnVersion2, eeeOutputAmount2);

                var dataReturnVersion2 = helper.CreateDataReturnVersion(scheme1, 2000, 1);
                dataReturnVersion2.SubmittedDate = new DateTime(2015, 1, 2);

                var dataReturnVersion3 = helper.CreateDataReturnVersion(scheme1, 2000, 1);
                dataReturnVersion3.SubmittedDate = new DateTime(2015, 1, 3);

                dataReturnVersion2.EeeOutputReturnVersion = eeeOutputReturnVersion2;
                dataReturnVersion3.EeeOutputReturnVersion = eeeOutputReturnVersion2;

                db.Model.SaveChanges();

                // Act
                var results = await db.StoredProcedures.SpgProducerEeeHistoryCsvData("PRN897");

                //Assert
                Assert.NotNull(results);
                //Only shows entries for tonnage value changes and ignores the ones with no change.
                Assert.Equal(2, results.ProducerReturnsHistoryData.Count);

                Assert.Collection(results.ProducerReturnsHistoryData,
                                  (r1) => Assert.Equal(new DateTime(2015, 1, 1), r1.SubmittedDate),
                                  (r2) => Assert.Equal(new DateTime(2015, 1, 2), r2.SubmittedDate));

                Assert.Collection(results.ProducerReturnsHistoryData,
                                  (r1) => Assert.Equal("No", r1.LatestData),
                                  (r2) => Assert.Equal("Yes", r2.LatestData));
            }
        }
        public void AddDataReturnVersion_WithDataReturnVersionForAnotherScheme_ThrowsInvalidOperationException()
        {
            // Arrange
            var scheme1 = A.Fake <Scheme>();

            A.CallTo(() => scheme1.ApprovalNumber)
            .Returns("WEE/SC1000SCH");

            var scheme2 = A.Fake <Scheme>();

            A.CallTo(() => scheme2.ApprovalNumber)
            .Returns("WEE/SC2000SCH");

            var eeeOutputReturnVersion = new EeeOutputReturnVersion();

            var registeredProducer = new RegisteredProducer("PRN", 2016, scheme2);

            eeeOutputReturnVersion.AddEeeOutputAmount(
                new EeeOutputAmount(ObligationType.B2C, WeeeCategory.AutomaticDispensers, 100, registeredProducer));

            var dataReturn        = new DataReturn(scheme1, new Quarter(2016, QuarterType.Q2));
            var dataReturnVersion = new DataReturnVersion(dataReturn);

            // Act, Assert
            Assert.Throws <InvalidOperationException>(() => eeeOutputReturnVersion.AddDataReturnVersion(dataReturnVersion));
        }
        public void AddEeeOutputAmount_WithNullParameter_ThrowsArgumentNullException()
        {
            // Arrange
            var eeeOutputReturnVersion = new EeeOutputReturnVersion();

            // Act, Assert
            Assert.Throws <ArgumentNullException>(() => eeeOutputReturnVersion.AddEeeOutputAmount(null));
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithSomeExistingEeeOutputAmounts_ReturnsDataReturnVersionWithExistingEeeOutputAmounts()
        {
            var registeredProducer1 = A.Fake <RegisteredProducer>();

            A.CallTo(() => registeredProducer1.ProducerRegistrationNumber)
            .Returns("Producer1");
            A.CallTo(() => registeredProducer1.Equals(A <RegisteredProducer> ._))
            .Returns(true);

            var registeredProducer2 = A.Fake <RegisteredProducer>();

            A.CallTo(() => registeredProducer2.ProducerRegistrationNumber)
            .Returns("Producer2");
            A.CallTo(() => registeredProducer2.Equals(A <RegisteredProducer> ._))
            .Returns(true);

            var eeeOutputAmount1 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100, registeredProducer1);
            var eeeOutputAmount2 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.MedicalDevices, 200, registeredProducer1);
            var eeeOutputAmount3 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ToysLeisureAndSports, 100, registeredProducer2);
            var eeeOutputAmount4 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 150, registeredProducer2);

            var eeeOutputReturnVersion = new EeeOutputReturnVersion();

            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount1);
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount2);
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount3);
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount4);

            var dataReturn        = new DataReturn(A.Dummy <Scheme>(), A.Dummy <Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy <WeeeCollectedReturnVersion>(),
                                                          A.Dummy <WeeeDeliveredReturnVersion>(), eeeOutputReturnVersion);

            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
            .Returns(dataReturn);

            A.CallTo(() => helper.DataAccess.GetRegisteredProducer("Producer1"))
            .Returns(registeredProducer1);

            A.CallTo(() => helper.DataAccess.GetRegisteredProducer("Producer2"))
            .Returns(registeredProducer2);

            var builder = helper.Create();
            await builder.AddEeeOutputAmount("Producer1", "ProducerName", WeeeCategory.MedicalDevices, ObligationType.B2C, 200);

            await builder.AddEeeOutputAmount("Producer2", "ProducerName", WeeeCategory.ToysLeisureAndSports, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.NotSame(eeeOutputReturnVersion, result.DataReturnVersion.EeeOutputReturnVersion);
            Assert.Collection(result.DataReturnVersion.EeeOutputReturnVersion.EeeOutputAmounts,
                              r1 => Assert.Same(eeeOutputAmount2, r1),
                              r2 => Assert.Same(eeeOutputAmount3, r2));
        }
        public void AddEeeOutputAmount_AddsToEeeOutputAmounts()
        {
            // Arrange
            var eeeOutputReturnVersion = new EeeOutputReturnVersion();

            var registeredProducer = A.Fake <RegisteredProducer>();

            A.CallTo(() => registeredProducer.Equals(A <RegisteredProducer> ._))
            .Returns(true);

            var eeeOutputAmount = new EeeOutputAmount(ObligationType.B2B, A.Dummy <WeeeCategory>(),
                                                      A.Dummy <decimal>(), registeredProducer);

            // Act
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount);

            // Assert
            Assert.Contains(eeeOutputAmount, eeeOutputReturnVersion.EeeOutputAmounts);
        }
        private EeeOutputReturnVersion BuildEeeOutputReturnVersion(DataReturnVersion submittedDataReturnVersion)
        {
            EeeOutputReturnVersion eeeOutputReturnVersion = null;

            // Unchanged data from the latest submitted data return version can be reused. Check whether all or some of them can be reused.
            if (eeeOutputAmounts.Any())
            {
                bool reuseLatestEeeOutputReturnVersion = false;
                ICollection <EeeOutputAmount> mergedEeeOutputAmounts;

                if (submittedDataReturnVersion != null &&
                    submittedDataReturnVersion.EeeOutputReturnVersion != null)
                {
                    reuseLatestEeeOutputReturnVersion =
                        ReuseEqualItems(eeeOutputAmounts, submittedDataReturnVersion.EeeOutputReturnVersion.EeeOutputAmounts, out mergedEeeOutputAmounts);
                }
                else
                {
                    mergedEeeOutputAmounts = eeeOutputAmounts;
                }

                if (reuseLatestEeeOutputReturnVersion)
                {
                    eeeOutputReturnVersion = submittedDataReturnVersion.EeeOutputReturnVersion;
                }
                else
                {
                    eeeOutputReturnVersion = new EeeOutputReturnVersion();
                    foreach (var eeeOutputAmount in mergedEeeOutputAmounts)
                    {
                        eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount);
                    }
                }
            }

            return(eeeOutputReturnVersion);
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithSomeExistingEeeOutputAmounts_ReturnsDataReturnVersionWithExistingEeeOutputAmounts()
        {
            var registeredProducer1 = A.Fake<RegisteredProducer>();
            A.CallTo(() => registeredProducer1.ProducerRegistrationNumber)
                .Returns("Producer1");
            A.CallTo(() => registeredProducer1.Equals(A<RegisteredProducer>._))
                .Returns(true);

            var registeredProducer2 = A.Fake<RegisteredProducer>();
            A.CallTo(() => registeredProducer2.ProducerRegistrationNumber)
                .Returns("Producer2");
            A.CallTo(() => registeredProducer2.Equals(A<RegisteredProducer>._))
                .Returns(true);

            var eeeOutputAmount1 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100, registeredProducer1);
            var eeeOutputAmount2 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.MedicalDevices, 200, registeredProducer1);
            var eeeOutputAmount3 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ToysLeisureAndSports, 100, registeredProducer2);
            var eeeOutputAmount4 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 150, registeredProducer2);

            var eeeOutputReturnVersion = new EeeOutputReturnVersion();
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount1);
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount2);
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount3);
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount4);

            var dataReturn = new DataReturn(A.Dummy<Scheme>(), A.Dummy<Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy<WeeeCollectedReturnVersion>(),
                A.Dummy<WeeeDeliveredReturnVersion>(), eeeOutputReturnVersion);
            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
               .Returns(dataReturn);

            A.CallTo(() => helper.DataAccess.GetRegisteredProducer("Producer1"))
                .Returns(registeredProducer1);

            A.CallTo(() => helper.DataAccess.GetRegisteredProducer("Producer2"))
                .Returns(registeredProducer2);

            var builder = helper.Create();
            await builder.AddEeeOutputAmount("Producer1", "ProducerName", WeeeCategory.MedicalDevices, ObligationType.B2C, 200);
            await builder.AddEeeOutputAmount("Producer2", "ProducerName", WeeeCategory.ToysLeisureAndSports, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.NotSame(eeeOutputReturnVersion, result.DataReturnVersion.EeeOutputReturnVersion);
            Assert.Collection(result.DataReturnVersion.EeeOutputReturnVersion.EeeOutputAmounts,
                r1 => Assert.Same(eeeOutputAmount2, r1),
                r2 => Assert.Same(eeeOutputAmount3, r2));
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithAllExistingEeeOutputAmounts_ReturnsDataReturnVersionWithExistingEeeOutputReturnVersion()
        {
            var registeredProducer = A.Fake<RegisteredProducer>();
            A.CallTo(() => registeredProducer.Equals(A<RegisteredProducer>._))
                .Returns(true);

            var eeeOutputReturnVersion = new EeeOutputReturnVersion();
            eeeOutputReturnVersion.AddEeeOutputAmount(
                new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100, registeredProducer));

            var dataReturn = new DataReturn(A.Dummy<Scheme>(), A.Dummy<Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy<WeeeCollectedReturnVersion>(),
                A.Dummy<WeeeDeliveredReturnVersion>(), eeeOutputReturnVersion);
            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
               .Returns(dataReturn);

            A.CallTo(() => helper.DataAccess.GetRegisteredProducer(A<string>._))
                .Returns(registeredProducer);

            var builder = helper.Create();
            await builder.AddEeeOutputAmount("PRN", "ProducerName", WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.Same(eeeOutputReturnVersion, result.DataReturnVersion.EeeOutputReturnVersion);
        }