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 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 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 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 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 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_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 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 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 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); }
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 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 void Submit_WhenContainsNoErrorsOrWarnings_SubmitsWithNoException() { var memberUpload = new MemberUpload( A.Dummy <Guid>(), A.Dummy <string>(), null, A.Dummy <int>(), A.Dummy <int>(), A.Dummy <Scheme>(), A.Dummy <string>()); var exception = Record.Exception(() => memberUpload.Submit(A.Dummy <User>())); Assert.Null(exception); Assert.True(memberUpload.IsSubmitted); }
public async Task MemberUploadSubmissionHandler_ValidMemberUploadIdAlreadySubmitted_ReturnsAlreadySubmittedMemberUploadId() { var memberUpload = new MemberUpload(pcsId, "Test data", new List <MemberUploadError>(), 0, 2016, A.Dummy <Scheme>(), "File name", A.Dummy <string>(), false); memberUpload.Submit(A.Dummy <User>()); var handler = GetPreparedHandler(new[] { memberUpload }); var memberUploadId = await handler.HandleAsync(new MemberUploadSubmission(pcsId, memberUpload.Id)); Assert.NotNull(memberUploadId); Assert.Equal(memberUploadId, memberUpload.Id); }
public void Submit_WhenContainsErrors_ThrowInvalidOperationException() { var error = new MemberUploadError(ErrorLevel.Error, A.Dummy <UploadErrorType>(), A.Dummy <string>()); var memberUpload = new MemberUpload( A.Dummy <Guid>(), A.Dummy <string>(), new List <MemberUploadError> { error }, A.Dummy <int>(), A.Dummy <int>(), A.Dummy <Scheme>(), A.Dummy <string>()); Assert.Throws <InvalidOperationException>(() => memberUpload.Submit(A.Dummy <User>())); }
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 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 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 void Submit_WhenContainsWarnings_SubmitsWithNoException() { var warning = new MemberUploadError(ErrorLevel.Warning, A.Dummy <UploadErrorType>(), A.Dummy <string>()); var memberUpload = new MemberUpload( A.Dummy <Guid>(), A.Dummy <string>(), new List <MemberUploadError> { warning }, A.Dummy <int>(), A.Dummy <int>(), A.Dummy <Scheme>(), A.Dummy <string>()); var exception = Record.Exception(() => memberUpload.Submit(A.Dummy <User>())); Assert.Null(exception); Assert.True(memberUpload.IsSubmitted); }
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_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 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_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 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 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); }
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 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, A.Dummy <StatusType>()); 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_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 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 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 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 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 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 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 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); }
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 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 void AssignToInvoiceRun_DoesNotSetRemovedProducerSubmissionAsInvoiced() { 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); registeredProducer.Remove(); 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); memberUpload.ProducerSubmissions.Add(producer); memberUpload.Submit(A.Dummy<User>()); memberUpload.AssignToInvoiceRun(A.Dummy<InvoiceRun>()); Assert.False(producer.Invoiced); }
public async Task CreateTransactionFile_WithOneMemberUpload_CreatesFileWithOneInvoiceWithOneLineItemWithCorrectDetails() { // 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); SystemTime.Freeze(new DateTime(2015, 1, 1)); memberUpload.Submit(A.Dummy <User>()); SystemTime.Unfreeze(); 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(); A.CallTo(() => transactionReferenceGenerator.GetNextTransactionReferenceAsync()).Returns("WEE800001H"); // 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 void Submit_WhenContainsNoErrorsOrWarnings_SubmitsWithNoException() { var memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), null, A.Dummy<int>(), A.Dummy<int>(), A.Dummy<Scheme>(), A.Dummy<string>()); var exception = Record.Exception(() => memberUpload.Submit(A.Dummy<User>())); Assert.Null(exception); Assert.True(memberUpload.IsSubmitted); }
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, A.Dummy <StatusType>()); 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 Submit_WhenContainsWarnings_SubmitsWithNoException() { var warning = new MemberUploadError(ErrorLevel.Warning, A.Dummy<UploadErrorType>(), A.Dummy<string>()); var memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), new List<MemberUploadError> { warning }, A.Dummy<int>(), A.Dummy<int>(), A.Dummy<Scheme>(), A.Dummy<string>()); var exception = Record.Exception(() => memberUpload.Submit(A.Dummy<User>())); Assert.Null(exception); Assert.True(memberUpload.IsSubmitted); }
public void Submit_WhenContainsErrors_ThrowInvalidOperationException() { var error = new MemberUploadError(ErrorLevel.Error, A.Dummy<UploadErrorType>(), A.Dummy<string>()); var memberUpload = new MemberUpload( A.Dummy<Guid>(), A.Dummy<string>(), new List<MemberUploadError> { error }, A.Dummy<int>(), A.Dummy<int>(), A.Dummy<Scheme>(), A.Dummy<string>()); Assert.Throws<InvalidOperationException>(() => memberUpload.Submit(A.Dummy<User>())); }
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>(), A.Dummy <string>(), false); 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, A.Dummy <StatusType>()); 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>(), A.Dummy <string>(), false); 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, A.Dummy <StatusType>()); 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_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>(), A.Dummy <string>(), false); 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, A.Dummy <StatusType>()); 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 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 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_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_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); }