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); }
/// <summary> /// Assigns the member upload to the specified invoice run. /// </summary> /// <param name="invoiceRun"></param> internal void AssignToInvoiceRun(InvoiceRun invoiceRun) { Guard.ArgumentNotNull(() => invoiceRun, invoiceRun); if (InvoiceRun != null) { string errorMessage = "Once a member upload has been assigned to an invoice run, it cannot be reassigned."; throw new InvalidOperationException(errorMessage); } if (!IsSubmitted) { string errorMessage = "An unsubmitted member upload cannot be assigned to an invoice run."; throw new InvalidOperationException(errorMessage); } InvoiceRun = invoiceRun; foreach (var producer in ProducerSubmissions) { if (!producer.RegisteredProducer.Removed) { producer.SetAsInvoiced(); } } }
public async Task FetchInvoiceRunsAsync_Always_ReturnsResultsOrderedByIssuedDateDescending() { using (DatabaseWrapper wrapper = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(wrapper.Model); AspNetUser user = helper.GetOrCreateUser("TestUser"); Weee.Tests.Core.Model.Country country = new Weee.Tests.Core.Model.Country(); country.Id = new Guid("FA20ED45-5488-491D-A117-DFC09C9C1BA2"); country.Name = "Test Country"; CompetentAuthority databaseAuthority = new CompetentAuthority(); databaseAuthority.Id = new Guid("DDE398F6-809E-416D-B70D-B36606F221FC"); databaseAuthority.Name = "Test Authority 1"; databaseAuthority.Abbreviation = "T1"; databaseAuthority.Country = country; databaseAuthority.Email = "TestEmailAddress"; databaseAuthority.AnnualChargeAmount = 0; wrapper.Model.CompetentAuthorities.Add(databaseAuthority); InvoiceRun invoiceRun1 = new InvoiceRun(); invoiceRun1.Id = new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872"); invoiceRun1.CompetentAuthority = databaseAuthority; invoiceRun1.IssuedByUserId = user.Id; invoiceRun1.IssuedDate = new DateTime(2015, 1, 2); wrapper.Model.InvoiceRuns.Add(invoiceRun1); InvoiceRun invoiceRun2 = new InvoiceRun(); invoiceRun2.Id = new Guid("728CDF55-1C3C-4BE0-80CB-0BC82CC9DFA3"); invoiceRun2.CompetentAuthority = databaseAuthority; invoiceRun2.IssuedByUserId = user.Id; invoiceRun2.IssuedDate = new DateTime(2015, 1, 1); wrapper.Model.InvoiceRuns.Add(invoiceRun2); InvoiceRun invoiceRun3 = new InvoiceRun(); invoiceRun3.Id = new Guid("B235CD4F-8188-4BC0-ADA2-55FD6B34BC01"); invoiceRun3.CompetentAuthority = databaseAuthority; invoiceRun3.IssuedByUserId = user.Id; invoiceRun3.IssuedDate = new DateTime(2015, 1, 3); wrapper.Model.InvoiceRuns.Add(invoiceRun3); wrapper.Model.SaveChanges(); UKCompetentAuthority domainAuthority = wrapper.WeeeContext.UKCompetentAuthorities.Find(databaseAuthority.Id); FetchInvoiceRunsDataAccess dataAccess = new FetchInvoiceRunsDataAccess(wrapper.WeeeContext); // Act IReadOnlyList <Domain.Charges.InvoiceRun> results = await dataAccess.FetchInvoiceRunsAsync(domainAuthority); // Assert Assert.NotNull(results); Assert.Equal(3, results.Count); Assert.Collection(results, r1 => Assert.Equal(new DateTime(2015, 1, 3), r1.IssuedDate), r2 => Assert.Equal(new DateTime(2015, 1, 2), r2.IssuedDate), r3 => Assert.Equal(new DateTime(2015, 1, 1), r3.IssuedDate)); } }
public async Task<IbisFileGeneratorResult<TransactionFile>> CreateAsync(ulong fileID, InvoiceRun invoiceRun) { TransactionFile transactionFile = new TransactionFile("WEE", fileID); var errors = new List<Exception>(); var groups = invoiceRun.MemberUploads.GroupBy(mu => mu.Scheme); foreach (var group in groups) { List<InvoiceLineItem> lineItems = new List<InvoiceLineItem>(); var lineItemErrors = new List<Exception>(); foreach (MemberUpload memberUpload in group) { DateTime submittedDate = memberUpload.SubmittedDate.Value; string description = string.Format("Charge for producer registration submission made on {0:dd MMM yyyy}.", submittedDate); try { InvoiceLineItem lineItem = new InvoiceLineItem( memberUpload.TotalCharges, description); lineItems.Add(lineItem); } catch (Exception ex) { lineItemErrors.Add(new SchemeFieldException(group.Key, ex)); } } errors.AddRange(lineItemErrors); string transactionReference = await transactionReferenceGenerator.GetNextTransactionReferenceAsync(); if (lineItemErrors.Count == 0) { try { Invoice invoice = new Invoice( group.Key.IbisCustomerReference, invoiceRun.IssuedDate, TransactionType.Invoice, transactionReference, lineItems); transactionFile.AddInvoice(invoice); } catch (Exception ex) { errors.Add(new SchemeFieldException(group.Key, ex)); } } } return new IbisFileGeneratorResult<TransactionFile>(errors.Count == 0 ? transactionFile : null, errors); }
public async Task FetchInvoiceRunsAsync_WithSpecifiedAuthority_OnlyReturnsInvoiceRunsForTheSpecifiedAuthority() { using (DatabaseWrapper wrapper = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(wrapper.Model); AspNetUser user = helper.GetOrCreateUser("TestUser"); Weee.Tests.Core.Model.Country country = new Weee.Tests.Core.Model.Country(); country.Id = new Guid("FA20ED45-5488-491D-A117-DFC09C9C1BA2"); country.Name = "Test Country"; CompetentAuthority databaseAuthority1 = new CompetentAuthority(); databaseAuthority1.Id = new Guid("DDE398F6-809E-416D-B70D-B36606F221FC"); databaseAuthority1.Name = "Test Authority 1"; databaseAuthority1.Abbreviation = "T1"; databaseAuthority1.Country = country; databaseAuthority1.Email = "TestEmailAddress"; databaseAuthority1.AnnualChargeAmount = 0; wrapper.Model.CompetentAuthorities.Add(databaseAuthority1); CompetentAuthority databaseAuthority2 = new CompetentAuthority(); databaseAuthority2.Id = new Guid("FBCEDC2F-0825-4066-B24E-86D3A2FD892B"); databaseAuthority2.Name = "Test Authority 2"; databaseAuthority2.Abbreviation = "T2"; databaseAuthority2.Country = country; databaseAuthority2.Email = "TestEmailAddress2"; databaseAuthority2.AnnualChargeAmount = 0; wrapper.Model.CompetentAuthorities.Add(databaseAuthority2); InvoiceRun invoiceRunForAuthority1 = new InvoiceRun(); invoiceRunForAuthority1.Id = new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872"); invoiceRunForAuthority1.CompetentAuthority = databaseAuthority1; invoiceRunForAuthority1.IssuedByUserId = user.Id; invoiceRunForAuthority1.IssuedDate = new DateTime(2015, 1, 1); wrapper.Model.InvoiceRuns.Add(invoiceRunForAuthority1); InvoiceRun invoiceRunForAuthority2 = new InvoiceRun(); invoiceRunForAuthority2.Id = new Guid("728CDF55-1C3C-4BE0-80CB-0BC82CC9DFA3"); invoiceRunForAuthority2.CompetentAuthority = databaseAuthority2; invoiceRunForAuthority2.IssuedByUserId = user.Id; invoiceRunForAuthority2.IssuedDate = new DateTime(2015, 1, 1); wrapper.Model.InvoiceRuns.Add(invoiceRunForAuthority2); wrapper.Model.SaveChanges(); UKCompetentAuthority domainAuthority1 = wrapper.WeeeContext.UKCompetentAuthorities.Find(databaseAuthority1.Id); FetchInvoiceRunsDataAccess dataAccess = new FetchInvoiceRunsDataAccess(wrapper.WeeeContext); // Act IReadOnlyList <Domain.Charges.InvoiceRun> results = await dataAccess.FetchInvoiceRunsAsync(domainAuthority1); // Assert Assert.NotNull(results); Assert.Equal(1, results.Count); Assert.Equal(new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872"), results[0].Id); } }
public async Task FetchInvoiceRunsAsync_WithSpecifiedAuthority_OnlyReturnsInvoiceRunsForTheSpecifiedAuthority() { using (DatabaseWrapper wrapper = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(wrapper.Model); AspNetUser user = helper.GetOrCreateUser("TestUser"); Weee.Tests.Core.Model.Country country = new Weee.Tests.Core.Model.Country(); country.Id = new Guid("FA20ED45-5488-491D-A117-DFC09C9C1BA2"); country.Name = "Test Country"; CompetentAuthority databaseAuthority1 = new CompetentAuthority(); databaseAuthority1.Id = new Guid("DDE398F6-809E-416D-B70D-B36606F221FC"); databaseAuthority1.Name = "Test Authority 1"; databaseAuthority1.Abbreviation = "T1"; databaseAuthority1.Country = country; databaseAuthority1.Email = "TestEmailAddress"; wrapper.Model.CompetentAuthorities.Add(databaseAuthority1); CompetentAuthority databaseAuthority2 = new CompetentAuthority(); databaseAuthority2.Id = new Guid("FBCEDC2F-0825-4066-B24E-86D3A2FD892B"); databaseAuthority2.Name = "Test Authority 2"; databaseAuthority2.Abbreviation = "T2"; databaseAuthority2.Country = country; databaseAuthority2.Email = "TestEmailAddress2"; wrapper.Model.CompetentAuthorities.Add(databaseAuthority2); InvoiceRun invoiceRunForAuthority1 = new InvoiceRun(); invoiceRunForAuthority1.Id = new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872"); invoiceRunForAuthority1.CompetentAuthority = databaseAuthority1; invoiceRunForAuthority1.IssuedByUserId = user.Id; invoiceRunForAuthority1.IssuedDate = new DateTime(2015, 1, 1); wrapper.Model.InvoiceRuns.Add(invoiceRunForAuthority1); InvoiceRun invoiceRunForAuthority2 = new InvoiceRun(); invoiceRunForAuthority2.Id = new Guid("728CDF55-1C3C-4BE0-80CB-0BC82CC9DFA3"); invoiceRunForAuthority2.CompetentAuthority = databaseAuthority2; invoiceRunForAuthority2.IssuedByUserId = user.Id; invoiceRunForAuthority2.IssuedDate = new DateTime(2015, 1, 1); wrapper.Model.InvoiceRuns.Add(invoiceRunForAuthority2); wrapper.Model.SaveChanges(); UKCompetentAuthority domainAuthority1 = wrapper.WeeeContext.UKCompetentAuthorities.Find(databaseAuthority1.Id); FetchInvoiceRunsDataAccess dataAccess = new FetchInvoiceRunsDataAccess(wrapper.WeeeContext); // Act IReadOnlyList<Domain.Charges.InvoiceRun> results = await dataAccess.FetchInvoiceRunsAsync(domainAuthority1); // Assert Assert.NotNull(results); Assert.Equal(1, results.Count); Assert.Equal(new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872"), results[0].Id); } }
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 HandleAysnc_HappyPath_ReturnsFileInfoWithCorrectFileName() { // Arrange IWeeeAuthorization authorization = AuthorizationBuilder.CreateUserWithAllRights(); UKCompetentAuthority authority = new UKCompetentAuthority( A.Dummy <Guid>(), "Environment Agency", "EA", A.Dummy <Country>(), "*****@*****.**", 0); 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 FetchInvoicedProducerSubmissionsAsync_ReturnsProducerSubmissionsForRemovedProducer_WhenProducerHasBeenInvoiced() { using (DatabaseWrapper database = new DatabaseWrapper()) { var helper = new ModelHelper(database.Model); var domainHelper = new DomainHelper(database.WeeeContext); // At least one user is required in the database. var user = helper.GetOrCreateUser("A user"); Weee.Tests.Core.Model.Country country = new Weee.Tests.Core.Model.Country(); country.Id = new Guid("FA20ED45-5488-491D-A117-DFC09C9C1BA2"); country.Name = "Test Country"; CompetentAuthority competentAuthority = new CompetentAuthority(); competentAuthority.Id = new Guid("DDE398F6-809E-416D-B70D-B36606F221FC"); competentAuthority.Name = "Test Authority 1"; competentAuthority.Abbreviation = "T1"; competentAuthority.Country = country; competentAuthority.Email = "TestEmailAddress"; competentAuthority.AnnualChargeAmount = 0; database.Model.CompetentAuthorities.Add(competentAuthority); InvoiceRun invoiceRunForAuthority = new InvoiceRun(); invoiceRunForAuthority.Id = new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872"); invoiceRunForAuthority.CompetentAuthority = competentAuthority; invoiceRunForAuthority.IssuedByUserId = user.Id; invoiceRunForAuthority.IssuedDate = new DateTime(2000, 12, 1); database.Model.InvoiceRuns.Add(invoiceRunForAuthority); var scheme = helper.CreateScheme(); string registrationNumber = "AAAA"; scheme.CompetentAuthorityId = competentAuthority.Id; var memberUpload = helper.CreateSubmittedMemberUpload(scheme, invoiceRunForAuthority); memberUpload.ComplianceYear = 2000; var producerSubmission = helper.CreateInvoicedProducer(memberUpload, registrationNumber); producerSubmission.RegisteredProducer.Removed = true; database.Model.SaveChanges(); UKCompetentAuthority domainAuthority = domainHelper.GetCompetentAuthority(competentAuthority.Id); FetchIssuedChargesCsvDataAccess dataAccess = new FetchIssuedChargesCsvDataAccess(database.WeeeContext); // Act var results = await dataAccess.FetchInvoicedProducerSubmissionsAsync(domainAuthority, 2000, scheme.Id); // Assert Assert.Equal(1, results.Count()); var producerResult = results.Single(); Assert.Equal(producerSubmission.Id, producerResult.Id); } }
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 FetchInvoicedProducerSubmissionsAsync_WithSpecifiedAuthorityYearAndSchemeName_OnlyReturnsProducerSubmissions() { using (DatabaseWrapper database = new DatabaseWrapper()) { var helper = new ModelHelper(database.Model); // At least one user is required in the database. var user = helper.GetOrCreateUser("A user"); Weee.Tests.Core.Model.Country country = new Weee.Tests.Core.Model.Country(); country.Id = new Guid("FA20ED45-5488-491D-A117-DFC09C9C1BA2"); country.Name = "Test Country"; CompetentAuthority databaseAuthority1 = new CompetentAuthority(); databaseAuthority1.Id = new Guid("DDE398F6-809E-416D-B70D-B36606F221FC"); databaseAuthority1.Name = "Test Authority 1"; databaseAuthority1.Abbreviation = "T1"; databaseAuthority1.Country = country; databaseAuthority1.Email = "TestEmailAddress"; databaseAuthority1.AnnualChargeAmount = 0; database.Model.CompetentAuthorities.Add(databaseAuthority1); InvoiceRun invoiceRunForAuthority1 = new InvoiceRun(); invoiceRunForAuthority1.Id = new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872"); invoiceRunForAuthority1.CompetentAuthority = databaseAuthority1; invoiceRunForAuthority1.IssuedByUserId = user.Id; invoiceRunForAuthority1.IssuedDate = new DateTime(2016, 12, 1); database.Model.InvoiceRuns.Add(invoiceRunForAuthority1); var scheme = helper.CreateScheme(); string registrationNumber = "AAAA"; scheme.CompetentAuthorityId = databaseAuthority1.Id; var memberUpload = helper.CreateSubmittedMemberUpload(scheme, invoiceRunForAuthority1); var producerSubmission = helper.CreateInvoicedProducer(memberUpload, registrationNumber); database.Model.SaveChanges(); UKCompetentAuthority domainAuthority1 = database.WeeeContext.UKCompetentAuthorities.Find(databaseAuthority1.Id); FetchIssuedChargesCsvDataAccess dataAccess = new FetchIssuedChargesCsvDataAccess(database.WeeeContext); // Act IEnumerable <Domain.Producer.ProducerSubmission> results = await dataAccess.FetchInvoicedProducerSubmissionsAsync(domainAuthority1, 2016, scheme.Id); List <Domain.Producer.ProducerSubmission> producerSubmissionList = results.ToList(); Domain.Producer.ProducerSubmission producer = results.FirstOrDefault(p => p.RegisteredProducer.ProducerRegistrationNumber == registrationNumber); // Assert Assert.NotNull(producer); Assert.Equal(producerSubmission.RegisteredProducer.ProducerRegistrationNumber, producer.RegisteredProducer.ProducerRegistrationNumber); Assert.Equal(1, producerSubmissionList.Count); } }
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"); ByChargeValueTransactionFileGenerator generator = new ByChargeValueTransactionFileGenerator(transactionReferenceGenerator); ulong id = 12345; // Act var result = await generator.CreateAsync(id, invoiceRun); TransactionFile transactionFile = result.IbisFile; // Assert Assert.Equal((ulong)12345, transactionFile.FileID); }
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>(), A.Dummy <string>(), false); 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_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 async Task FetchnvoicedMemberUploadsAsync_WithSpecifiedAuthority_OOnlyReturnsInvoicedMemberUploadsForTheSpecifiedAuthority() { using (DatabaseWrapper wrapper = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(wrapper.Model); AspNetUser user = helper.GetOrCreateUser("TestUser"); Weee.Tests.Core.Model.Country country = new Weee.Tests.Core.Model.Country(); country.Id = new Guid("FA20ED45-5488-491D-A117-DFC09C9C1BA2"); country.Name = "Test Country"; CompetentAuthority databaseAuthority1 = new CompetentAuthority(); databaseAuthority1.Id = new Guid("DDE398F6-809E-416D-B70D-B36606F221FC"); databaseAuthority1.Name = "Test Authority 1"; databaseAuthority1.Abbreviation = "T1"; databaseAuthority1.Country = country; databaseAuthority1.Email = "TestEmailAddress"; databaseAuthority1.AnnualChargeAmount = 0; wrapper.Model.CompetentAuthorities.Add(databaseAuthority1); InvoiceRun invoiceRunForAuthority1 = new InvoiceRun(); invoiceRunForAuthority1.Id = new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872"); invoiceRunForAuthority1.CompetentAuthority = databaseAuthority1; invoiceRunForAuthority1.IssuedByUserId = user.Id; invoiceRunForAuthority1.IssuedDate = new DateTime(2015, 1, 1); wrapper.Model.InvoiceRuns.Add(invoiceRunForAuthority1); var scheme = helper.CreateScheme(); scheme.CompetentAuthorityId = databaseAuthority1.Id; var memberUpload = helper.CreateSubmittedMemberUpload(scheme, invoiceRunForAuthority1); wrapper.Model.SaveChanges(); UKCompetentAuthority domainAuthority1 = wrapper.WeeeContext.UKCompetentAuthorities.Find(databaseAuthority1.Id); CommonDataAccess dataAccess = new CommonDataAccess(wrapper.WeeeContext); // Act IReadOnlyList <Domain.Scheme.MemberUpload> results = await dataAccess.FetchInvoicedMemberUploadsAsync(domainAuthority1); // Assert Assert.NotNull(results); Assert.Equal(1, results.Count); Assert.Equal(memberUpload.Id, results[0].Id); } }
public async Task FetchnvoicedMemberUploadsAsync_WithSpecifiedAuthority_OOnlyReturnsInvoicedMemberUploadsForTheSpecifiedAuthority() { using (DatabaseWrapper wrapper = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(wrapper.Model); AspNetUser user = helper.GetOrCreateUser("TestUser"); Weee.Tests.Core.Model.Country country = new Weee.Tests.Core.Model.Country(); country.Id = new Guid("FA20ED45-5488-491D-A117-DFC09C9C1BA2"); country.Name = "Test Country"; CompetentAuthority databaseAuthority1 = new CompetentAuthority(); databaseAuthority1.Id = new Guid("DDE398F6-809E-416D-B70D-B36606F221FC"); databaseAuthority1.Name = "Test Authority 1"; databaseAuthority1.Abbreviation = "T1"; databaseAuthority1.Country = country; databaseAuthority1.Email = "TestEmailAddress"; wrapper.Model.CompetentAuthorities.Add(databaseAuthority1); InvoiceRun invoiceRunForAuthority1 = new InvoiceRun(); invoiceRunForAuthority1.Id = new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872"); invoiceRunForAuthority1.CompetentAuthority = databaseAuthority1; invoiceRunForAuthority1.IssuedByUserId = user.Id; invoiceRunForAuthority1.IssuedDate = new DateTime(2015, 1, 1); wrapper.Model.InvoiceRuns.Add(invoiceRunForAuthority1); var scheme = helper.CreateScheme(); scheme.CompetentAuthorityId = databaseAuthority1.Id; var memberUpload = helper.CreateSubmittedMemberUpload(scheme, invoiceRunForAuthority1); wrapper.Model.SaveChanges(); UKCompetentAuthority domainAuthority1 = wrapper.WeeeContext.UKCompetentAuthorities.Find(databaseAuthority1.Id); CommonDataAccess dataAccess = new CommonDataAccess(wrapper.WeeeContext); // Act IReadOnlyList<Domain.Scheme.MemberUpload> results = await dataAccess.FetchInvoicedMemberUploadsAsync(domainAuthority1); // Assert Assert.NotNull(results); Assert.Equal(1, results.Count); Assert.Equal(memberUpload.Id, results[0].Id); } }
/// <summary> /// Returns th invoice run with the specified ID. /// The 1B1S file data domain object will be pre-loaded where it is available. /// </summary> /// <param name="invoiceRunId"></param> /// <returns></returns> public async Task <InvoiceRun> FetchInvoiceRunAsync(Guid invoiceRunId) { InvoiceRun invoiceRun = await Context.InvoiceRuns .Include(ir => ir.IbisFileData) .SingleOrDefaultAsync(ir => ir.Id == invoiceRunId); if (invoiceRun == null) { string errorMessage = string.Format( "No invoice run with ID \"{0}\" was found in the database", invoiceRunId); throw new Exception(errorMessage); } return(invoiceRun); }
public async Task CreateCustomerFile_WithExceptionThrown_ReturnsError_AndNoCustomerFile() { // Arrange var authority = A.Dummy <UKCompetentAuthority>(); var organisation = Organisation.CreateSoleTrader("Test organisation"); var scheme = new Scheme(organisation); scheme.UpdateScheme( "Test scheme", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy <ObligationType>(), authority); 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>(), A.Dummy <string>(), false); memberUpload.Submit(A.Dummy <User>()); var memberUploads = new List <MemberUpload> { memberUpload }; var invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy <User>()); var generator = new BySchemeCustomerFileGenerator(); // Act var result = await generator.CreateAsync(0, invoiceRun); // Assert Assert.Null(result.IbisFile); Assert.NotEmpty(result.Errors); }
public async Task FetchInvoiceRunsAsync_Always_EagerLoadsIssuedByUser() { using (DatabaseWrapper wrapper = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(wrapper.Model); AspNetUser user = helper.GetOrCreateUser("TestUser"); Weee.Tests.Core.Model.Country country = new Weee.Tests.Core.Model.Country(); country.Id = new Guid("FA20ED45-5488-491D-A117-DFC09C9C1BA2"); country.Name = "Test Country"; CompetentAuthority databaseAuthority = new CompetentAuthority(); databaseAuthority.Id = new Guid("DDE398F6-809E-416D-B70D-B36606F221FC"); databaseAuthority.Name = "Test Authority 1"; databaseAuthority.Abbreviation = "T1"; databaseAuthority.Country = country; databaseAuthority.Email = "TestEmailAddress"; databaseAuthority.AnnualChargeAmount = 0; wrapper.Model.CompetentAuthorities.Add(databaseAuthority); InvoiceRun invoiceRun = new InvoiceRun(); invoiceRun.Id = new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872"); invoiceRun.CompetentAuthority = databaseAuthority; invoiceRun.IssuedByUserId = user.Id; invoiceRun.IssuedDate = new DateTime(2015, 1, 2); wrapper.Model.InvoiceRuns.Add(invoiceRun); wrapper.Model.SaveChanges(); UKCompetentAuthority domainAuthority = wrapper.WeeeContext.UKCompetentAuthorities.Find(databaseAuthority.Id); FetchInvoiceRunsDataAccess dataAccess = new FetchInvoiceRunsDataAccess(wrapper.WeeeContext); // Act IReadOnlyList <Domain.Charges.InvoiceRun> results = await dataAccess.FetchInvoiceRunsAsync(domainAuthority); // Assert Assert.NotNull(results); Assert.Equal(1, results.Count); Assert.NotNull(results[0].IssuedByUser); } }
public Task<IbisFileGeneratorResult<CustomerFile>> CreateAsync(ulong fileID, InvoiceRun invoiceRun) { CustomerFile customerFile = new CustomerFile("WEE", fileID); var errors = new List<Exception>(); IEnumerable<Scheme> schemes = invoiceRun.MemberUploads .Select(mu => mu.Scheme) .Distinct(); foreach (Scheme scheme in schemes) { try { var postCode = GetIbisPostCode(scheme.Organisation.OrganisationAddress); Address address = new Address( scheme.Organisation.Contact.FullName, scheme.Organisation.OrganisationAddress.Address1, scheme.Organisation.OrganisationAddress.Address2, null, scheme.Organisation.OrganisationAddress.TownOrCity, scheme.Organisation.OrganisationAddress.CountyOrRegion, postCode); Customer customer = new Customer( scheme.IbisCustomerReference, scheme.Organisation.OrganisationName, address); customerFile.AddCustomer(customer); } catch (Exception ex) { errors.Add(new SchemeFieldException(scheme, ex)); } } var ibisFileGeneratorResult = new IbisFileGeneratorResult<CustomerFile>(errors.Count == 0 ? customerFile : null, errors); return Task.FromResult(ibisFileGeneratorResult); }
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 void Constructor_WithMemberUploadAlreadyAssignedToInvoiceRun_ThrowsInvalidOperationException() { // 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); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy<User>()); // Act Func<InvoiceRun> testCode = () => new InvoiceRun(authority, memberUploads, A.Dummy<User>()); // Assert Assert.Throws<InvalidOperationException>(testCode); }
public async Task <IssuePendingChargesResult> HandleAsync(Requests.Charges.IssuePendingCharges message) { authorization.EnsureCanAccessInternalArea(true); authorization.EnsureUserInRole(Roles.InternalAdmin); UKCompetentAuthority authority = await dataAccess.FetchCompetentAuthority(message.Authority); IReadOnlyList <MemberUpload> memberUploads = await dataAccess.FetchSubmittedNonInvoicedMemberUploadsAsync(authority); User issuingUser = await domainUserContext.GetCurrentUserAsync(); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, issuingUser); var result = new IssuePendingChargesResult(); result.Errors = new List <string>(); if (authority.Name == "Environment Agency") { ulong fileId = await GetNextIbisFileId(); IbisFileDataGeneratorResult ibisFileDataGeneratorResult = await ibisFileDataGenerator.CreateFileDataAsync(fileId, invoiceRun); result.Errors.AddRange(ibisFileDataGeneratorResult.Errors); if (result.Errors.Count == 0) { IbisFileData ibisFileData = ibisFileDataGeneratorResult.IbisFileData; invoiceRun.SetIbisFileData(ibisFileData); } } if (result.Errors.Count == 0) { await dataAccess.SaveAsync(invoiceRun); result.InvoiceRunId = invoiceRun.Id; } return(result); }
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 void CreateTransactionFile_GivenMemberUploadSchemeHasNoAnnualAmount_DescriptionShouldNotContainAnnualCharge() { var organisation = A.Fake <Organisation>(); var authority = A.Fake <UKCompetentAuthority>(); var scheme = A.Fake <Scheme>(); var memberUpload = new MemberUpload( A.Dummy <Guid>(), A.Dummy <string>(), A.Dummy <List <MemberUploadError> >(), 123.45m, A.Dummy <int>(), scheme, A.Dummy <string>(), A.Dummy <string>(), false); SystemTime.Freeze(new DateTime(2019, 1, 1)); memberUpload.Submit(A.Dummy <User>()); SystemTime.Unfreeze(); A.CallTo(() => authority.AnnualChargeAmount).Returns(0); A.CallTo(() => scheme.IbisCustomerReference).Returns("WEE00000002"); A.CallTo(() => scheme.Organisation).Returns(organisation); A.CallTo(() => scheme.CompetentAuthority).Returns(authority); A.CallTo(() => transactionReferenceGenerator.GetNextTransactionReferenceAsync()).Returns("WEE800001H"); var memberUploads = new List <MemberUpload>() { memberUpload }; var invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy <User>()); var result = await generator.CreateAsync(0, invoiceRun); Assert.Equal(result.IbisFile.Invoices[0].LineItems[0].Description, "Charge for producer registration submission made on 01 Jan 2019."); }
public void Constructor_WithMemberUploadAlreadyAssignedToInvoiceRun_ThrowsInvalidOperationException() { // 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); InvoiceRun invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy <User>()); // Act Func <InvoiceRun> testCode = () => new InvoiceRun(authority, memberUploads, A.Dummy <User>()); // Assert Assert.Throws <InvalidOperationException>(testCode); }
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 <FileInfo> HandleAsync(Requests.Charges.FetchInvoiceRunIbisZipFile message) { authorization.EnsureCanAccessInternalArea(true); InvoiceRun invoiceRun = await dataAccess.FetchInvoiceRunAsync(message.InvoiceRunId); if (invoiceRun.IbisFileData == null) { string errorMessage = string.Format( "The invoice run 1B1S zip file cannot be fetched for the invoice run " + "with ID \"{0}\" as it does not have 1B1S file data.", message.InvoiceRunId); throw new InvalidOperationException(errorMessage); } string fileName = string.Format( "WEEE invoice files {0:D5} {1:yyyy-MM-dd}.zip", invoiceRun.IbisFileData.FileId, invoiceRun.IssuedDate); byte[] data = null; using (var stream = new System.IO.MemoryStream()) { using (ZipFile zip = new ZipFile()) { zip.AddEntry(invoiceRun.IbisFileData.CustomerFileName, invoiceRun.IbisFileData.CustomerFileData); zip.AddEntry(invoiceRun.IbisFileData.TransactionFileName, invoiceRun.IbisFileData.TransactionFileData); zip.Save(stream); data = stream.ToArray(); } } return(new FileInfo(fileName, data)); }
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 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); }
/// <summary> /// Adds the specified invoice run to the database and saves changes. /// </summary> /// <param name="invoiceRun"></param> /// <returns></returns> public async Task SaveAsync(InvoiceRun invoiceRun) { Context.InvoiceRuns.Add(invoiceRun); await Context.SaveChangesAsync(); }
public async Task<IbisFileGeneratorResult<TransactionFile>> CreateAsync(ulong fileID, InvoiceRun invoiceRun) { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); var errors = new List<Exception>(); TransactionFile transactionFile = new TransactionFile("WEE", fileID); foreach (MemberUpload memberUpload in invoiceRun.MemberUploads) { List<InvoiceLineItem> lineItems = new List<InvoiceLineItem>(); var lineItemGroups = memberUpload.ProducerSubmissions .Where(ps => ps.ChargeThisUpdate != 0) .Where(ps => ps.Invoiced) .GroupBy(ps => ps.ChargeThisUpdate) .OrderBy(g => g.Key) .Select(g => new { Charge = g.Key, Quantity = g.Count() }) .ToList(); if (lineItemGroups.Count > 0) { var lineItemErrors = new List<Exception>(); foreach (var lineItemGroup in lineItemGroups) { decimal amount = lineItemGroup.Charge * lineItemGroup.Quantity; string description = string.Format("{0} producer registration charge{1} at {2:C}.", lineItemGroup.Quantity, lineItemGroup.Quantity != 1 ? "s" : string.Empty, lineItemGroup.Charge); InvoiceLineItem lineItem; try { lineItem = new InvoiceLineItem( amount, description); lineItems.Add(lineItem); } catch (Exception ex) { lineItemErrors.Add(ex); } } errors.AddRange(lineItemErrors); if (lineItemErrors.Count == 0) { string transactionReference = await transactionReferenceGenerator.GetNextTransactionReferenceAsync(); try { Invoice invoice = new Invoice( memberUpload.Scheme.IbisCustomerReference, invoiceRun.IssuedDate, TransactionType.Invoice, transactionReference, lineItems); transactionFile.AddInvoice(invoice); } catch (Exception ex) { errors.Add(ex); } } } } return new IbisFileGeneratorResult<TransactionFile>(errors.Count == 0 ? transactionFile : null, 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_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 FetchInvoiceRunsAsync_Always_ReturnsResultsOrderedByIssuedDateDescending() { using (DatabaseWrapper wrapper = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(wrapper.Model); AspNetUser user = helper.GetOrCreateUser("TestUser"); Weee.Tests.Core.Model.Country country = new Weee.Tests.Core.Model.Country(); country.Id = new Guid("FA20ED45-5488-491D-A117-DFC09C9C1BA2"); country.Name = "Test Country"; CompetentAuthority databaseAuthority = new CompetentAuthority(); databaseAuthority.Id = new Guid("DDE398F6-809E-416D-B70D-B36606F221FC"); databaseAuthority.Name = "Test Authority 1"; databaseAuthority.Abbreviation = "T1"; databaseAuthority.Country = country; databaseAuthority.Email = "TestEmailAddress"; wrapper.Model.CompetentAuthorities.Add(databaseAuthority); InvoiceRun invoiceRun1 = new InvoiceRun(); invoiceRun1.Id = new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872"); invoiceRun1.CompetentAuthority = databaseAuthority; invoiceRun1.IssuedByUserId = user.Id; invoiceRun1.IssuedDate = new DateTime(2015, 1, 2); wrapper.Model.InvoiceRuns.Add(invoiceRun1); InvoiceRun invoiceRun2 = new InvoiceRun(); invoiceRun2.Id = new Guid("728CDF55-1C3C-4BE0-80CB-0BC82CC9DFA3"); invoiceRun2.CompetentAuthority = databaseAuthority; invoiceRun2.IssuedByUserId = user.Id; invoiceRun2.IssuedDate = new DateTime(2015, 1, 1); wrapper.Model.InvoiceRuns.Add(invoiceRun2); InvoiceRun invoiceRun3 = new InvoiceRun(); invoiceRun3.Id = new Guid("B235CD4F-8188-4BC0-ADA2-55FD6B34BC01"); invoiceRun3.CompetentAuthority = databaseAuthority; invoiceRun3.IssuedByUserId = user.Id; invoiceRun3.IssuedDate = new DateTime(2015, 1, 3); wrapper.Model.InvoiceRuns.Add(invoiceRun3); wrapper.Model.SaveChanges(); UKCompetentAuthority domainAuthority = wrapper.WeeeContext.UKCompetentAuthorities.Find(databaseAuthority.Id); FetchInvoiceRunsDataAccess dataAccess = new FetchInvoiceRunsDataAccess(wrapper.WeeeContext); // Act IReadOnlyList<Domain.Charges.InvoiceRun> results = await dataAccess.FetchInvoiceRunsAsync(domainAuthority); // Assert Assert.NotNull(results); Assert.Equal(3, results.Count); Assert.Collection(results, r1 => Assert.Equal(new DateTime(2015, 1, 3), r1.IssuedDate), r2 => Assert.Equal(new DateTime(2015, 1, 2), r2.IssuedDate), r3 => Assert.Equal(new DateTime(2015, 1, 1), r3.IssuedDate)); } }
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 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 CreateCustomerFile_WithOneMemberUpload_CreatesOneCustomer() { // 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.AddOrUpdateAddress(address); scheme.AddOrUpdateMainContactPerson(contact); 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>(), A.Dummy <string>(), false); memberUpload.Submit(A.Dummy <User>()); var memberUploads = new List <MemberUpload> { memberUpload }; var invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy <User>()); var generator = new BySchemeCustomerFileGenerator(); // Act var result = await generator.CreateAsync(0, invoiceRun); var customerFile = result.IbisFile; // Assert Assert.NotNull(customerFile); Assert.Equal(1, customerFile.Customers.Count); var customer = customerFile.Customers[0]; Assert.NotNull(customer); Assert.Equal("WEE00000001", customer.CustomerReference); Assert.Equal("Test organisation", customer.Name); Assert.NotNull(customer.Address); Assert.Equal("John Smith", customer.Address.AddressLine1); Assert.Equal("1 High Street", customer.Address.AddressLine2); Assert.Equal(null, customer.Address.AddressLine3); Assert.Equal(null, customer.Address.AddressLine4); Assert.Equal("Some town", customer.Address.AddressLine5); Assert.Equal("Some county", customer.Address.AddressLine6); Assert.Equal("Post code", customer.Address.PostCode); }
public async Task CreateCustomerFile_WithTwoMemberUploadsForDifferentSchemes_CreatesTwoCustomers() { // Arrange var authority = A.Dummy <UKCompetentAuthority>(); var address1 = new Address( "1 High Street", null, "Some town", "Some county", "Post code", new Country(Guid.NewGuid(), "UK - England"), "01234 567890", "*****@*****.**"); var organisation1 = Organisation.CreateSoleTrader("Test organisation 1"); var scheme1 = new Scheme(organisation1); scheme1.UpdateScheme( "Test scheme 2", "WEE/AA1111AA/SCH", "WEE00000001", A.Dummy <ObligationType>(), authority); scheme1.AddOrUpdateMainContactPerson(A.Fake <Contact>()); scheme1.AddOrUpdateAddress(address1); var complianceYear1 = A.Dummy <int>(); var memberUpload1 = new MemberUpload( A.Dummy <Guid>(), A.Dummy <string>(), A.Dummy <List <MemberUploadError> >(), A.Dummy <decimal>(), complianceYear1, scheme1, A.Dummy <string>(), A.Dummy <string>(), false); memberUpload1.Submit(A.Dummy <User>()); var address2 = new Address( "2 High Street", null, "Some town", "Some county", "Post code", new Country(Guid.NewGuid(), "UK - England"), "01234 567890", "*****@*****.**"); var organisation2 = Organisation.CreateSoleTrader("Test organisation 2"); var scheme2 = new Scheme(organisation2); scheme2.UpdateScheme( "Test scheme 2", "WEE/BB2222BB/SCH", "WEE00000002", A.Dummy <ObligationType>(), authority); scheme2.AddOrUpdateAddress(address2); scheme2.AddOrUpdateMainContactPerson(A.Fake <Contact>()); var complianceYear2 = A.Dummy <int>(); var memberUpload2 = new MemberUpload( A.Dummy <Guid>(), A.Dummy <string>(), A.Dummy <List <MemberUploadError> >(), A.Dummy <decimal>(), complianceYear2, scheme2, A.Dummy <string>(), A.Dummy <string>(), false); memberUpload2.Submit(A.Dummy <User>()); var memberUploads = new List <MemberUpload> { memberUpload1, memberUpload2 }; var invoiceRun = new InvoiceRun(authority, memberUploads, A.Dummy <User>()); var generator = new BySchemeCustomerFileGenerator(); // Act var result = await generator.CreateAsync(0, invoiceRun); var customerFile = result.IbisFile; // Assert Assert.NotNull(customerFile); Assert.Equal(2, customerFile.Customers.Count); var customer1 = customerFile.Customers[0]; Assert.NotNull(customer1); Assert.Equal("WEE00000001", customer1.CustomerReference); var customer2 = customerFile.Customers[1]; Assert.NotNull(customer2); Assert.Equal("WEE00000002", customer2.CustomerReference); }
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); }
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 FetchInvoiceRunsAsync_Always_EagerLoadsIssuedByUser() { using (DatabaseWrapper wrapper = new DatabaseWrapper()) { // Arrange ModelHelper helper = new ModelHelper(wrapper.Model); AspNetUser user = helper.GetOrCreateUser("TestUser"); Weee.Tests.Core.Model.Country country = new Weee.Tests.Core.Model.Country(); country.Id = new Guid("FA20ED45-5488-491D-A117-DFC09C9C1BA2"); country.Name = "Test Country"; CompetentAuthority databaseAuthority = new CompetentAuthority(); databaseAuthority.Id = new Guid("DDE398F6-809E-416D-B70D-B36606F221FC"); databaseAuthority.Name = "Test Authority 1"; databaseAuthority.Abbreviation = "T1"; databaseAuthority.Country = country; databaseAuthority.Email = "TestEmailAddress"; wrapper.Model.CompetentAuthorities.Add(databaseAuthority); InvoiceRun invoiceRun = new InvoiceRun(); invoiceRun.Id = new Guid("CE7A2617-AE16-403E-A7BF-BF01AD223872"); invoiceRun.CompetentAuthority = databaseAuthority; invoiceRun.IssuedByUserId = user.Id; invoiceRun.IssuedDate = new DateTime(2015, 1, 2); wrapper.Model.InvoiceRuns.Add(invoiceRun); wrapper.Model.SaveChanges(); UKCompetentAuthority domainAuthority = wrapper.WeeeContext.UKCompetentAuthorities.Find(databaseAuthority.Id); FetchInvoiceRunsDataAccess dataAccess = new FetchInvoiceRunsDataAccess(wrapper.WeeeContext); // Act IReadOnlyList<Domain.Charges.InvoiceRun> results = await dataAccess.FetchInvoiceRunsAsync(domainAuthority); // Assert Assert.NotNull(results); Assert.Equal(1, results.Count); Assert.NotNull(results[0].IssuedByUser); } }
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 GetAllInvoicedSchemesHandler_ReturnsSchemes() { // Arrange UKCompetentAuthority competentAuthority = new UKCompetentAuthority(Guid.NewGuid(), "Environment Agency", "EA", new Country(Guid.NewGuid(), "UK - England"), "*****@*****.**", 0); var scheme1 = A.Fake <Scheme>(); A.CallTo(() => scheme1.CompetentAuthority).Returns(competentAuthority); var scheme2 = A.Fake <Scheme>(); A.CallTo(() => scheme2.CompetentAuthority).Returns(competentAuthority); var scheme3 = A.Fake <Scheme>(); A.CallTo(() => scheme3.CompetentAuthority).Returns(competentAuthority); InvoiceRun invoice = A.Fake <InvoiceRun>(); var memberUpload1 = A.Fake <MemberUpload>(); A.CallTo(() => memberUpload1.ComplianceYear).Returns(2015); A.CallTo(() => memberUpload1.Scheme).Returns(scheme1); A.CallTo(() => memberUpload1.InvoiceRun).Returns(invoice); var memberUpload2 = A.Fake <MemberUpload>(); A.CallTo(() => memberUpload2.ComplianceYear).Returns(2017); A.CallTo(() => memberUpload2.Scheme).Returns(scheme2); A.CallTo(() => memberUpload2.InvoiceRun).Returns(invoice); var memberUpload3 = A.Fake <MemberUpload>(); A.CallTo(() => memberUpload3.ComplianceYear).Returns(2016); A.CallTo(() => memberUpload3.Scheme).Returns(scheme3); A.CallTo(() => memberUpload3.InvoiceRun).Returns(invoice); var schemeData1 = A.Fake <SchemeData>(); var schemeData2 = A.Fake <SchemeData>(); var schemeData3 = A.Fake <SchemeData>(); ICommonDataAccess dataAccess = A.Fake <ICommonDataAccess>(); A.CallTo(() => dataAccess.FetchInvoicedMemberUploadsAsync(competentAuthority)) .Returns(new List <MemberUpload>() { memberUpload1, memberUpload2, memberUpload3 }); IWeeeAuthorization authorization = AuthorizationBuilder.CreateUserWithAllRights(); var schemeMap = A.Fake <IMap <Scheme, SchemeData> >(); A.CallTo(() => schemeMap.Map(memberUpload1.Scheme)).Returns(schemeData1); A.CallTo(() => schemeMap.Map(memberUpload2.Scheme)).Returns(schemeData2); A.CallTo(() => schemeMap.Map(memberUpload3.Scheme)).Returns(schemeData3); FetchSchemesWithInvoicesHandler handler = new FetchSchemesWithInvoicesHandler( authorization, dataAccess, schemeMap); FetchSchemesWithInvoices request = new FetchSchemesWithInvoices(CompetentAuthority.England); A.CallTo(() => dataAccess.FetchCompetentAuthority(CompetentAuthority.England)).Returns(competentAuthority); // Act var schemesList = await handler.HandleAsync(request); //Assert Assert.NotNull(schemesList); Assert.Equal(3, schemesList.Count); Assert.Collection(schemesList, r1 => Assert.Equal(r1, schemeData1), r2 => Assert.Equal(r2, schemeData2), r3 => Assert.Equal(r3, schemeData3)); }
/// <summary> /// Retrieve all invoice runs from the system. /// </summary> /// <returns>List of all invoice runs</returns> /// <remarks> /// This returns a list of all Invoice Runs performed, include the date the run was performed. /// </remarks> public IList<InvoiceRun> GetAllInvoiceRuns() { IList<Invoice> invoices = _invoiceRepository.GetAllInvoices(); IList<InvoiceRun> runs = new List<InvoiceRun>(); var groups = invoices.GroupBy(i => i.InvoiceRunNumber); foreach (var group in groups) { // Every invoice with the same run number will have the same invoice date, // as they're all invoiced at the same time (same run). // We can use the first invoice (there must be one or the group would not exist) // to get the Invoice Date. var run = new InvoiceRun { RunNumber = group.Key, RunDate = group.ElementAt(0).ToDate, NumberOfInvoices = group.Count() }; runs.Add(run); } return runs; }
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 <IbisFileGeneratorResult <TransactionFile> > CreateAsync(ulong fileID, InvoiceRun invoiceRun) { TransactionFile transactionFile = new TransactionFile("WEE", fileID); var errors = new List <Exception>(); foreach (MemberUpload memberUpload in invoiceRun.MemberUploads) { DateTime submittedDate = memberUpload.SubmittedDate.Value; string description = string.Format("Charge for producer registration submission made on {0:dd MMM yyyy}.", submittedDate); try { InvoiceLineItem lineItem = new InvoiceLineItem( memberUpload.TotalCharges, description); string transactionReference = await transactionReferenceGenerator.GetNextTransactionReferenceAsync(); Invoice invoice = new Invoice( memberUpload.Scheme.IbisCustomerReference, invoiceRun.IssuedDate, TransactionType.Invoice, transactionReference, new List <InvoiceLineItem>() { lineItem }); transactionFile.AddInvoice(invoice); } catch (Exception ex) { errors.Add(ex); } } return(new IbisFileGeneratorResult <TransactionFile>(errors.Count == 0 ? transactionFile : null, errors)); }
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 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 async Task <IbisFileGeneratorResult <TransactionFile> > CreateAsync(ulong fileID, InvoiceRun invoiceRun) { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); var errors = new List <Exception>(); TransactionFile transactionFile = new TransactionFile("WEE", fileID); foreach (MemberUpload memberUpload in invoiceRun.MemberUploads) { List <InvoiceLineItem> lineItems = new List <InvoiceLineItem>(); var lineItemGroups = memberUpload.ProducerSubmissions .Where(ps => ps.ChargeThisUpdate != 0) .Where(ps => ps.Invoiced) .GroupBy(ps => ps.ChargeThisUpdate) .OrderBy(g => g.Key) .Select(g => new { Charge = g.Key, Quantity = g.Count() }) .ToList(); if (lineItemGroups.Count > 0) { var lineItemErrors = new List <Exception>(); foreach (var lineItemGroup in lineItemGroups) { decimal amount = lineItemGroup.Charge * lineItemGroup.Quantity; string description = string.Format("{0} producer registration charge{1} at {2:C}.", lineItemGroup.Quantity, lineItemGroup.Quantity != 1 ? "s" : string.Empty, lineItemGroup.Charge); InvoiceLineItem lineItem; try { lineItem = new InvoiceLineItem( amount, description); lineItems.Add(lineItem); } catch (Exception ex) { lineItemErrors.Add(ex); } } errors.AddRange(lineItemErrors); if (lineItemErrors.Count == 0) { string transactionReference = await transactionReferenceGenerator.GetNextTransactionReferenceAsync(); try { Invoice invoice = new Invoice( memberUpload.Scheme.IbisCustomerReference, invoiceRun.IssuedDate, TransactionType.Invoice, transactionReference, lineItems); transactionFile.AddInvoice(invoice); } catch (Exception ex) { errors.Add(ex); } } } } return(new IbisFileGeneratorResult <TransactionFile>(errors.Count == 0 ? transactionFile : null, errors)); }
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 GetAllComplianceYearsHandler_ReturnsYearsInDescendingOrder() { // Arrange UKCompetentAuthority competentAuthority = new UKCompetentAuthority(Guid.NewGuid(), "Environment Agency", "EA", new Country(Guid.NewGuid(), "UK - England"), "*****@*****.**", 0); var scheme1 = A.Fake <Scheme>(); A.CallTo(() => scheme1.SchemeName).Returns("Test1"); A.CallTo(() => scheme1.CompetentAuthority).Returns(competentAuthority); var scheme2 = A.Fake <Scheme>(); A.CallTo(() => scheme2.SchemeName).Returns("Test2"); A.CallTo(() => scheme2.CompetentAuthority).Returns(competentAuthority); var scheme3 = A.Fake <Scheme>(); A.CallTo(() => scheme3.SchemeName).Returns("Test3"); A.CallTo(() => scheme3.CompetentAuthority).Returns(competentAuthority); InvoiceRun invoice = A.Fake <InvoiceRun>(); var memberUpload1 = A.Fake <MemberUpload>(); A.CallTo(() => memberUpload1.ComplianceYear).Returns(2015); A.CallTo(() => memberUpload1.Scheme).Returns(scheme1); A.CallTo(() => memberUpload1.InvoiceRun).Returns(invoice); var memberUpload2 = A.Fake <MemberUpload>(); A.CallTo(() => memberUpload2.ComplianceYear).Returns(2017); A.CallTo(() => memberUpload2.Scheme).Returns(scheme2); A.CallTo(() => memberUpload2.InvoiceRun).Returns(invoice); var memberUpload3 = A.Fake <MemberUpload>(); A.CallTo(() => memberUpload3.ComplianceYear).Returns(2016); A.CallTo(() => memberUpload3.Scheme).Returns(scheme3); A.CallTo(() => memberUpload3.InvoiceRun).Returns(invoice); ICommonDataAccess dataAccess = A.Fake <ICommonDataAccess>(); A.CallTo(() => dataAccess.FetchInvoicedMemberUploadsAsync(competentAuthority)) .Returns(new List <MemberUpload>() { memberUpload1, memberUpload2, memberUpload3 }); IWeeeAuthorization authorization = AuthorizationBuilder.CreateUserWithAllRights(); FetchComplianceYearsWithInvoicesHandler handler = new FetchComplianceYearsWithInvoicesHandler(authorization, dataAccess); Requests.Charges.FetchComplianceYearsWithInvoices request = new Requests.Charges.FetchComplianceYearsWithInvoices(CompetentAuthority.England); A.CallTo(() => dataAccess.FetchCompetentAuthority(CompetentAuthority.England)).Returns(competentAuthority); // Act var yearsList = await handler.HandleAsync(request); Assert.NotNull(yearsList); Assert.Equal(3, yearsList.Count); Assert.Collection(yearsList, r1 => Assert.Equal("2017", r1.ToString()), r2 => Assert.Equal("2016", r2.ToString()), r3 => Assert.Equal("2015", r3.ToString())); }
public async Task <IbisFileGeneratorResult <TransactionFile> > CreateAsync(ulong fileID, InvoiceRun invoiceRun) { TransactionFile transactionFile = new TransactionFile("WEE", fileID); var errors = new List <Exception>(); var groups = invoiceRun.MemberUploads.GroupBy(mu => mu.Scheme); foreach (var group in groups) { List <InvoiceLineItem> lineItems = new List <InvoiceLineItem>(); var lineItemErrors = new List <Exception>(); foreach (MemberUpload memberUpload in group) { var submittedDate = memberUpload.SubmittedDate.Value; var competantAuthorityAnnualChargeAmount = memberUpload.Scheme.CompetentAuthority.AnnualChargeAmount; var description = string.Format("{0}.", CommonMessage(submittedDate)); if (memberUpload.HasAnnualCharge && competantAuthorityAnnualChargeAmount > 0) { description = string.Format("{0} and the {1} annual charge.", CommonMessage(submittedDate), competantAuthorityAnnualChargeAmount.Value.ToString("#,##0.00")); } try { InvoiceLineItem lineItem = new InvoiceLineItem( memberUpload.TotalCharges, description); lineItems.Add(lineItem); } catch (Exception ex) { lineItemErrors.Add(new SchemeFieldException(group.Key, ex)); } } errors.AddRange(lineItemErrors); string transactionReference = await transactionReferenceGenerator.GetNextTransactionReferenceAsync(); if (lineItemErrors.Count == 0) { try { Invoice invoice = new Invoice( group.Key.IbisCustomerReference, invoiceRun.IssuedDate, TransactionType.Invoice, transactionReference, lineItems); transactionFile.AddInvoice(invoice); } catch (Exception ex) { errors.Add(new SchemeFieldException(group.Key, ex)); } } } return(new IbisFileGeneratorResult <TransactionFile>(errors.Count == 0 ? transactionFile : null, errors)); }
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 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); }
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); }
/// <summary> /// Assigns the member upload to the specified invoice run. /// </summary> /// <param name="invoiceRun"></param> internal void AssignToInvoiceRun(InvoiceRun invoiceRun) { Guard.ArgumentNotNull(() => invoiceRun, invoiceRun); if (InvoiceRun != null) { string errorMessage = "Once a member upload has been assigned to an invoice run, it cannot be reassigned."; throw new InvalidOperationException(errorMessage); } if (!IsSubmitted) { string errorMessage = "An unsubmitted member upload cannot be assigned to an invoice run."; throw new InvalidOperationException(errorMessage); } InvoiceRun = invoiceRun; foreach (var producer in ProducerSubmissions) { if (!producer.RegisteredProducer.Removed) { producer.SetAsInvoiced(); } } }