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); }
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; }
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); }
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 } }
public TotalChargeCalculatorTests() { xmlChargeBandCalculator = A.Fake <IXMLChargeBandCalculator>(); xmlConverter = A.Fake <IXmlConverter>(); totalCharge = 0; file = ProcessTestXmlFile(); totalChargeCalculator = new TotalChargeCalculator(xmlChargeBandCalculator, xmlConverter); }
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); } }
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)); } }
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); }
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); }
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); }
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); }
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"]); }
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"]); }
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; } } }
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); }
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 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); }
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; }