public void AssignToInvoiceRun_SetsProducerSubmissionAsInvoiced() { Scheme scheme = A.Fake <Scheme>(); MemberUpload memberUpload = new MemberUpload(A.Dummy <Guid>(), "data", null, 100, 2015, scheme, "fileName"); var registeredProducer = new RegisteredProducer("PRN", 2015, scheme); var producer = new ProducerSubmission( registeredProducer, memberUpload, new ProducerBusiness(), null, new DateTime(2015, 1, 1), 0, false, null, "Trading Name 1", EEEPlacedOnMarketBandType.Lessthan5TEEEplacedonmarket, SellingTechniqueType.Both, ObligationType.Both, AnnualTurnOverBandType.Greaterthanonemillionpounds, new List <BrandName>(), new List <SICCode>(), A.Dummy <ChargeBandAmount>(), 0, A.Dummy <StatusType>()); memberUpload.ProducerSubmissions.Add(producer); memberUpload.Submit(A.Dummy <User>()); memberUpload.AssignToInvoiceRun(A.Dummy <InvoiceRun>()); Assert.True(producer.Invoiced); }
public void AssignToInvoiceRun_ForUnsubmittedMemberUpload_ThrowsInvalidOperationException() { Scheme scheme = A.Fake <Scheme>(); MemberUpload memberUpload = new MemberUpload(new Guid("A2A01A99-A97D-4219-9060-D7CDF7435114"), scheme, "data", "filename"); Assert.Throws <InvalidOperationException>(() => memberUpload.AssignToInvoiceRun(A.Dummy <InvoiceRun>())); }
public void Constructor_WithMemberUploadForDifferentAuthority_ThrowsInvalidOperationException() { // Arrange UKCompetentAuthority authorityA = A.Dummy <UKCompetentAuthority>(); UKCompetentAuthority authorityB = A.Dummy <UKCompetentAuthority>(); Scheme schemeForAuthorityA = A.Fake <Scheme>(); A.CallTo(() => schemeForAuthorityA.CompetentAuthority).Returns(authorityA); List <MemberUpload> memberUploads = new List <MemberUpload>(); MemberUpload memberUploadForAuthorityA = new MemberUpload( new Guid("A2A01A99-A97D-4219-9060-D7CDF7435114"), schemeForAuthorityA, "data", "filename"); memberUploadForAuthorityA.Submit(A.Dummy <User>()); memberUploads.Add(memberUploadForAuthorityA); // Act Func <InvoiceRun> testCode = () => new InvoiceRun(authorityB, memberUploads, A.Dummy <User>()); // Assert Assert.Throws <InvalidOperationException>(testCode); }
public async void ProcessXmlfile_StoresProcessTime() { IEnumerable <MemberUploadError> errors = new List <MemberUploadError>(); A.CallTo(() => xmlValidator.Validate(Message)) .Returns(errors); MemberUpload upload = A.Fake <MemberUpload>(); A.CallTo(() => generator.GenerateMemberUpload( Message, errors as List <MemberUploadError>, 0, A.Dummy <Scheme>(), false)) .WithAnyArguments() .Returns(upload); SetupSchemeTypeComplianceYear(); await handler.HandleAsync(Message); A.CallTo(() => upload.SetProcessTime(new TimeSpan())) .WithAnyArguments() .MustHaveHappened(Repeated.Exactly.Once); }
public void GetNumberOfWarnings_CountsWarningsOnlyFromErrorsCollection() { // Arrange var errorsAndWarnings = new List <MemberUploadError> { new MemberUploadError(Error.ErrorLevel.Warning, A.Dummy <Error.UploadErrorType>(), "Description1"), new MemberUploadError(Error.ErrorLevel.Error, A.Dummy <Error.UploadErrorType>(), "Description2"), new MemberUploadError(Error.ErrorLevel.Warning, A.Dummy <Error.UploadErrorType>(), "Description3"), }; var memberUpload = new MemberUpload( A.Dummy <Guid>(), A.Dummy <string>(), errorsAndWarnings, A.Dummy <int>(), A.Dummy <int>(), A.Dummy <Scheme>(), A.Dummy <string>()); // Act var result = memberUpload.GetNumberOfWarnings(); // Assert Assert.Equal(2, result); }
public void GetLatestCompanyProducers_ReturnsCurrentForComplianceYearCompaniesOnly() { using (DatabaseWrapper database = new DatabaseWrapper()) { ModelHelper helper = new ModelHelper(database.Model); // Arrange Scheme scheme1 = helper.CreateScheme(); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme1); memberUpload1.ComplianceYear = 2015; memberUpload1.IsSubmitted = true; ProducerSubmission companyProducer1 = helper.CreateProducerAsCompany(memberUpload1, "AA"); ProducerSubmission companyProducer2 = helper.CreateProducerAsCompany(memberUpload1, "BB"); ProducerSubmission companyProducer3 = helper.CreateProducerAsCompany(memberUpload1, "AA"); database.Model.SaveChanges(); // Act var result = ProducerQuerySet(database.WeeeContext).GetLatestCompanyProducers(); // Assert Assert.DoesNotContain(result, p => p.Id == companyProducer1.Id); Assert.Contains(result, p => p.Id == companyProducer2.Id); Assert.Contains(result, p => p.Id == companyProducer3.Id); } }
public void Constructor_WithMemberUploadForDifferentAuthority_ThrowsInvalidOperationException() { // Arrange UKCompetentAuthority authorityA = A.Dummy<UKCompetentAuthority>(); UKCompetentAuthority authorityB = A.Dummy<UKCompetentAuthority>(); Scheme schemeForAuthorityA = A.Fake<Scheme>(); A.CallTo(() => schemeForAuthorityA.CompetentAuthority).Returns(authorityA); List<MemberUpload> memberUploads = new List<MemberUpload>(); MemberUpload memberUploadForAuthorityA = new MemberUpload( new Guid("A2A01A99-A97D-4219-9060-D7CDF7435114"), schemeForAuthorityA, "data", "filename"); memberUploadForAuthorityA.Submit(A.Dummy<User>()); memberUploads.Add(memberUploadForAuthorityA); // Act Func<InvoiceRun> testCode = () => new InvoiceRun(authorityB, memberUploads, A.Dummy<User>()); // Assert Assert.Throws<InvalidOperationException>(testCode); }
public async Task Execute_WithProducersInOtherSchemes_IgnoresOtherSchemes() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme1 = helper.CreateScheme(); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme1); memberUpload1.ComplianceYear = 2016; memberUpload1.IsSubmitted = true; memberUpload1.SubmittedDate = new DateTime(2015, 1, 1); ProducerSubmission producer1 = helper.CreateProducerAsPartnership(memberUpload1, "WEE/11AAAA11"); Scheme scheme2 = helper.CreateScheme(); MemberUpload memberUpload2 = helper.CreateMemberUpload(scheme2); memberUpload2.ComplianceYear = 2016; memberUpload2.IsSubmitted = true; memberUpload2.SubmittedDate = new DateTime(2015, 1, 1); ProducerSubmission producer2 = helper.CreateProducerAsPartnership(memberUpload2, "WEE/22BBBB22"); db.Model.SaveChanges(); // Act List <ProducerCsvData> results = await db.StoredProcedures.SpgCSVDataByOrganisationIdAndComplianceYear(scheme1.OrganisationId, 2016); // Assert Assert.False(results.Any(r => r.RegistrationNumber == "WEE/22BBBB22"), "When a scheme ID is provided, producers from other schemes should not be returned."); } }
public async Task HandleAsync_SendsEmailToCompetentAuthorityNotificationAddress() { // Arrange string emailAddress = "*****@*****.**"; var competentAuthority = new UKCompetentAuthority(Guid.NewGuid(), "Name", "Abbreviation", A.Dummy <Country>(), emailAddress, 0); Scheme scheme = A.Fake <Scheme>(); A.CallTo(() => scheme.CompetentAuthority) .Returns(competentAuthority); MemberUpload memberUpload = A.Fake <MemberUpload>(); A.CallTo(() => memberUpload.Scheme) .Returns(scheme); A.CallTo(() => memberUpload.ComplianceYear) .Returns(2015); var schemeSubmissionEvent = new SchemeMemberSubmissionEvent(memberUpload); var emailService = A.Fake <IWeeeEmailService>(); var handler = new SchemeMemberSubmissionEventHandler(emailService); // Act await handler.HandleAsync(schemeSubmissionEvent); // Assert A.CallTo(() => emailService.SendSchemeMemberSubmitted(emailAddress, A <string> ._, A <int> ._, A <int> ._)) .MustHaveHappened(Repeated.Exactly.Once); }
public async Task Execute_WithOneCurrentProducerAsSoleTrader_ReturnsNoName() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme1 = helper.CreateScheme(); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme1); memberUpload1.ComplianceYear = 2016; memberUpload1.IsSubmitted = true; memberUpload1.SubmittedDate = new DateTime(2015, 1, 1); helper.CreateProducerAsSoleTrader(memberUpload1, "WEE/11AAAA11"); db.Model.SaveChanges(); // Act List <ProducerCsvData> results = await db.StoredProcedures.SpgCSVDataByOrganisationIdAndComplianceYear(scheme1.OrganisationId, 2016); // Assert Assert.NotNull(results); Assert.Equal(1, results.Count); ProducerCsvData result = results[0]; Assert.Equal(string.Empty, result.OrganisationName); } }
public async Task GetChanges_WithDifferentComplianceYears_ThrowsInvalidOperationException() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme = helper.CreateScheme(); MemberUpload memberUpload = helper.CreateSubmittedMemberUpload(scheme); memberUpload.ComplianceYear = 2016; var previousDataReturnVersion = helper.CreateDataReturnVersion(scheme, 2016, 1, true); previousDataReturnVersion.SubmittedDate = new DateTime(2016, 1, 1); MemberUpload memberUpload2 = helper.CreateSubmittedMemberUpload(scheme); memberUpload2.ComplianceYear = 2017; var currentDataReturnVersion = helper.CreateDataReturnVersion(scheme, 2017, 1, true); currentDataReturnVersion.SubmittedDate = new DateTime(2016, 2, 1); db.Model.SaveChanges(); var dataAccess = new GetDataReturnSubmissionEeeChangesCsvDataAccess(db.WeeeContext); // Act, Assert await Assert.ThrowsAsync <InvalidOperationException>(() => dataAccess.GetChanges(currentDataReturnVersion.Id, previousDataReturnVersion.Id)); } }
public async Task GetChanges_ReturnsSubmissionDetails() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme = helper.CreateScheme(); scheme.ApprovalNumber = "ABC"; MemberUpload memberUpload = helper.CreateSubmittedMemberUpload(scheme); memberUpload.ComplianceYear = 2016; var previousDataReturnVersion = helper.CreateDataReturnVersion(scheme, 2016, 1, true); previousDataReturnVersion.SubmittedDate = new DateTime(2016, 1, 1); var currentDataReturnVersion = helper.CreateDataReturnVersion(scheme, 2016, 1, true); currentDataReturnVersion.SubmittedDate = new DateTime(2016, 2, 1); db.Model.SaveChanges(); var dataAccess = new GetDataReturnSubmissionEeeChangesCsvDataAccess(db.WeeeContext); // Act var results = await dataAccess.GetChanges(currentDataReturnVersion.Id, previousDataReturnVersion.Id); // Assert Assert.Equal("ABC", results.SchemeApprovalNumber); Assert.Equal(2016, results.ComplianceYear); Assert.Equal(1, results.Quarter); Assert.Equal(new DateTime(2016, 2, 1), results.CurrentSubmissionDate); } }
public async Task HandleAsync_SendsEmailWithMemberUploadComplianceYear() { // Arrange var competentAuthority = A.Fake <UKCompetentAuthority>(); Scheme scheme = A.Fake <Scheme>(); A.CallTo(() => scheme.CompetentAuthority) .Returns(competentAuthority); MemberUpload memberUpload = A.Fake <MemberUpload>(); A.CallTo(() => memberUpload.Scheme) .Returns(scheme); A.CallTo(() => memberUpload.ComplianceYear) .Returns(2015); var schemeSubmissionEvent = new SchemeMemberSubmissionEvent(memberUpload); var emailService = A.Fake <IWeeeEmailService>(); var handler = new SchemeMemberSubmissionEventHandler(emailService); // Act await handler.HandleAsync(schemeSubmissionEvent); // Assert A.CallTo(() => emailService.SendSchemeMemberSubmitted(A <string> ._, A <string> ._, 2015, A <int> ._)) .MustHaveHappened(Repeated.Exactly.Once); }
public void GetProducerForOtherSchemeAndObligationType_ForAnotherSchemeSameObligationType_ReturnsAnotherSchemeProducer() { using (DatabaseWrapper database = new DatabaseWrapper()) { ModelHelper helper = new ModelHelper(database.Model); // Arrange Scheme scheme1 = helper.CreateScheme(); Scheme scheme2 = helper.CreateScheme(); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme2); memberUpload1.ComplianceYear = 2015; memberUpload1.IsSubmitted = true; Weee.Tests.Core.Model.ProducerSubmission producer1 = helper.CreateProducerAsCompany(memberUpload1, "AAAAAAA"); producer1.ObligationType = "B2C"; database.Model.SaveChanges(); ProducerQuerySet querySet = ProducerQuerySet(database.WeeeContext); // Act var result = querySet.GetProducerForOtherSchemeAndObligationType("AAAAAAA", "2015", scheme1.OrganisationId, ObligationType.B2C); // Assert Assert.NotNull(result); Assert.Equal(producer1.Id, result.Id); } }
public async Task Execute_NonSubmittedMemberUpload_IgnoresProducer() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme1 = helper.CreateScheme(); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme1); memberUpload1.ComplianceYear = 2016; memberUpload1.IsSubmitted = false; helper.CreateProducerAsCompany(memberUpload1, "WEE/11AAAA11"); db.Model.SaveChanges(); // Act List <ProducerAmendmentsHistoryCSVData> results = await db.StoredProcedures.SpgProducerAmendmentsCSVDataByPRN("WEE/11AAAA11"); // Assert Assert.NotNull(results); Assert.Equal(0, results.Count); } }
public async Task Execute_WithOneCurrentProducerAsCompany_ReturnsCompanyName() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme1 = helper.CreateScheme(); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme1); memberUpload1.ComplianceYear = 2016; memberUpload1.IsSubmitted = true; memberUpload1.SubmittedDate = new DateTime(2015, 1, 1); ProducerSubmission producer1 = helper.CreateProducerAsCompany(memberUpload1, "WEE/11AAAA11"); db.Model.SaveChanges(); // Act List <MembersDetailsCsvData> results = await db.StoredProcedures.SpgCSVDataBySchemeComplianceYearAndAuthorisedAuthority(2016, false, false, scheme1.Id, null); // Assert Assert.NotNull(results); Assert.Equal(1, results.Count); MembersDetailsCsvData result = results[0]; Assert.Equal(producer1.Business.Company.Name, result.ProducerName); } }
public async Task Execute_WithNonSubmittedMemberUpload_IgnoresProducer() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme1 = helper.CreateScheme(); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme1); memberUpload1.ComplianceYear = 2016; memberUpload1.IsSubmitted = false; helper.CreateProducerAsCompany(memberUpload1, "WEE/11AAAA11"); db.Model.SaveChanges(); // Act List <MembersDetailsCsvData> results = await db.StoredProcedures.SpgCSVDataBySchemeComplianceYearAndAuthorisedAuthority(2016, false, false, scheme1.Id, null); // Assert Assert.NotNull(results); Assert.Equal(0, results.Count); } }
public async Task Execute_HappyPath_ReturnsProducerWithSelectedSchemeandAA() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme1 = helper.CreateScheme(); scheme1.CompetentAuthorityId = new Guid("4EEE5942-01B2-4A4D-855A-34DEE1BBBF26"); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme1); memberUpload1.ComplianceYear = 2016; memberUpload1.IsSubmitted = true; memberUpload1.SubmittedDate = new DateTime(2015, 1, 1); ProducerSubmission producer1 = helper.CreateProducerAsCompany(memberUpload1, "WEE/11AAAA11"); db.Model.SaveChanges(); // Act List <MembersDetailsCsvData> results = await db.StoredProcedures.SpgCSVDataBySchemeComplianceYearAndAuthorisedAuthority(2016, false, false, scheme1.Id, scheme1.CompetentAuthorityId); // Assert Assert.NotNull(results); Assert.Equal(1, results.Count); MembersDetailsCsvData result = results[0]; Assert.Equal("WEE/11AAAA11", result.PRN); } }
public async Task Execute_WithProducerBrandNames_ReturnsBrandNamesForRemovedProducer() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme = helper.CreateScheme(); MemberUpload memberUpload = helper.CreateMemberUpload(scheme); memberUpload.ComplianceYear = 2016; memberUpload.IsSubmitted = true; memberUpload.SubmittedDate = new DateTime(2015, 1, 1); ProducerSubmission producer = helper.CreateProducerAsPartnership(memberUpload, "WEE/11BBBB11"); producer.Business.Partnership.Name = "ABCH"; producer.RegisteredProducer.Removed = true; helper.CreateBrandName(producer, "Brand1"); helper.CreateBrandName(producer, "Brand2"); db.Model.SaveChanges(); // Act List <MembersDetailsCsvData> results = await db.StoredProcedures.SpgCSVDataBySchemeComplianceYearAndAuthorisedAuthority(2016, true, true, scheme.Id, null); // Assert Assert.NotNull(results); Assert.Single(results); Assert.NotNull(results[0].BrandNames); Assert.Equal("Brand1; Brand2", results[0].BrandNames); } }
public void GetLatestProducerForComplianceYearAndScheme_PrnDoesNotMatch_ReturnsNull() { using (DatabaseWrapper database = new DatabaseWrapper()) { ModelHelper helper = new ModelHelper(database.Model); // Arrange Scheme scheme = helper.CreateScheme(); MemberUpload memberUpload = helper.CreateMemberUpload(scheme); memberUpload.ComplianceYear = 2016; memberUpload.IsSubmitted = true; Weee.Tests.Core.Model.ProducerSubmission producer = helper.CreateProducerAsCompany(memberUpload, "AAAAAAAA"); database.Model.SaveChanges(); ProducerQuerySet querySet = ProducerQuerySet(database.WeeeContext); // Act var result = querySet.GetLatestProducerForComplianceYearAndScheme("XXXXXXXX", "2016", scheme.OrganisationId); // Assert Assert.Null(result); } }
public void UpdateMemberUploadAmount(MemberUpload memberUpload, decimal amount, bool hasAnnualCharge) { memberUpload.HasAnnualCharge = hasAnnualCharge; memberUpload.UpdateTotalCharges(amount); context.SaveChanges(); }
public void GetLatestProducerFromPreviousComplianceYears_TwoProducerEntriesIn2015_ReturnsLatestProducerByUpdatedDate() { using (DatabaseWrapper database = new DatabaseWrapper()) { ModelHelper helper = new ModelHelper(database.Model); // Arrange Scheme scheme = helper.CreateScheme(); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme); memberUpload1.ComplianceYear = 2015; memberUpload1.IsSubmitted = true; ProducerSubmission producer1 = helper.CreateProducerAsCompany(memberUpload1, "AAAAAAA"); producer1.UpdatedDate = new DateTime(2015, 1, 1); MemberUpload memberUpload2 = helper.CreateMemberUpload(scheme); memberUpload2.ComplianceYear = 2015; memberUpload2.IsSubmitted = true; ProducerSubmission producer2 = helper.CreateProducerAsCompany(memberUpload2, "AAAAAAA"); producer2.UpdatedDate = new DateTime(2015, 1, 2); database.Model.SaveChanges(); ProducerQuerySet querySet = ProducerQuerySet(database.WeeeContext); // Act var result = querySet.GetLatestProducerFromPreviousComplianceYears("AAAAAAA"); // Assert Assert.NotNull(result); Assert.Equal(producer2.Id, result.Id); } }
public async Task Execute_NonSubmittedMemberUpload_IgnoresProducer() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme1 = helper.CreateScheme(); scheme1.OrganisationId = new Guid("4EEE5942-01B2-4A4D-855A-34DEE1BBBF26"); scheme1.Organisation.Id = new Guid("4EEE5942-01B2-4A4D-855A-34DEE1BBBF26"); scheme1.Organisation.BusinessAddressId = new Guid("b58e9cb2-b97e-4141-ad32-73c70284fc77"); scheme1.Organisation.Address = helper.CreateOrganisationAddress(); scheme1.Organisation.Address.Id = new Guid("b58e9cb2-b97e-4141-ad32-73c70284fc77"); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme1); memberUpload1.ComplianceYear = 2016; memberUpload1.IsSubmitted = false; ProducerSubmission producerSubmission = helper.CreateProducerAsCompany(memberUpload1, "WEE/99ZZZZ99"); db.Model.SaveChanges(); // Act List <ProducerPublicRegisterCSVData> results = await db.StoredProcedures.SpgProducerPublicRegisterCSVDataByComplianceYear(2016); // Assert Assert.False(results.Any(i => i.PRN == "WEE/99ZZZZ99")); } }
public async Task GetChanges_WithNoEeeChanges_ReturnsEmptyResult() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme = helper.CreateScheme(); MemberUpload memberUpload = helper.CreateSubmittedMemberUpload(scheme); memberUpload.ComplianceYear = 2016; ProducerSubmission producer = helper.CreateProducerAsCompany(memberUpload, "WEE/11BBBB11"); var eeeOutputAmount = helper.CreateEeeOutputAmount(producer.RegisteredProducer, "B2B", 1, 10); var previousDataReturnVersion = helper.CreateDataReturnVersion(scheme, 2016, 1, true); previousDataReturnVersion.SubmittedDate = new DateTime(2016, 1, 1); helper.AddEeeOutputAmount(previousDataReturnVersion, eeeOutputAmount); var currentDataReturnVersion = helper.CreateDataReturnVersion(scheme, 2016, 1, true); currentDataReturnVersion.SubmittedDate = new DateTime(2016, 2, 1); helper.AddEeeOutputAmount(currentDataReturnVersion, eeeOutputAmount); db.Model.SaveChanges(); var dataAccess = new GetDataReturnSubmissionEeeChangesCsvDataAccess(db.WeeeContext); // Act var results = await dataAccess.GetChanges(currentDataReturnVersion.Id, previousDataReturnVersion.Id); // Assert Assert.Empty(results.CsvData); } }
public void GetAllRegistrationNumbers_ReturnsDistinctRegistrationNumbers() { using (DatabaseWrapper database = new DatabaseWrapper()) { ModelHelper helper = new ModelHelper(database.Model); // Arrange Scheme scheme = helper.CreateScheme(); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme); memberUpload1.ComplianceYear = 2015; memberUpload1.IsSubmitted = false; memberUpload1.HasAnnualCharge = false; Weee.Tests.Core.Model.ProducerSubmission producer1 = helper.CreateProducerAsCompany(memberUpload1, "AAAAAAA"); MemberUpload memberUpload2 = helper.CreateMemberUpload(scheme); memberUpload2.ComplianceYear = 2015; memberUpload2.IsSubmitted = true; memberUpload2.HasAnnualCharge = false; Weee.Tests.Core.Model.ProducerSubmission producer2 = helper.CreateProducerAsCompany(memberUpload2, "AAAAAAA"); database.Model.SaveChanges(); ProducerQuerySet querySet = ProducerQuerySet(database.WeeeContext); // Act List <string> results = querySet.GetAllRegistrationNumbers(); // Assert Assert.NotNull(results); Assert.Equal(1, results.Count(r => r == "AAAAAAA")); } }
public void GetLatestCompanyProducers_ReturnsCompaniesOnly() { using (DatabaseWrapper database = new DatabaseWrapper()) { ModelHelper helper = new ModelHelper(database.Model); // Arrange Scheme scheme1 = helper.CreateScheme(); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme1); memberUpload1.ComplianceYear = 2015; memberUpload1.IsSubmitted = true; Weee.Tests.Core.Model.ProducerSubmission companyProducer1 = helper.CreateProducerAsCompany(memberUpload1, "AAAAAAA"); Weee.Tests.Core.Model.ProducerSubmission partnershipProducer = helper.CreateProducerAsPartnership(memberUpload1, "PPP1"); Weee.Tests.Core.Model.ProducerSubmission soleTraderProducer = helper.CreateProducerAsSoleTrader(memberUpload1, "SSS1"); Weee.Tests.Core.Model.ProducerSubmission companyProducer2 = helper.CreateProducerAsCompany(memberUpload1, "AAAAAAB"); database.Model.SaveChanges(); // Act var result = ProducerQuerySet(database.WeeeContext).GetLatestCompanyProducers(); // Assert Assert.Contains(result, p => p.Id == companyProducer1.Id); Assert.Contains(result, p => p.Id == companyProducer2.Id); Assert.DoesNotContain(result, p => p.Id == soleTraderProducer.Id); Assert.DoesNotContain(result, p => p.Id == partnershipProducer.Id); } }
public async void DoesNotDeductChargeFromMemberUpload_WhenAlreadyInvoiced() { // Arrange var builder = new RemoveProducerHandlerBuilder(); var memberUpload = new MemberUpload(A.Dummy <Guid>(), A.Dummy <string>(), null, 100, A.Dummy <int>(), A.Dummy <Scheme>(), A.Dummy <string>(), null, A.Dummy <bool>()); memberUpload.Submit(A.Dummy <User>()); memberUpload.AssignToInvoiceRun(A.Dummy <InvoiceRun>()); var producerSubmission = A.Fake <ProducerSubmission>(); A.CallTo(() => producerSubmission.ChargeThisUpdate) .Returns(20); A.CallTo(() => producerSubmission.MemberUpload) .Returns(memberUpload); A.CallTo(() => builder.RemoveProducerDataAccess.GetProducerSubmissionsForRegisteredProducer(A <Guid> ._)) .Returns(new[] { producerSubmission }); // Act await builder.Build().HandleAsync(A.Dummy <RemoveProducer>()); // Assert A.CallTo(() => builder.RemoveProducerDataAccess.GetProducerSubmissionsForRegisteredProducer(A <Guid> ._)) .MustHaveHappened(); Assert.Equal(100, memberUpload.TotalCharges); }
public async Task CreateCustomerFile_WithFileID_CreatesFileWithCorrectFileID() { // Arrange var authority = A.Dummy <UKCompetentAuthority>(); var address = new Address( "1 High Street", null, "Some town", "Some county", "Post code", new Country(Guid.NewGuid(), "UK - England"), "01234 567890", "*****@*****.**"); var contact = new Contact("John", "Smith", "Manager"); var organisation = Organisation.CreateSoleTrader("Test organisation"); var scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy <ObligationType>(), authority); scheme.AddOrUpdateMainContactPerson(contact); scheme.AddOrUpdateAddress(address); var complianceYear = A.Dummy <int>(); var memberUpload = new MemberUpload( A.Dummy <Guid>(), A.Dummy <string>(), A.Dummy <List <MemberUploadError> >(), A.Dummy <decimal>(), complianceYear, scheme, A.Dummy <string>()); memberUpload.Submit(A.Dummy <User>()); var memberUploads = new List <MemberUpload> { memberUpload }; var invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy <User>()); var generator = new BySchemeCustomerFileGenerator(); ulong id = 12345; // Act var result = await generator.CreateAsync(id, invoiceRun); var customerFile = result.IbisFile; // Assert Assert.Equal((ulong)12345, customerFile.FileID); }
public async Task Execute_ProducerAsPartnership_ReturnsPartnershipName() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme1 = helper.CreateScheme(); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme1); memberUpload1.ComplianceYear = 2016; memberUpload1.IsSubmitted = true; memberUpload1.SubmittedDate = new DateTime(2015, 1, 1); ProducerSubmission producer1 = helper.CreateProducerAsPartnership(memberUpload1, "WEE/11AAAA11"); db.Model.SaveChanges(); // Act List <ProducerAmendmentsHistoryCSVData> results = await db.StoredProcedures.SpgProducerAmendmentsCSVDataByPRN("WEE/11AAAA11"); // Assert Assert.NotNull(results); Assert.Equal(1, results.Count); Assert.Equal(producer1.Business.Partnership.Name, results[0].ProducerName); } }
public async Task Execute_ProducerTypeIsPartnership_ReturnsPartnershipNameAsProducerName() { using (DatabaseWrapper db = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(db.Model); Scheme scheme1 = helper.CreateScheme(); scheme1.OrganisationId = new Guid("4EEE5942-01B2-4A4D-855A-34DEE1BBBF26"); scheme1.Organisation.Id = new Guid("4EEE5942-01B2-4A4D-855A-34DEE1BBBF26"); scheme1.Organisation.BusinessAddressId = new Guid("b58e9cb2-b97e-4141-ad32-73c70284fc77"); scheme1.Organisation.Address = helper.CreateOrganisationAddress(); scheme1.Organisation.Address.Id = new Guid("b58e9cb2-b97e-4141-ad32-73c70284fc77"); MemberUpload memberUpload1 = helper.CreateMemberUpload(scheme1); memberUpload1.ComplianceYear = 2016; memberUpload1.IsSubmitted = true; ProducerSubmission producerSubmission = helper.CreateProducerAsPartnership(memberUpload1, "WEE/99ZZZZ99"); db.Model.SaveChanges(); // Act List <ProducerPublicRegisterCSVData> results = await db.StoredProcedures.SpgProducerPublicRegisterCSVDataByComplianceYear(2016); // Assert var result = results.SingleOrDefault(i => i.PRN == "WEE/99ZZZZ99"); Assert.NotNull(result); Assert.Equal(result.ProducerName, producerSubmission.Business.Partnership.Name); } }
public async Task HandleAsync_WithErrorWhenGeneratingIbisFile_DoesNotSaveChanges_AndReturnsError() { // Arrange UKCompetentAuthority authority = new UKCompetentAuthority(Guid.NewGuid(), "Environment Agency", "EA", A.Dummy <Country>(), "*****@*****.**", 0); Scheme scheme = A.Fake <Scheme>(); A.CallTo(() => scheme.CompetentAuthority).Returns(authority); List <MemberUpload> memberUploads = new List <MemberUpload>(); MemberUpload memberUpload1 = new MemberUpload( A.Dummy <Guid>(), A.Dummy <string>(), A.Dummy <List <MemberUploadError> >(), 10, 2017, scheme, A.Dummy <string>()); memberUpload1.Submit(A.Dummy <User>()); memberUploads.Add(memberUpload1); IIssuePendingChargesDataAccess dataAccess = A.Fake <IIssuePendingChargesDataAccess>(); A.CallTo(() => dataAccess.FetchCompetentAuthority(CompetentAuthority.England)).Returns(authority); A.CallTo(() => dataAccess.FetchSubmittedNonInvoicedMemberUploadsAsync(authority)) .Returns(memberUploads); var errors = new List <string> { "error" }; IbisFileDataGeneratorResult ibisFileDataGeneratorResult = new IbisFileDataGeneratorResult(null, errors); IIbisFileDataGenerator ibisFileDataGenerator = A.Fake <IIbisFileDataGenerator>(); A.CallTo(() => ibisFileDataGenerator.CreateFileDataAsync(A <ulong> ._, A <InvoiceRun> ._)) .Returns(ibisFileDataGeneratorResult); IssuePendingChargesHandler handler = new IssuePendingChargesHandler( A.Dummy <IWeeeAuthorization>(), dataAccess, ibisFileDataGenerator, A.Dummy <IDomainUserContext>()); Requests.Charges.IssuePendingCharges request = new Requests.Charges.IssuePendingCharges(CompetentAuthority.England); // Act var result = await handler.HandleAsync(request); // Assert A.CallTo(() => dataAccess.SaveAsync(A <InvoiceRun> ._)) .MustNotHaveHappened(); Assert.Null(result.InvoiceRunId); Assert.NotEmpty(result.Errors); }
public async Task CreateCustomerFile_WithFileID_CreatesFileWithCorrectFileID() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Address address = new Address( "1 High Street", null, "Some town", "Some county", "Post code", new Country(Guid.NewGuid(), "UK - England"), "01234 567890", "*****@*****.**"); Contact contact = new Contact("John", "Smith", "Manager"); Organisation organisation = Organisation.CreateSoleTrader("Test organisation"); organisation.AddOrUpdateAddress(AddressType.OrganisationAddress, address); organisation.AddOrUpdateMainContactPerson(contact); Scheme scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear = A.Dummy<int>(); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<decimal>(), complianceYear, scheme, A.Dummy<string>()); memberUpload.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); BySchemeCustomerFileGenerator generator = new BySchemeCustomerFileGenerator(); ulong id = 12345; // Act var result = await generator.CreateAsync(id, invoiceRun); CustomerFile customerFile = result.IbisFile; // Assert Assert.Equal((ulong)12345, customerFile.FileID); }
public async Task CreateTransactionFile_WithFileID_CreatesFileWithCorrectFileID() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Organisation organisation = Organisation.CreateSoleTrader("Test organisation"); Scheme scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear = A.Dummy<int>(); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), 123.45m, complianceYear, scheme, A.Dummy<string>()); memberUpload.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); ITransactionReferenceGenerator transactionReferenceGenerator = A.Fake<ITransactionReferenceGenerator>(); A.CallTo(() => transactionReferenceGenerator.GetNextTransactionReferenceAsync()).Returns("WEE800001H"); BySchemeTransactionFileGenerator generator = new BySchemeTransactionFileGenerator( transactionReferenceGenerator); ulong id = 12345; // Act var result = await generator.CreateAsync(id, invoiceRun); TransactionFile transactionFile = result.IbisFile; // Assert Assert.Equal((ulong)12345, transactionFile.FileID); }
public void Submit_WhenNotYetSubmitted_MarksMemberUploadAsSubmitted() { // Arrange var memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<int>(), A.Dummy<int>(), A.Dummy<Scheme>(), A.Dummy<string>()); // Act memberUpload.Submit(A.Dummy<User>()); // Assert Assert.True(memberUpload.IsSubmitted); }
public static ProducerSubmission Create( ObligationType obligationType, string prn, Guid? schemeOrganisationId = null, int? complianceYear = null, ProducerBusiness producerBusiness = null, params string[] brandNames) { Scheme scheme = new Scheme( schemeOrganisationId ?? Guid.Empty); RegisteredProducer registeredProducer = new RegisteredProducer( prn, complianceYear ?? 2016, scheme); MemberUpload memberUpload = new MemberUpload( Guid.NewGuid(), "<xml>SomeData</xml>", new List<MemberUploadError>(), 0, complianceYear ?? 2016, scheme, "File name"); return new ProducerSubmission( registeredProducer, memberUpload, producerBusiness ?? new ProducerBusiness(), new AuthorisedRepresentative("authrep"), DateTime.Now, 0, true, null, "trading name", EEEPlacedOnMarketBandType.Lessthan5TEEEplacedonmarket, SellingTechniqueType.Both, obligationType, AnnualTurnOverBandType.Greaterthanonemillionpounds, brandNames.Select(bn => new BrandName(bn)).ToList(), new List<SICCode>(), new ChargeBandAmount(Guid.NewGuid(), ChargeBand.A, 123), 999); }
public void Submit_AddSubmissionEventToEventsList() { // Arrange var memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<int>(), A.Dummy<int>(), A.Dummy<Scheme>(), A.Dummy<string>()); // Act memberUpload.Submit(A.Dummy<User>()); // Assert Assert.Equal(1, memberUpload.Events.Count()); Assert.IsType<SchemeMemberSubmissionEvent>(memberUpload.Events.Single()); Assert.Same(memberUpload, ((SchemeMemberSubmissionEvent)memberUpload.Events.Single()).MemberUpload); }
public void Submit_WhenAlreadySubmitted_ThrowInvalidOperationException() { // Arrange var memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<int>(), A.Dummy<int>(), A.Dummy<Scheme>(), A.Dummy<string>()); memberUpload.Submit(A.Dummy<User>()); // Act Action action = () => memberUpload.Submit(A.Dummy<User>()); // Assert Assert.Throws<InvalidOperationException>(action); }
public async Task HandleAsync_WithInvoiceRunWithout1B1SFileData_ThrowsInvalidOperationException() { // Arrange IWeeeAuthorization authorization = AuthorizationBuilder.CreateUserWithAllRights(); UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Scheme scheme = A.Dummy<Scheme>(); A.CallTo(() => scheme.CompetentAuthority).Returns(authority); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), scheme, A.Dummy<string>(), A.Dummy<string>()); memberUpload.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); ICommonDataAccess dataAccess = A.Fake<ICommonDataAccess>(); A.CallTo(() => dataAccess.FetchInvoiceRunAsync(A<Guid>._)).Returns(invoiceRun); FetchInvoiceRunIbisZipFileHandler handler = new FetchInvoiceRunIbisZipFileHandler( authorization, dataAccess); // Act Func<Task<FileInfo>> testCode = async () => await handler.HandleAsync(A.Dummy<Requests.Charges.FetchInvoiceRunIbisZipFile>()); // Assert await Assert.ThrowsAsync<InvalidOperationException>(testCode); }
public async Task CreateTransactionFile_WithExceptionThrown_ReturnsError_AndNoTransactionFile() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Organisation organisation = Organisation.CreateSoleTrader("Test organisation"); Scheme scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear = A.Dummy<int>(); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), 123.45m, complianceYear, scheme, A.Dummy<string>()); memberUpload.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload); ITransactionReferenceGenerator transactionReferenceGenerator = A.Fake<ITransactionReferenceGenerator>(); A.CallTo(() => transactionReferenceGenerator.GetNextTransactionReferenceAsync()).Returns((string)null); // A null value will cause the Ibis object to throw an exception. BySubmissionTransactionFileGenerator generator = new BySubmissionTransactionFileGenerator(transactionReferenceGenerator); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); // Act var result = await generator.CreateAsync(0, invoiceRun); // Assert Assert.Null(result.IbisFile); Assert.NotEmpty(result.Errors); }
public async Task CreateTransactionFile_WithTwoMemberUploads_CreatesTwoInvoices() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Organisation organisation = Organisation.CreateSoleTrader("Test organisation"); Scheme scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear = A.Dummy<int>(); MemberUpload memberUpload1 = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), 100, complianceYear, scheme, A.Dummy<string>()); memberUpload1.Submit(A.Dummy<User>()); MemberUpload memberUpload2 = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), 200, complianceYear, scheme, A.Dummy<string>()); memberUpload2.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload1); memberUploads.Add(memberUpload2); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); ITransactionReferenceGenerator transactionReferenceGenerator = A.Fake<ITransactionReferenceGenerator>(); A.CallTo(() => transactionReferenceGenerator.GetNextTransactionReferenceAsync()).Returns("WEE800001H"); BySubmissionTransactionFileGenerator generator = new BySubmissionTransactionFileGenerator(transactionReferenceGenerator); // Act var result = await generator.CreateAsync(0, invoiceRun); TransactionFile transactionFile = result.IbisFile; // Assert Assert.NotNull(transactionFile); Assert.Equal(2, transactionFile.Invoices.Count); Invoice invoice1 = transactionFile.Invoices[0]; Assert.NotNull(invoice1); Assert.Equal(100m, invoice1.TransactionTotal); Invoice invoice2 = transactionFile.Invoices[1]; Assert.NotNull(invoice2); Assert.Equal(200m, invoice2.TransactionTotal); }
public async Task CreateTransactionFile_ProducerSubmissionWithNoCharge_NotIncludedInTransactionFile() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Organisation organisation = Organisation.CreateSoleTrader("Test organisation"); Scheme scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear = A.Dummy<int>(); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<decimal>(), complianceYear, scheme, A.Dummy<string>()); RegisteredProducer registeredProducer = new RegisteredProducer("WEE/11AAAA11", complianceYear, scheme); ProducerSubmission producerSubmission = new ProducerSubmission( registeredProducer, memberUpload, A.Dummy<ProducerBusiness>(), A.Dummy<AuthorisedRepresentative>(), A.Dummy<DateTime>(), A.Dummy<decimal>(), A.Dummy<bool>(), A.Dummy<DateTime?>(), A.Dummy<string>(), A.Dummy<EEEPlacedOnMarketBandType>(), A.Dummy<SellingTechniqueType>(), A.Dummy<ObligationType>(), A.Dummy<AnnualTurnOverBandType>(), A.Dummy<List<BrandName>>(), A.Dummy<List<SICCode>>(), A.Dummy<Domain.Lookup.ChargeBandAmount>(), 0); memberUpload.ProducerSubmissions.Add(producerSubmission); memberUpload.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); ByChargeValueTransactionFileGenerator generator = new ByChargeValueTransactionFileGenerator( A.Dummy<ITransactionReferenceGenerator>()); // Act var result = await generator.CreateAsync(0, invoiceRun); TransactionFile transactionFile = result.IbisFile; // Assert Assert.NotNull(transactionFile); Assert.Equal(0, transactionFile.Invoices.Count); }
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 CreateTransactionFile_ProducerSubmissionMarkedAsNotInvoiced_NotIncludedInTransactionFile() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Organisation organisation = Organisation.CreateSoleTrader("Test organisation"); Scheme scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear = A.Dummy<int>(); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<decimal>(), complianceYear, scheme, A.Dummy<string>()); var producerSubmission = A.Fake<ProducerSubmission>(); A.CallTo(() => producerSubmission.ChargeThisUpdate) .Returns(123.45m); A.CallTo(() => producerSubmission.Invoiced) .Returns(false); memberUpload.ProducerSubmissions.Add(producerSubmission); memberUpload.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); ByChargeValueTransactionFileGenerator generator = new ByChargeValueTransactionFileGenerator( A.Dummy<ITransactionReferenceGenerator>()); // Act var result = await generator.CreateAsync(0, invoiceRun); TransactionFile transactionFile = result.IbisFile; // Assert Assert.NotNull(transactionFile); Assert.Equal(0, transactionFile.Invoices.Count); }
public async Task CreateTransactionFile_WithTwoMemberUploads_CreatesTwoInvoices() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Organisation organisation = Organisation.CreateSoleTrader("Test organisation"); Scheme scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear = A.Dummy<int>(); MemberUpload memberUpload1 = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<decimal>(), complianceYear, scheme, A.Dummy<string>()); RegisteredProducer registeredProducer1 = new RegisteredProducer("WEE/11AAAA11", complianceYear, scheme); ProducerSubmission producerSubmission1 = new ProducerSubmission( registeredProducer1, memberUpload1, A.Dummy<ProducerBusiness>(), A.Dummy<AuthorisedRepresentative>(), A.Dummy<DateTime>(), A.Dummy<decimal>(), A.Dummy<bool>(), A.Dummy<DateTime?>(), A.Dummy<string>(), A.Dummy<EEEPlacedOnMarketBandType>(), A.Dummy<SellingTechniqueType>(), A.Dummy<ObligationType>(), A.Dummy<AnnualTurnOverBandType>(), A.Dummy<List<BrandName>>(), A.Dummy<List<SICCode>>(), A.Dummy<Domain.Lookup.ChargeBandAmount>(), 100m); memberUpload1.ProducerSubmissions.Add(producerSubmission1); memberUpload1.Submit(A.Dummy<User>()); MemberUpload memberUpload2 = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<decimal>(), complianceYear, scheme, A.Dummy<string>()); RegisteredProducer registeredProducer2 = new RegisteredProducer("WEE/22BBBB22", complianceYear, scheme); ProducerSubmission producerSubmission2 = new ProducerSubmission( registeredProducer2, memberUpload2, A.Dummy<ProducerBusiness>(), A.Dummy<AuthorisedRepresentative>(), A.Dummy<DateTime>(), A.Dummy<decimal>(), A.Dummy<bool>(), A.Dummy<DateTime?>(), A.Dummy<string>(), A.Dummy<EEEPlacedOnMarketBandType>(), A.Dummy<SellingTechniqueType>(), A.Dummy<ObligationType>(), A.Dummy<AnnualTurnOverBandType>(), A.Dummy<List<BrandName>>(), A.Dummy<List<SICCode>>(), A.Dummy<Domain.Lookup.ChargeBandAmount>(), 100m); memberUpload2.ProducerSubmissions.Add(producerSubmission2); memberUpload2.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload1); memberUploads.Add(memberUpload2); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); ITransactionReferenceGenerator transactionReferenceGenerator = A.Fake<ITransactionReferenceGenerator>(); A.CallTo(() => transactionReferenceGenerator.GetNextTransactionReferenceAsync()).Returns("WEE800001H"); ByChargeValueTransactionFileGenerator generator = new ByChargeValueTransactionFileGenerator(transactionReferenceGenerator); // Act var result = await generator.CreateAsync(0, invoiceRun); TransactionFile transactionFile = result.IbisFile; // Assert Assert.NotNull(transactionFile); Assert.Equal(2, transactionFile.Invoices.Count); Invoice invoice1 = transactionFile.Invoices[0]; Assert.NotNull(invoice1); Assert.Equal(100m, invoice1.TransactionTotal); Invoice invoice2 = transactionFile.Invoices[1]; Assert.NotNull(invoice2); Assert.Equal(100m, invoice2.TransactionTotal); }
public async Task CreateCustomerFile_WithTwoMemberUploadsForDifferentSchemes_CreatesTwoCustomers() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Address address1 = new Address( "1 High Street", null, "Some town", "Some county", "Post code", new Country(Guid.NewGuid(), "UK - England"), "01234 567890", "*****@*****.**"); Organisation organisation1 = Organisation.CreateSoleTrader("Test organisation 1"); organisation1.AddOrUpdateAddress(AddressType.OrganisationAddress, address1); organisation1.AddOrUpdateMainContactPerson(A.Dummy<Contact>()); Scheme scheme1 = new Scheme(organisation1); scheme1.UpdateScheme( "Test scheme 2", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear1 = A.Dummy<int>(); MemberUpload memberUpload1 = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<decimal>(), complianceYear1, scheme1, A.Dummy<string>()); memberUpload1.Submit(A.Dummy<User>()); Address address2 = new Address( "2 High Street", null, "Some town", "Some county", "Post code", new Country(Guid.NewGuid(), "UK - England"), "01234 567890", "*****@*****.**"); Organisation organisation2 = Organisation.CreateSoleTrader("Test organisation 2"); organisation2.AddOrUpdateAddress(AddressType.OrganisationAddress, address2); organisation2.AddOrUpdateMainContactPerson(A.Dummy<Contact>()); Scheme scheme2 = new Scheme(organisation2); scheme2.UpdateScheme( "Test scheme 2", "WEE/BB2222BB/SCH", "WEE00000002", A.Dummy<ObligationType>(), authority); int complianceYear2 = A.Dummy<int>(); MemberUpload memberUpload2 = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<decimal>(), complianceYear2, scheme2, A.Dummy<string>()); memberUpload2.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload1); memberUploads.Add(memberUpload2); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); BySchemeCustomerFileGenerator generator = new BySchemeCustomerFileGenerator(); // Act var result = await generator.CreateAsync(0, invoiceRun); CustomerFile customerFile = result.IbisFile; // Assert Assert.NotNull(customerFile); Assert.Equal(2, customerFile.Customers.Count); Customer customer1 = customerFile.Customers[0]; Assert.NotNull(customer1); Assert.Equal("WEE00000001", customer1.CustomerReference); Customer customer2 = customerFile.Customers[1]; Assert.NotNull(customer2); Assert.Equal("WEE00000002", customer2.CustomerReference); }
public async Task HandleAsync_WithDataReturnWithNoEee_SetsHasSubmittedEEEToFalse() { // Arrange IWeeeAuthorization authorization = AuthorizationBuilder.CreateUserWithAllRights(); Organisation organisation = Organisation.CreateSoleTrader("Trading Name"); Scheme scheme = new Scheme(organisation); RegisteredProducer registeredProducer = new RegisteredProducer("WEE/AA1111AA", 2016, scheme); Guid registeredProducerId = new Guid("75B6B4E7-BA92-477D-A6CA-C43C8C0E9823"); typeof(Entity).GetProperty("Id").SetValue(registeredProducer, registeredProducerId); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), "data", new List<MemberUploadError>(), 0, 2016, scheme, "file.xml", "UserID"); ProducerSubmission producerSubmission = new ProducerSubmission( registeredProducer, memberUpload, A.Dummy<ProducerBusiness>(), A.Dummy<AuthorisedRepresentative>(), A.Dummy<DateTime>(), A.Dummy<decimal?>(), A.Dummy<bool>(), A.Dummy<DateTime?>(), A.Dummy<string>(), A.Dummy<EEEPlacedOnMarketBandType>(), A.Dummy<SellingTechniqueType>(), A.Dummy<ObligationType>(), A.Dummy<AnnualTurnOverBandType>(), A.Dummy<List<BrandName>>(), A.Dummy<List<SICCode>>(), A.Dummy<ChargeBandAmount>(), A.Dummy<decimal>()); registeredProducer.SetCurrentSubmission(producerSubmission); DataReturn dataReturn = new DataReturn(scheme, new Quarter(2016, QuarterType.Q4)); DataReturnVersion dataReturnVersion = new DataReturnVersion(dataReturn); dataReturnVersion.Submit("UserID"); IGetProducerDetailsByRegisteredProducerIdDataAccess dataAccess = A.Fake<IGetProducerDetailsByRegisteredProducerIdDataAccess>(); A.CallTo(() => dataAccess.Fetch(registeredProducerId)).Returns(registeredProducer); A.CallTo(() => dataAccess.FetchDataReturns(scheme, 2016)).Returns(new List<DataReturn>() { dataReturn }); GetProducerDetailsByRegisteredProducerIdHandler handler = new GetProducerDetailsByRegisteredProducerIdHandler(dataAccess, authorization); // Act GetProducerDetailsByRegisteredProducerId request = new GetProducerDetailsByRegisteredProducerId(registeredProducerId); ProducerDetailsScheme result = await handler.HandleAsync(request); // Assert Assert.Equal(false, result.HasSubmittedEEE); }
public void Constuctor_Always_SetsIssuedDateToNowUtc() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Scheme scheme = A.Fake<Scheme>(); A.CallTo(() => scheme.CompetentAuthority).Returns(authority); List<MemberUpload> memberUploads = new List<MemberUpload>(); MemberUpload memberUpload1 = new MemberUpload(new Guid("A2A01A99-A97D-4219-9060-D7CDF7435114"), scheme, "data", "filename"); memberUpload1.Submit(A.Dummy<User>()); memberUploads.Add(memberUpload1); // Act SystemTime.Freeze(new DateTime(2015, 1, 1)); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); SystemTime.Unfreeze(); // Assert Assert.Equal(new DateTime(2015, 1, 1), invoiceRun.IssuedDate); }
public void Constuctor_Always_SetsIssuedByUserToIssuingUser() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Scheme scheme = A.Fake<Scheme>(); A.CallTo(() => scheme.CompetentAuthority).Returns(authority); List<MemberUpload> memberUploads = new List<MemberUpload>(); MemberUpload memberUpload1 = new MemberUpload(new Guid("A2A01A99-A97D-4219-9060-D7CDF7435114"), scheme, "data", "filename"); memberUpload1.Submit(A.Dummy<User>()); memberUploads.Add(memberUpload1); User user = A.Dummy<User>(); // Act InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, user); // Assert Assert.Equal(user, invoiceRun.IssuedByUser); }
public async Task<IEnumerable<ProducerSubmission>> GenerateProducerData(schemeType scheme, MemberUpload memberUpload, Dictionary<string, ProducerCharge> producerCharges) { if (memberUpload.ComplianceYear == null) { string errorMessage = "Producers cannot be generated for a member upload " + "that does not have a compliance year."; throw new InvalidOperationException(errorMessage); } List<ProducerSubmission> producers = new List<ProducerSubmission>(); int numberOfPrnsNeeded = scheme.producerList.Count(p => p.status == statusType.I); Queue<string> generatedPrns = await dataAccess.ComputePrns(numberOfPrnsNeeded); foreach (producerType producerData in scheme.producerList) { var producerName = producerData.GetProducerName(); if (producerCharges == null) { throw new ApplicationException("No charges have been supplied"); } if (!producerCharges.ContainsKey(producerName)) { throw new ApplicationException(string.Format("No charges have been supplied for the {0}.", producerName)); } var chargeBandAmount = producerCharges[producerName].ChargeBandAmount; var chargeThisUpdate = producerCharges[producerName].Amount; List<BrandName> brandNames = producerData.producerBrandNames.Select(name => new BrandName(name)).ToList(); List<SICCode> codes = producerData.SICCodeList.Select(name => new SICCode(name)).ToList(); ProducerBusiness producerBusiness = await SetProducerBusiness(producerData.producerBusiness); AuthorisedRepresentative authorisedRepresentative = await SetAuthorisedRepresentative(producerData.authorisedRepresentative); EEEPlacedOnMarketBandType eeebandType = Enumeration.FromValue<EEEPlacedOnMarketBandType>((int)producerData.eeePlacedOnMarketBand); SellingTechniqueType sellingTechniqueType = Enumeration.FromValue<SellingTechniqueType>((int)producerData.sellingTechnique); ObligationType obligationType = producerData.obligationType.ToDomainObligationType(); AnnualTurnOverBandType annualturnoverType = Enumeration.FromValue<AnnualTurnOverBandType>((int)producerData.annualTurnoverBand); DateTime? ceaseDate = null; if (producerData.ceaseToExistDateSpecified) { ceaseDate = producerData.ceaseToExistDate; } RegisteredProducer registeredProducer = null; string producerRegistrationNo; switch (producerData.status) { case statusType.I: producerRegistrationNo = generatedPrns.Dequeue(); break; case statusType.A: producerRegistrationNo = producerData.registrationNo; await EnsureProducerRegistrationNumberExists(producerRegistrationNo); registeredProducer = await dataAccess.FetchRegisteredProducerOrDefault( producerRegistrationNo, memberUpload.ComplianceYear.Value, memberUpload.Scheme.Id); break; default: throw new NotSupportedException(); } if (registeredProducer == null) { registeredProducer = new RegisteredProducer( producerRegistrationNo, memberUpload.ComplianceYear.Value, memberUpload.Scheme); } ProducerSubmission producer = new ProducerSubmission( registeredProducer, memberUpload, producerBusiness, authorisedRepresentative, SystemTime.UtcNow, producerData.annualTurnover, producerData.VATRegistered, ceaseDate, producerData.tradingName, eeebandType, sellingTechniqueType, obligationType, annualturnoverType, brandNames, codes, chargeBandAmount, chargeThisUpdate); // modify producer data switch (producerData.status) { case statusType.A: if (registeredProducer.CurrentSubmission == null) { producers.Add(producer); } else { if (!registeredProducer.CurrentSubmission.Equals(producer)) { producers.Add(producer); } else { /* * The producer's details are the same as the current submission for this * registration so we don't need to update them. */ } } break; case statusType.I: producers.Add(producer); break; } } return producers; }
public async Task CreateTransactionFile_WithOneMemberUpload_CreatesOneInvoiceWithOneLineItem() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Organisation organisation = Organisation.CreateSoleTrader("Test organisation"); Scheme scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear = A.Dummy<int>(); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), 123.45m, complianceYear, scheme, A.Dummy<string>()); SystemTime.Freeze(new DateTime(2015, 1, 1)); memberUpload.Submit(A.Dummy<User>()); SystemTime.Unfreeze(); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload); ITransactionReferenceGenerator transactionReferenceGenerator = A.Fake<ITransactionReferenceGenerator>(); A.CallTo(() => transactionReferenceGenerator.GetNextTransactionReferenceAsync()).Returns("WEE800001H"); BySubmissionTransactionFileGenerator generator = new BySubmissionTransactionFileGenerator(transactionReferenceGenerator); SystemTime.Freeze(new DateTime(2015, 12, 31)); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); SystemTime.Unfreeze(); // Act var result = await generator.CreateAsync(0, invoiceRun); TransactionFile transactionFile = result.IbisFile; // Assert Assert.NotNull(transactionFile); Assert.Equal(1, transactionFile.Invoices.Count); Invoice invoice = transactionFile.Invoices[0]; Assert.NotNull(invoice); Assert.Equal(TransactionType.Invoice, invoice.TransactionType); Assert.Equal("WEE800001H", invoice.TransactionReference); Assert.Equal(123.45m, invoice.TransactionTotal); Assert.Equal(null, invoice.TransactionHeaderNarrative); Assert.Equal(new DateTime(2015, 12, 31), invoice.TransactionDate); Assert.Equal(null, invoice.RelatedTransactionReference); Assert.Equal(CurrencyCode.GBP, invoice.CurrencyCode); Assert.Equal("WEE00000001", invoice.CustomerReference); Assert.NotNull(invoice.LineItems); Assert.Equal(1, invoice.LineItems.Count); InvoiceLineItem lineItem = invoice.LineItems[0]; Assert.NotNull(lineItem); Assert.Equal(123.45m, lineItem.AmountExcludingVAT); Assert.Equal("Charge for producer registration submission made on 01 Jan 2015.", lineItem.Description); Assert.Equal("H", lineItem.AreaCode); Assert.Equal("H", lineItem.ContextCode); Assert.Equal("W", lineItem.IncomeStreamCode); Assert.Equal((ulong)1, lineItem.Quantity); Assert.Equal(UnitOfMeasure.Each, lineItem.UnitOfMeasure); Assert.Equal(null, lineItem.VatCode); }
public async Task CreateTransactionFile_WithExceptionThrown_ReturnsError_AndNoTransactionFile() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Organisation organisation = Organisation.CreateSoleTrader("Test organisation"); Scheme scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear = A.Dummy<int>(); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<decimal>(), complianceYear, scheme, A.Dummy<string>()); RegisteredProducer registeredProducer = new RegisteredProducer("WEE/11AAAA11", complianceYear, scheme); ProducerSubmission producerSubmission = new ProducerSubmission( registeredProducer, memberUpload, A.Dummy<ProducerBusiness>(), A.Dummy<AuthorisedRepresentative>(), A.Dummy<DateTime>(), A.Dummy<decimal>(), A.Dummy<bool>(), A.Dummy<DateTime?>(), A.Dummy<string>(), A.Dummy<EEEPlacedOnMarketBandType>(), A.Dummy<SellingTechniqueType>(), A.Dummy<ObligationType>(), A.Dummy<AnnualTurnOverBandType>(), A.Dummy<List<BrandName>>(), A.Dummy<List<SICCode>>(), A.Dummy<Domain.Lookup.ChargeBandAmount>(), 100M); memberUpload.ProducerSubmissions.Add(producerSubmission); memberUpload.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); ITransactionReferenceGenerator transactionReferenceGenerator = A.Fake<ITransactionReferenceGenerator>(); A.CallTo(() => transactionReferenceGenerator.GetNextTransactionReferenceAsync()).Returns((string)null); // A null value will cause the Ibis object to throw an exception. ByChargeValueTransactionFileGenerator generator = new ByChargeValueTransactionFileGenerator( transactionReferenceGenerator); // Act var result = await generator.CreateAsync(0, invoiceRun); // Assert Assert.Null(result.IbisFile); Assert.NotEmpty(result.Errors); }
public async Task HandleAysnc_HappyPath_ReturnsFileInfoWithCorrectFileName() { // Arrange IWeeeAuthorization authorization = AuthorizationBuilder.CreateUserWithAllRights(); UKCompetentAuthority authority = new UKCompetentAuthority( A.Dummy<Guid>(), "Environment Agency", "EA", A.Dummy<Country>(), "*****@*****.**"); Scheme scheme = A.Dummy<Scheme>(); A.CallTo(() => scheme.CompetentAuthority).Returns(authority); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), scheme, A.Dummy<string>(), A.Dummy<string>()); memberUpload.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload); SystemTime.Freeze(new DateTime(2015, 12, 31)); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); SystemTime.Unfreeze(); ulong fileID = 123; IbisFileData ibisFileData = new IbisFileData(fileID, "Customer File.dat", "data", "Transaction File.dat", "data"); invoiceRun.SetIbisFileData(ibisFileData); ICommonDataAccess dataAccess = A.Fake<ICommonDataAccess>(); A.CallTo(() => dataAccess.FetchInvoiceRunAsync(A<Guid>._)).Returns(invoiceRun); FetchInvoiceRunIbisZipFileHandler handler = new FetchInvoiceRunIbisZipFileHandler( authorization, dataAccess); // Act FileInfo fileInfo = await handler.HandleAsync(A.Dummy<Requests.Charges.FetchInvoiceRunIbisZipFile>()); // Assert Assert.NotNull(fileInfo); Assert.Equal("WEEE invoice files 00123 2015-12-31.zip", fileInfo.FileName); }
public async Task CreateTransactionFile_WithOneProducerSubmission_CreatesOneInvoiceWithOneLineItem() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Organisation organisation = Organisation.CreateSoleTrader("Test organisation"); Scheme scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear = A.Dummy<int>(); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<decimal>(), complianceYear, scheme, A.Dummy<string>()); RegisteredProducer registeredProducer = new RegisteredProducer("WEE/11AAAA11", complianceYear, scheme); ProducerSubmission producerSubmission = new ProducerSubmission( registeredProducer, memberUpload, A.Dummy<ProducerBusiness>(), A.Dummy<AuthorisedRepresentative>(), A.Dummy<DateTime>(), A.Dummy<decimal>(), A.Dummy<bool>(), A.Dummy<DateTime?>(), A.Dummy<string>(), A.Dummy<EEEPlacedOnMarketBandType>(), A.Dummy<SellingTechniqueType>(), A.Dummy<ObligationType>(), A.Dummy<AnnualTurnOverBandType>(), A.Dummy<List<BrandName>>(), A.Dummy<List<SICCode>>(), A.Dummy<Domain.Lookup.ChargeBandAmount>(), 123.45m); memberUpload.ProducerSubmissions.Add(producerSubmission); memberUpload.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload); SystemTime.Freeze(new DateTime(2015, 12, 31)); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); SystemTime.Unfreeze(); ITransactionReferenceGenerator transactionReferenceGenerator = A.Fake<ITransactionReferenceGenerator>(); A.CallTo(() => transactionReferenceGenerator.GetNextTransactionReferenceAsync()).Returns("WEE800001H"); ByChargeValueTransactionFileGenerator generator = new ByChargeValueTransactionFileGenerator(transactionReferenceGenerator); // Act var result = await generator.CreateAsync(0, invoiceRun); TransactionFile transactionFile = result.IbisFile; // Assert Assert.NotNull(transactionFile); Assert.Equal(1, transactionFile.Invoices.Count); Invoice invoice = transactionFile.Invoices[0]; Assert.NotNull(invoice); Assert.Equal(TransactionType.Invoice, invoice.TransactionType); Assert.Equal("WEE800001H", invoice.TransactionReference); Assert.Equal(123.45m, invoice.TransactionTotal); Assert.Equal(null, invoice.TransactionHeaderNarrative); Assert.Equal(new DateTime(2015, 12, 31), invoice.TransactionDate); Assert.Equal(null, invoice.RelatedTransactionReference); Assert.Equal(CurrencyCode.GBP, invoice.CurrencyCode); Assert.Equal("WEE00000001", invoice.CustomerReference); Assert.NotNull(invoice.LineItems); Assert.Equal(1, invoice.LineItems.Count); InvoiceLineItem lineItem = invoice.LineItems[0]; Assert.NotNull(lineItem); Assert.Equal(123.45m, lineItem.AmountExcludingVAT); Assert.Equal("1 producer registration charge at £123.45.", lineItem.Description); Assert.Equal("H", lineItem.AreaCode); Assert.Equal("H", lineItem.ContextCode); Assert.Equal("W", lineItem.IncomeStreamCode); Assert.Equal((ulong)1, lineItem.Quantity); Assert.Equal(UnitOfMeasure.Each, lineItem.UnitOfMeasure); Assert.Equal(null, lineItem.VatCode); }
private MemberUpload ValidMemberUpload(Guid pcsId) { memberUploadRowVersion++; var upload = new MemberUpload(pcsId, "<xml>somexml</xml>", new List<MemberUploadError>(), 0) { RowVersion = memberUploadRowVersion.ToByteArray(), }; upload.Submit(); return upload; }
public async Task HandleAsync_Always_FetchesChargesFromDataAccessCreatesDomainObjectAndSaves() { // Arrange IWeeeAuthorization authorization = AuthorizationBuilder.CreateUserWithAllRights(); UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Scheme scheme = A.Fake<Scheme>(); A.CallTo(() => scheme.CompetentAuthority).Returns(authority); List<MemberUpload> memberUploads = new List<MemberUpload>(); MemberUpload memberUpload1 = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), 10, 2017, scheme, A.Dummy<string>()); memberUpload1.Submit(A.Dummy<User>()); MemberUpload memberUpload2 = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), 20, 2017, scheme, A.Dummy<string>()); memberUpload2.Submit(A.Dummy<User>()); memberUploads.Add(memberUpload1); memberUploads.Add(memberUpload2); IIssuePendingChargesDataAccess dataAccess = A.Fake<IIssuePendingChargesDataAccess>(); A.CallTo(() => dataAccess.FetchCompetentAuthority(CompetentAuthority.NorthernIreland)).Returns(authority); A.CallTo(() => dataAccess.FetchSubmittedNonInvoicedMemberUploadsAsync(authority)) .Returns(memberUploads); InvoiceRun capturedInvoiceRun = null; A.CallTo(() => dataAccess.SaveAsync(A<InvoiceRun>._)) .Invokes(call => { capturedInvoiceRun = call.Arguments.Get<InvoiceRun>("invoiceRun"); }) .Returns(Task.FromResult(true)); IssuePendingChargesHandler handler = new IssuePendingChargesHandler( authorization, dataAccess, A.Dummy<IIbisFileDataGenerator>(), A.Dummy<IDomainUserContext>()); Requests.Charges.IssuePendingCharges request = new Requests.Charges.IssuePendingCharges(CompetentAuthority.NorthernIreland); // Act var result = await handler.HandleAsync(request); Guid invoiceRunId = result.InvoiceRunId.Value; // Assert Assert.NotNull(capturedInvoiceRun); Assert.Equal(capturedInvoiceRun.Id, invoiceRunId); Assert.Equal(2, capturedInvoiceRun.MemberUploads.Count); Assert.Equal(authority, capturedInvoiceRun.CompetentAuthority); }
public async Task HandleAsync_WithErrorWhenGeneratingIbisFile_DoesNotSaveChanges_AndReturnsError() { // Arrange UKCompetentAuthority authority = new UKCompetentAuthority(Guid.NewGuid(), "Environment Agency", "EA", A.Dummy<Country>(), "*****@*****.**"); Scheme scheme = A.Fake<Scheme>(); A.CallTo(() => scheme.CompetentAuthority).Returns(authority); List<MemberUpload> memberUploads = new List<MemberUpload>(); MemberUpload memberUpload1 = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), 10, 2017, scheme, A.Dummy<string>()); memberUpload1.Submit(A.Dummy<User>()); memberUploads.Add(memberUpload1); IIssuePendingChargesDataAccess dataAccess = A.Fake<IIssuePendingChargesDataAccess>(); A.CallTo(() => dataAccess.FetchCompetentAuthority(CompetentAuthority.England)).Returns(authority); A.CallTo(() => dataAccess.FetchSubmittedNonInvoicedMemberUploadsAsync(authority)) .Returns(memberUploads); var errors = new List<string> { "error" }; IbisFileDataGeneratorResult ibisFileDataGeneratorResult = new IbisFileDataGeneratorResult(null, errors); IIbisFileDataGenerator ibisFileDataGenerator = A.Fake<IIbisFileDataGenerator>(); A.CallTo(() => ibisFileDataGenerator.CreateFileDataAsync(A<ulong>._, A<InvoiceRun>._)) .Returns(ibisFileDataGeneratorResult); IssuePendingChargesHandler handler = new IssuePendingChargesHandler( A.Dummy<IWeeeAuthorization>(), dataAccess, ibisFileDataGenerator, A.Dummy<IDomainUserContext>()); Requests.Charges.IssuePendingCharges request = new Requests.Charges.IssuePendingCharges(CompetentAuthority.England); // Act var result = await handler.HandleAsync(request); // Assert A.CallTo(() => dataAccess.SaveAsync(A<InvoiceRun>._)) .MustNotHaveHappened(); Assert.Null(result.InvoiceRunId); Assert.NotEmpty(result.Errors); }
public async Task CreateCustomerFile_WithExceptionThrown_ReturnsError_AndNoCustomerFile() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Address address = new Address( "1 High Street", null, "Some town", "Some county", null, // A null value will cause the Ibis class to throw an exception. new Country(Guid.NewGuid(), "UK - England"), "01234 567890", "*****@*****.**"); Contact contact = new Contact("John", "Smith", "Manager"); Organisation organisation = Organisation.CreateSoleTrader("Test organisation"); organisation.AddOrUpdateAddress(AddressType.OrganisationAddress, address); organisation.AddOrUpdateMainContactPerson(contact); Scheme scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear = A.Dummy<int>(); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<decimal>(), complianceYear, scheme, A.Dummy<string>()); memberUpload.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); BySchemeCustomerFileGenerator generator = new BySchemeCustomerFileGenerator(); // Act var result = await generator.CreateAsync(0, invoiceRun); // Assert Assert.Null(result.IbisFile); Assert.NotEmpty(result.Errors); }
public void Constructor_Always_AssignsMemberUploadsToInvoiceRun() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Scheme scheme = A.Fake<Scheme>(); A.CallTo(() => scheme.CompetentAuthority).Returns(authority); List<MemberUpload> memberUploads = new List<MemberUpload>(); MemberUpload memberUpload1 = new MemberUpload(new Guid("A2A01A99-A97D-4219-9060-D7CDF7435114"), scheme, "data", "filename"); memberUpload1.Submit(A.Dummy<User>()); memberUploads.Add(memberUpload1); // Act InvoiceRun result = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); // Assert Assert.Equal(result, memberUpload1.InvoiceRun); }
public async Task HandleAsync_HappyPath_ReturnsProducerDetailsSchemeObjectWithPerfectValue() { // Arrange Scheme scheme = new Scheme( A.Dummy<Guid>()); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<decimal>(), 2017, scheme, A.Dummy<string>(), A.Dummy<string>()); RegisteredProducer registeredProducer = new RegisteredProducer( "WEE/AA1111AA", 2017, scheme); var producer = new ProducerSubmission( registeredProducer, memberUpload, new EA.Weee.Domain.Producer.ProducerBusiness( new Company("CompanyName", "RegisteredNo", new ProducerContact(A.Dummy<string>(), A.Dummy<string>(), A.Dummy<string>(), A.Dummy<string>(), A.Dummy<string>(), A.Dummy<string>(), A.Dummy<string>(), new ProducerAddress(A.Dummy<string>(), A.Dummy<string>(), A.Dummy<string>(), A.Dummy<string>(), A.Dummy<string>(), A.Dummy<string>(), new Country(Guid.NewGuid(), A.Dummy<string>()), A.Dummy<string>())))), null, new DateTime(2015, 1, 1), 0, false, null, "Trading Name 1", EEEPlacedOnMarketBandType.Lessthan5TEEEplacedonmarket, SellingTechniqueType.Both, Domain.Obligation.ObligationType.Both, AnnualTurnOverBandType.Greaterthanonemillionpounds, new List<Domain.Producer.BrandName>(), new List<Domain.Producer.SICCode>(), A.Dummy<ChargeBandAmount>(), 0); registeredProducer.SetCurrentSubmission(producer); registeredProducer.Scheme.UpdateScheme("SchemeName", "WEE/FA9999KE/SCH", "test", ObligationType.B2B, Guid.NewGuid()); IGetProducerDetailsByRegisteredProducerIdDataAccess dataAccess = A.Fake<IGetProducerDetailsByRegisteredProducerIdDataAccess>(); A.CallTo(() => dataAccess.Fetch(registeredProducer.Id)) .Returns(registeredProducer); IWeeeAuthorization authorization = AuthorizationBuilder.CreateUserWithAllRights(); GetProducerDetailsByRegisteredProducerIdHandler handler = new GetProducerDetailsByRegisteredProducerIdHandler(dataAccess, authorization); Requests.Admin.GetProducerDetailsByRegisteredProducerId request = new Requests.Admin.GetProducerDetailsByRegisteredProducerId(registeredProducer.Id); // Act ProducerDetailsScheme result = await handler.HandleAsync(request); // Assert Assert.Equal(result.ComplianceYear, registeredProducer.ComplianceYear); Assert.Equal(result.ProducerName, registeredProducer.CurrentSubmission.OrganisationName); Assert.Equal(result.SchemeName, registeredProducer.Scheme.SchemeName); Assert.Equal(result.RegistrationNumber, registeredProducer.ProducerRegistrationNumber); }
public async Task CreateCustomerFile_WithNonUkAddress_ConcatenatesPostCodeAndCountry() { // Arrange UKCompetentAuthority authority = A.Dummy<UKCompetentAuthority>(); Address address = new Address( "1 High Street", null, "Some town", "Some county", "AABB", new Country(Guid.NewGuid(), "Netherlands"), "01234 567890", "*****@*****.**"); Contact contact = new Contact("John", "Smith", "Manager"); Organisation organisation = Organisation.CreateSoleTrader("Test organisation"); organisation.AddOrUpdateAddress(AddressType.OrganisationAddress, address); organisation.AddOrUpdateMainContactPerson(contact); Scheme scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy<ObligationType>(), authority); int complianceYear = A.Dummy<int>(); MemberUpload memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), A.Dummy<List<MemberUploadError>>(), A.Dummy<decimal>(), complianceYear, scheme, A.Dummy<string>()); memberUpload.Submit(A.Dummy<User>()); List<MemberUpload> memberUploads = new List<MemberUpload>(); memberUploads.Add(memberUpload); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); BySchemeCustomerFileGenerator generator = new BySchemeCustomerFileGenerator(); // Act var result = await generator.CreateAsync(0, invoiceRun); CustomerFile customerFile = result.IbisFile; // Assert Assert.NotNull(customerFile); Assert.Equal(1, customerFile.Customers.Count); Customer customer = customerFile.Customers[0]; Assert.Equal("AABB Netherlands", customer.Address.PostCode); }