public void GenerateMemberUpload_ReturnsNewMemberUpload_WithCorrectValues()
        {
            var message = new ProcessXmlFile(
                new Guid("4CAD6CA3-E4E7-4D1A-BAAB-8C454EECF109"),
                new byte[1],
                "File name");

            Scheme scheme = A.Dummy<Scheme>();

            var errors = new List<MemberUploadError>
                {
                    new MemberUploadError(ErrorLevel.Error, UploadErrorType.Business, "Some schema error")
                };

            var builder = new GenerateFromXmlBuilder();

            string xml = "Test xml contents";
            A.CallTo(() => builder.XmlConverter.XmlToUtf8String(A<byte[]>._)).Returns(xml);

            schemeType xmlScheme = new schemeType() { complianceYear = "2015" };
            A.CallTo(() => builder.XmlConverter.Deserialize<schemeType>(A<XDocument>._)).Returns(xmlScheme);

            var result = builder.Build().GenerateMemberUpload(message, errors, 1000, scheme);

            Assert.Equal(new Guid("4CAD6CA3-E4E7-4D1A-BAAB-8C454EECF109"), result.OrganisationId);
            Assert.Equal(xml, result.RawData.Data);
            Assert.Equal(errors, result.Errors);
            Assert.Equal(1000, result.TotalCharges);
            Assert.Equal(2015, result.ComplianceYear);
            Assert.Equal(scheme, result.Scheme);
            Assert.Equal("File name", result.FileName);
        }
Пример #2
0
        public Dictionary <string, ProducerCharge> Calculate(ProcessXmlFile message)
        {
            var schemeType = xmlConverter.Deserialize <schemeType>(xmlConverter.Convert(message.Data));

            var producerCharges = new Dictionary <string, ProducerCharge>();
            var complianceYear  = int.Parse(schemeType.complianceYear);

            foreach (var producer in schemeType.producerList)
            {
                var producerName   = producer.GetProducerName();
                var producerCharge = Task.Run(() => producerChargeCalculator.GetProducerChargeBand(schemeType, producer)).Result;

                if (producerCharge != null)
                {
                    if (!producerCharges.ContainsKey(producerName))
                    {
                        producerCharges.Add(producerName, producerCharge);
                    }
                    else
                    {
                        ErrorsAndWarnings.Add(
                            new MemberUploadError(
                                ErrorLevel.Error,
                                UploadErrorType.Business,
                                string.Format(
                                    "We are unable to check for warnings associated with the charge band of the producer {0} until the duplicate name has been fixed.",
                                    producerName)));
                    }
                }
            }

            return(producerCharges);
        }
        public Dictionary<string, ProducerCharge> Calculate(ProcessXmlFile message)
        {
            var schemeType = xmlConverter.Deserialize<schemeType>(xmlConverter.Convert(message.Data));

            var producerCharges = new Dictionary<string, ProducerCharge>();
            var complianceYear = Int32.Parse(schemeType.complianceYear);

            foreach (var producer in schemeType.producerList)
            {
                var producerName = producer.GetProducerName();
                var producerCharge = producerChargeCalculator.CalculateCharge(schemeType.approvalNo, producer, complianceYear);
                if (producerCharge != null)
                {
                    if (!producerCharges.ContainsKey(producerName))
                    {
                        producerCharges.Add(producerName, producerCharge);
                    }
                    else
                    {
                        ErrorsAndWarnings.Add(
                            new MemberUploadError(
                                ErrorLevel.Error,
                                UploadErrorType.Business,
                                string.Format(
                                    "We are unable to check for warnings associated with the charge band of the producer {0} until the duplicate name has been fixed.",
                                    producerName)));
                    }
                }
            }

            return producerCharges;
        }
Пример #4
0
        public async Task <IEnumerable <ProducerSubmission> > GenerateProducers(ProcessXmlFile messageXmlFile, MemberUpload memberUpload, Dictionary <string, ProducerCharge> producerCharges)
        {
            var deserializedXml = xmlConverter.Deserialize <schemeType>(xmlConverter.Convert(messageXmlFile.Data));
            var producers       = await GenerateProducerData(deserializedXml, memberUpload, producerCharges);

            return(producers);
        }
Пример #5
0
        public async Task HappyPath_ManyUniquePrnsGeneratedAndSeedUpdatedToExpectedValue()
        {
            // arrange
            var validXmlLocation = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase), @"ExampleXML\v3-valid-many-insertions.xml");
            var validXmlString   = File.ReadAllText(new Uri(validXmlLocation).LocalPath);
            var validXmlBytes    = File.ReadAllBytes(new Uri(validXmlLocation).LocalPath);

            using (var database = new DatabaseWrapper())
            {
                var modelHelper = new ModelHelper(database.Model);

                var org          = modelHelper.CreateOrganisation();
                var scheme       = modelHelper.CreateScheme(org);
                var memberUpload = modelHelper.CreateMemberUpload(scheme);

                var message = new ProcessXmlFile(org.Id, validXmlBytes, "File name");

                var initialSeed  = database.WeeeContext.SystemData.Select(sd => sd.LatestPrnSeed).First();
                var expectedSeed = ExpectedSeedAfterThisXml(validXmlString, initialSeed);

                var whiteSpaceCollapser = A.Fake <IWhiteSpaceCollapser>();

                var xmlConverter = new XmlConverter(whiteSpaceCollapser, new Deserializer());
                var schemeType   = xmlConverter.Deserialize <schemeType>(xmlConverter.Convert(message.Data));

                var producerCharges     = new Dictionary <string, ProducerCharge>();
                var anyAmount           = 30;
                var anyChargeBandAmount = A.Dummy <ChargeBandAmount>();

                foreach (var producerData in schemeType.producerList)
                {
                    var producerName = producerData.GetProducerName();
                    if (!producerCharges.ContainsKey(producerName))
                    {
                        producerCharges.Add(producerName,
                                            new ProducerCharge {
                            Amount = anyAmount, ChargeBandAmount = anyChargeBandAmount
                        });
                    }
                }

                database.Model.SaveChanges();

                var contextMemberUpload = database.WeeeContext.MemberUploads
                                          .Single(mu => mu.Id == memberUpload.Id);

                // act
                var producers = await new GenerateFromXml(
                    xmlConverter,
                    new GenerateFromXmlDataAccess(database.WeeeContext)).GenerateProducers(message, contextMemberUpload, producerCharges);

                // assert
                long newSeed = database.WeeeContext.SystemData.Select(sd => sd.LatestPrnSeed).First();
                Assert.Equal(expectedSeed, newSeed);

                var prns = producers.Select(p => p.RegisteredProducer.ProducerRegistrationNumber);
                Assert.Equal(prns.Distinct(), prns); // all prns should be unique
            }
        }
        public async Task HappyPath_ManyUniquePrnsGeneratedAndSeedUpdatedToExpectedValue()
        {
            // arrange
            var validXmlLocation = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase), @"ExampleXML\v3-valid-many-insertions.xml");
            var validXmlString = File.ReadAllText(new Uri(validXmlLocation).LocalPath);
            var validXmlBytes = File.ReadAllBytes(new Uri(validXmlLocation).LocalPath);

            using (var database = new DatabaseWrapper())
            {
                var modelHelper = new ModelHelper(database.Model);

                var org = modelHelper.CreateOrganisation();
                var scheme = modelHelper.CreateScheme(org);
                var memberUpload = modelHelper.CreateMemberUpload(scheme);

                var message = new ProcessXmlFile(org.Id, validXmlBytes, "File name");

                var initialSeed = database.WeeeContext.SystemData.Select(sd => sd.LatestPrnSeed).First();
                var expectedSeed = ExpectedSeedAfterThisXml(validXmlString, initialSeed);

                var whiteSpaceCollapser = A.Fake<IWhiteSpaceCollapser>();

                var xmlConverter = new XmlConverter(whiteSpaceCollapser, new Deserializer());
                var schemeType = xmlConverter.Deserialize<schemeType>(xmlConverter.Convert(message.Data));

                var producerCharges = new Dictionary<string, ProducerCharge>();
                var anyAmount = 30;
                var anyChargeBandAmount = A.Dummy<ChargeBandAmount>();

                foreach (var producerData in schemeType.producerList)
                {
                    var producerName = producerData.GetProducerName();
                    if (!producerCharges.ContainsKey(producerName))
                    {
                        producerCharges.Add(producerName,
                            new ProducerCharge { Amount = anyAmount, ChargeBandAmount = anyChargeBandAmount });
                    }
                }

                database.Model.SaveChanges();

                var contextMemberUpload = database.WeeeContext.MemberUploads
                    .Single(mu => mu.Id == memberUpload.Id);

                // act
                var producers = await new GenerateFromXml(
                    xmlConverter,
                    new GenerateFromXmlDataAccess(database.WeeeContext)).GenerateProducers(message, contextMemberUpload, producerCharges);

                // assert
                long newSeed = database.WeeeContext.SystemData.Select(sd => sd.LatestPrnSeed).First();
                Assert.Equal(expectedSeed, newSeed);

                var prns = producers.Select(p => p.RegisteredProducer.ProducerRegistrationNumber);
                Assert.Equal(prns.Distinct(), prns); // all prns should be unique
            }
        }
Пример #7
0
        public TotalChargeCalculatorTests()
        {
            xmlChargeBandCalculator = A.Fake <IXMLChargeBandCalculator>();
            xmlConverter            = A.Fake <IXmlConverter>();

            totalCharge = 0;
            file        = ProcessTestXmlFile();

            totalChargeCalculator = new TotalChargeCalculator(xmlChargeBandCalculator, xmlConverter);
        }
Пример #8
0
        private static ProcessXmlFile ProcessTestXmlFile()
        {
            string absoluteFilePath = Path.Combine(
                Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase),
                @"ExampleXML\v3-valid-ChargeBand.xml");

            byte[]         xml     = Encoding.ASCII.GetBytes(File.ReadAllText(new Uri(absoluteFilePath).LocalPath));
            ProcessXmlFile request = new ProcessXmlFile(A.Dummy <Guid>(), xml, "File name");

            return(request);
        }
 public MemberUpload GenerateMemberUpload(ProcessXmlFile messageXmlFile, List<MemberUploadError> errors, decimal totalCharges, Scheme scheme)
 {
     if (errors != null && errors.Any(e => e.ErrorType == UploadErrorType.Schema))
     {
         return new MemberUpload(messageXmlFile.OrganisationId, xmlConverter.XmlToUtf8String(messageXmlFile.Data), errors, totalCharges, null, scheme, messageXmlFile.FileName);
     }
     else
     {
         var xml = xmlConverter.XmlToUtf8String(messageXmlFile.Data);
         var deserializedXml = xmlConverter.Deserialize<schemeType>(xmlConverter.Convert(messageXmlFile.Data));
         return new MemberUpload(messageXmlFile.OrganisationId, xml, errors, totalCharges, int.Parse(deserializedXml.complianceYear), scheme, messageXmlFile.FileName);
     }
 }
Пример #10
0
 public MemberUpload GenerateMemberUpload(ProcessXmlFile messageXmlFile, List <MemberUploadError> errors, decimal totalCharges, Scheme scheme, bool hasAnnualCharge)
 {
     if (errors != null && errors.Any(e => e.ErrorType == UploadErrorType.Schema))
     {
         return(new MemberUpload(messageXmlFile.OrganisationId, xmlConverter.XmlToUtf8String(messageXmlFile.Data), errors, totalCharges, null, scheme, messageXmlFile.FileName, null, hasAnnualCharge));
     }
     else
     {
         var xml             = xmlConverter.XmlToUtf8String(messageXmlFile.Data);
         var deserializedXml = xmlConverter.Deserialize <schemeType>(xmlConverter.Convert(messageXmlFile.Data));
         return(new MemberUpload(messageXmlFile.OrganisationId, xml, errors, totalCharges, int.Parse(deserializedXml.complianceYear), scheme, messageXmlFile.FileName, null, hasAnnualCharge));
     }
 }
Пример #11
0
        public Dictionary <string, ProducerCharge> TotalCalculatedCharges(ProcessXmlFile message, Scheme scheme, int deserializedcomplianceYear, bool annualChargeToBeAdded, ref decimal?totalCharges)
        {
            var producerCharges = xmlChargeBandCalculator.Calculate(message);

            totalCharges = producerCharges.Aggregate(totalCharges, (current, producerCharge) => current + producerCharge.Value.Amount);

            if (annualChargeToBeAdded && deserializedcomplianceYear > 2018 && scheme.CompetentAuthority.Abbreviation == UKCompetentAuthorityAbbreviationType.EA)
            {
                totalCharges = totalCharges + scheme.CompetentAuthority.AnnualChargeAmount;
            }

            return(producerCharges);
        }
        public void GenerateMemberUpload_NullSchemaErrors_ComplianceYearObtained()
        {
            var builder = new GenerateFromXmlBuilder();
            A.CallTo(() => builder.XmlConverter.Deserialize<schemeType>(A<XDocument>._))
                .Returns(new schemeType { complianceYear = "2015" });

            var message = new ProcessXmlFile(Guid.NewGuid(), new byte[1], "File name");
            var generateFromXml = builder.Build();

            var result = generateFromXml.GenerateMemberUpload(message, null, 2015, A.Fake<Scheme>());

            Assert.NotNull(result.ComplianceYear);
            Assert.Equal(2015, result.ComplianceYear.Value);
        }
        public void GenerateMemberUpload_SchemaErrors_NullComplianceYear()
        {
            var message = new ProcessXmlFile(Guid.NewGuid(), new byte[1], "File name");

            var generateFromXml = new GenerateFromXmlBuilder().Build();

            var result = generateFromXml.GenerateMemberUpload(message,
                new List<MemberUploadError>
                {
                    new MemberUploadError(ErrorLevel.Error, UploadErrorType.Schema, "Some schema error")
                },
                A.Dummy<decimal>(), A.Fake<Scheme>());

            Assert.Null(result.ComplianceYear);
        }
Пример #14
0
        public void GenerateMemberUpload_SchemaErrors_NullComplianceYear()
        {
            var message = new ProcessXmlFile(Guid.NewGuid(), new byte[1], "File name");

            var generateFromXml = new GenerateFromXmlBuilder().Build();

            var result = generateFromXml.GenerateMemberUpload(message,
                                                              new List <MemberUploadError>
            {
                new MemberUploadError(ErrorLevel.Error, UploadErrorType.Schema, "Some schema error")
            },
                                                              A.Dummy <decimal>(), A.Fake <Scheme>(), false);

            Assert.Null(result.ComplianceYear);
        }
Пример #15
0
        public void GenerateMemberUpload_NullSchemaErrors_ComplianceYearObtained()
        {
            var builder = new GenerateFromXmlBuilder();

            A.CallTo(() => builder.XmlConverter.Deserialize <schemeType>(A <XDocument> ._))
            .Returns(new schemeType {
                complianceYear = "2015"
            });

            var message         = new ProcessXmlFile(Guid.NewGuid(), new byte[1], "File name");
            var generateFromXml = builder.Build();

            var result = generateFromXml.GenerateMemberUpload(message, null, 2015, A.Fake <Scheme>(), false);

            Assert.NotNull(result.ComplianceYear);
            Assert.Equal(2015, result.ComplianceYear.Value);
        }
Пример #16
0
        public async void PostAddOrAmendMembers_FileIsMappedSuccessfully_ValidateRequestSentWithConvertedFileDataAndOrganisationId()
        {
            var request = new ProcessXmlFile(A.Dummy <Guid>(), A.Dummy <byte[]>(), A.Dummy <string>());

            A.CallTo(() => mapper.Map <PCSFileUploadViewModel, ProcessXmlFile>(A <PCSFileUploadViewModel> ._))
            .Returns(request);

            try
            {
                await MemberRegistrationController().AddOrAmendMembers(Guid.NewGuid(), new PCSFileUploadViewModel());
            }
            catch (Exception)
            {
            }

            A.CallTo(() => weeeClient.SendAsync(A <string> ._, request))
            .MustHaveHappened(Repeated.Exactly.Once);
        }
        public void Calculate_XmlWithSameProducerName_AddsError()
        {
            // Arrange

            // This file contains no errors.
            string absoluteFilePath = Path.Combine(
                Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase),
                @"ExampleXML\v3-same-producer-name.xml");

            byte[] xml = Encoding.ASCII.GetBytes(File.ReadAllText(new Uri(absoluteFilePath).LocalPath));
            ProcessXmlFile request = new ProcessXmlFile(A.Dummy<Guid>(), xml, "File name");

            var xmlChargeBandCalculator = XmlChargeBandCalculator();

            // Act
            xmlChargeBandCalculator.Calculate(request);

            // Assert
            Assert.NotEmpty(xmlChargeBandCalculator.ErrorsAndWarnings);
        }
Пример #18
0
        public void Calculate_XmlWithSameProducerName_AddsError()
        {
            // Arrange

            // This file contains no errors.
            string absoluteFilePath = Path.Combine(
                Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase),
                @"ExampleXML\v3-same-producer-name.xml");

            byte[]         xml     = Encoding.ASCII.GetBytes(File.ReadAllText(new Uri(absoluteFilePath).LocalPath));
            ProcessXmlFile request = new ProcessXmlFile(A.Dummy <Guid>(), xml, "File name");

            var xmlChargeBandCalculator = XmlChargeBandCalculator();

            // Act
            xmlChargeBandCalculator.Calculate(request);

            // Assert
            Assert.NotEmpty(xmlChargeBandCalculator.ErrorsAndWarnings);
        }
        public void Calculate_WithVaildXmlFileContainingFiveProducers_ReturnsFiveCharges()
        {
            // Arrange

            // This file contains 5 producers.
            string absoluteFilePath = Path.Combine(
                Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase),
                @"ExampleXML\v3-valid-ChargeBand.xml");

            byte[] xml = Encoding.ASCII.GetBytes(File.ReadAllText(new Uri(absoluteFilePath).LocalPath));
            ProcessXmlFile request = new ProcessXmlFile(A.Dummy<Guid>(), xml, "File name");

            ProducerCharge producerCharge1 = A.Dummy<ProducerCharge>();
            ProducerCharge producerCharge2 = A.Dummy<ProducerCharge>();
            ProducerCharge producerCharge3 = A.Dummy<ProducerCharge>();
            ProducerCharge producerCharge4 = A.Dummy<ProducerCharge>();
            ProducerCharge producerCharge5 = A.Dummy<ProducerCharge>();

            A.CallTo(() => producerChargerCalculator.CalculateCharge(A<string>._, A<producerType>._, A<int>._))
                .ReturnsNextFromSequence(producerCharge1, producerCharge2, producerCharge3, producerCharge4, producerCharge5);

            var xmlChargeBandCalculator = XmlChargeBandCalculator();

            // Act
            var producerCharges = xmlChargeBandCalculator.Calculate(request);

            // Assert
            Assert.NotNull(producerCharges);
            Assert.Equal(producerCharges.Count, 5);
            Assert.True(producerCharges.ContainsKey("The Empire"));
            Assert.True(producerCharges.ContainsKey("Tom and Jerry"));
            Assert.True(producerCharges.ContainsKey("The Empire 1"));
            Assert.True(producerCharges.ContainsKey("The Empire 2"));
            Assert.True(producerCharges.ContainsKey("The Empire 3"));

            Assert.Equal(producerCharge1, producerCharges["The Empire"]);
            Assert.Equal(producerCharge2, producerCharges["Tom and Jerry"]);
            Assert.Equal(producerCharge3, producerCharges["The Empire 1"]);
            Assert.Equal(producerCharge4, producerCharges["The Empire 2"]);
            Assert.Equal(producerCharge5, producerCharges["The Empire 3"]);
        }
Пример #20
0
        public void Calculate_WithVaildXmlFileContainingFiveProducers_ReturnsFiveCharges()
        {
            // Arrange

            // This file contains 5 producers.
            string absoluteFilePath = Path.Combine(
                Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase),
                @"ExampleXML\v3-valid-ChargeBand.xml");

            byte[]         xml     = Encoding.ASCII.GetBytes(File.ReadAllText(new Uri(absoluteFilePath).LocalPath));
            ProcessXmlFile request = new ProcessXmlFile(A.Dummy <Guid>(), xml, "File name");

            ProducerCharge producerCharge1 = A.Dummy <ProducerCharge>();
            ProducerCharge producerCharge2 = A.Dummy <ProducerCharge>();
            ProducerCharge producerCharge3 = A.Dummy <ProducerCharge>();
            ProducerCharge producerCharge4 = A.Dummy <ProducerCharge>();
            ProducerCharge producerCharge5 = A.Dummy <ProducerCharge>();

            A.CallTo(() => producerChargerCalculator.GetProducerChargeBand(A <schemeType> ._, A <producerType> ._))
            .ReturnsNextFromSequence(producerCharge1, producerCharge2, producerCharge3, producerCharge4, producerCharge5);

            var xmlChargeBandCalculator = XmlChargeBandCalculator();

            // Act
            var producerCharges = xmlChargeBandCalculator.Calculate(request);

            // Assert
            Assert.NotNull(producerCharges);
            Assert.Equal(producerCharges.Count, 5);
            Assert.True(producerCharges.ContainsKey("The Empire"));
            Assert.True(producerCharges.ContainsKey("Tom and Jerry"));
            Assert.True(producerCharges.ContainsKey("The Empire 1"));
            Assert.True(producerCharges.ContainsKey("The Empire 2"));
            Assert.True(producerCharges.ContainsKey("The Empire 3"));

            Assert.Equal(producerCharge1, producerCharges["The Empire"]);
            Assert.Equal(producerCharge2, producerCharges["Tom and Jerry"]);
            Assert.Equal(producerCharge3, producerCharges["The Empire 1"]);
            Assert.Equal(producerCharge4, producerCharges["The Empire 2"]);
            Assert.Equal(producerCharge5, producerCharges["The Empire 3"]);
        }
Пример #21
0
        public void UpdateCharges()
        {
            using (var dbContextTransaction = context.Database.BeginTransaction())
            {
                try
                {
                    var memberUploads = memberUploadDataAccess.FetchMemberUploadsToProcess();

                    memberUploadDataAccess.ResetMemberUploadsAnnualCharge(memberUploads);

                    context.SaveChanges();

                    foreach (var memberUpload in memberUploads)
                    {
                        var message = new ProcessXmlFile(memberUpload.OrganisationId, Encoding.ASCII.GetBytes(memberUpload.RawData.Data), memberUpload.FileName);

                        var schemeType     = xmlConverter.Deserialize <schemeType>(xmlConverter.Convert(message.Data));
                        var complianceYear = int.Parse(schemeType.complianceYear);
                        var scheme         = context.Schemes.Single(c => c.OrganisationId == message.OrganisationId);

                        var hasAnnualCharge        = totalChargeCalculatorDataAccess.CheckSchemeHasAnnualCharge(scheme, complianceYear, memberUpload.SubmittedDate.Value);
                        var annualChargedToBeAdded = !hasAnnualCharge && scheme.CompetentAuthority.Abbreviation == UKCompetentAuthorityAbbreviationType.EA;

                        var total = TotalCalculatedCharges(memberUpload, schemeType, annualChargedToBeAdded, scheme);

                        Log.Information(string.Format("Member upload {0} updated from {1} to {2}", memberUpload.Id, memberUpload.TotalCharges, total));

                        memberUploadDataAccess.UpdateMemberUploadAmount(memberUpload, total, annualChargedToBeAdded);
                    }

                    dbContextTransaction.Commit();
                }
                catch (Exception ex)
                {
                    Log.Error(ex.Message + (ex.InnerException != null ? ex.InnerException.Message : string.Empty));
                    dbContextTransaction.Rollback();
                    throw;
                }
            }
        }
Пример #22
0
        public void GenerateMemberUpload_ReturnsNewMemberUpload_WithCorrectValues()
        {
            var message = new ProcessXmlFile(
                new Guid("4CAD6CA3-E4E7-4D1A-BAAB-8C454EECF109"),
                new byte[1],
                "File name");

            Scheme scheme = A.Dummy <Scheme>();

            var errors = new List <MemberUploadError>
            {
                new MemberUploadError(ErrorLevel.Error, UploadErrorType.Business, "Some schema error")
            };

            var builder = new GenerateFromXmlBuilder();

            string xml = "Test xml contents";

            A.CallTo(() => builder.XmlConverter.XmlToUtf8String(A <byte[]> ._)).Returns(xml);

            schemeType xmlScheme = new schemeType()
            {
                complianceYear = "2015"
            };

            A.CallTo(() => builder.XmlConverter.Deserialize <schemeType>(A <XDocument> ._)).Returns(xmlScheme);

            var result = builder.Build().GenerateMemberUpload(message, errors, 1000, scheme, false);

            Assert.Equal(new Guid("4CAD6CA3-E4E7-4D1A-BAAB-8C454EECF109"), result.OrganisationId);
            Assert.Equal(xml, result.RawData.Data);
            Assert.Equal(errors, result.Errors);
            Assert.Equal(1000, result.TotalCharges);
            Assert.Equal(2015, result.ComplianceYear);
            Assert.Equal(scheme, result.Scheme);
            Assert.Equal("File name", result.FileName);
        }
Пример #23
0
        public async Task <IEnumerable <MemberUploadError> > Validate(ProcessXmlFile message)
        {
            string schemaVersion = MemberRegistrationSchemaVersion.Version_3_07.GetAttribute <DisplayAttribute>().Name;
            // Validate against the schema
            var errors = schemaValidator.Validate(message.Data, @"EA.Weee.Xml.MemberRegistration.v3schema.xsd", XmlNamespace.MemberRegistration, schemaVersion)
                         .Select(e => e.ToMemberUploadError())
                         .ToList();

            if (errors.Any())
            {
                return(errors);
            }

            schemeType deserializedXml;

            try
            {
                // Validate deserialized XML against business rules
                deserializedXml = xmlConverter.Deserialize <schemeType>(xmlConverter.Convert(message.Data));
            }
            catch (XmlDeserializationFailureException e)
            {
                // Couldn't deserialise - can't go any further, add an error and bail out here
                var exceptionMessage = e.InnerException != null ? e.InnerException.Message : e.Message;
                var friendlyMessage  = errorTranslator.MakeFriendlyErrorMessage(exceptionMessage, schemaVersion);
                errors.Add(new MemberUploadError(ErrorLevel.Error, UploadErrorType.Schema, friendlyMessage));

                return(errors);
            }

            errors = (await businessValidator.Validate(deserializedXml, message.OrganisationId))
                     .Select(err => new MemberUploadError(err.ErrorLevel.ToDomainEnumeration <ErrorLevel>(), UploadErrorType.Business, err.Message))
                     .ToList();

            return(errors);
        }
Пример #24
0
        public async Task<IEnumerable<MemberUploadError>> Validate(ProcessXmlFile message)
        {
            string schemaVersion = MemberRegistrationSchemaVersion.Version_3_07.GetAttribute<DisplayAttribute>().Name;
            // Validate against the schema
            var errors = schemaValidator.Validate(message.Data, @"EA.Weee.Xml.MemberRegistration.v3schema.xsd", XmlNamespace.MemberRegistration, schemaVersion)
                .Select(e => e.ToMemberUploadError())
                .ToList();

            if (errors.Any())
            {
                return errors;
            }

            schemeType deserializedXml;

            try
            {
                // Validate deserialized XML against business rules
                deserializedXml = xmlConverter.Deserialize<schemeType>(xmlConverter.Convert(message.Data));
            }
            catch (XmlDeserializationFailureException e)
            {
                // Couldn't deserialise - can't go any further, add an error and bail out here
                var exceptionMessage = e.InnerException != null ? e.InnerException.Message : e.Message;
                var friendlyMessage = errorTranslator.MakeFriendlyErrorMessage(exceptionMessage, schemaVersion);
                errors.Add(new MemberUploadError(ErrorLevel.Error, UploadErrorType.Schema, friendlyMessage));

                return errors;
            }

            errors = (await businessValidator.Validate(deserializedXml, message.OrganisationId))
                .Select(err => new MemberUploadError(err.ErrorLevel.ToDomainEnumeration<ErrorLevel>(), UploadErrorType.Business, err.Message))
                .ToList();

            return errors;
        }
        public async void PostAddOrAmendMembers_FileIsMappedSuccessfully_ValidateRequestSentWithConvertedFileDataAndOrganisationId()
        {
            var request = new ProcessXmlFile(A.Dummy<Guid>(), A.Dummy<byte[]>(), A.Dummy<string>());

            A.CallTo(() => mapper.Map<PCSFileUploadViewModel, ProcessXmlFile>(A<PCSFileUploadViewModel>._))
                .Returns(request);

            try
            {
                await MemberRegistrationController().AddOrAmendMembers(Guid.NewGuid(), new PCSFileUploadViewModel());
            }
            catch (Exception)
            {
            }

            A.CallTo(() => weeeClient.SendAsync(A<string>._, request))
                .MustHaveHappened(Repeated.Exactly.Once);
        }
Пример #26
0
 public async Task<IEnumerable<ProducerSubmission>> GenerateProducers(ProcessXmlFile messageXmlFile, MemberUpload memberUpload, Dictionary<string, ProducerCharge> producerCharges)
 {
     var deserializedXml = xmlConverter.Deserialize<schemeType>(xmlConverter.Convert(messageXmlFile.Data));
     var producers = await GenerateProducerData(deserializedXml, memberUpload, producerCharges);
     return producers;
 }