public void UpdatePayment_ReceivedDateOutOfRange() { // Arrange var user = PrincipalHelper.CreateForPermission(Permissions.LeaseEdit); var lease = EntityHelper.CreateLease(1); var originalPayment = new PimsLeasePayment() { PaymentReceivedDate = DateTime.Now }; var term = new PimsLeaseTerm() { TermStartDate = DateTime.Now, TermExpiryDate = DateTime.Now.AddDays(10) }; helper.CreatePimsContext(user, true).AddAndSaveChanges(lease); MockCommonServices(); leaseService.Setup(x => x.IsRowVersionEqual(It.IsAny <long>(), It.IsAny <long>())).Returns(true); leaseTermRepository.Setup(x => x.GetById(It.IsAny <long>(), It.IsAny <bool>())).Returns(term); // Act var payment = new PimsLeasePayment() { LeasePaymentId = originalPayment.LeasePaymentId, PaymentReceivedDate = DateTime.Now.AddDays(30) }; var ex = Assert.Throws <InvalidOperationException>(() => paymentService.UpdatePayment(lease.Id, 1, 1, payment)); ex.Message.Should().Be("Payment received date must be within the start and expiry date of the term."); }
public void DeleteTerm_Exer() { // Arrange var helper = new TestHelper(); var user = PrincipalHelper.CreateForPermission(Permissions.LeaseEdit); var lease = EntityHelper.CreateLease(1); var payment = new PimsLeasePayment(); var term = new PimsLeaseTerm() { TermStartDate = DateTime.Now, LeaseId = lease.Id, Lease = lease, LeaseTermStatusTypeCode = "EXER" }; lease.PimsLeaseTerms = new List <PimsLeaseTerm>() { term }; helper.CreatePimsContext(user, true).AddAndSaveChanges(lease); var service = helper.Create <LeaseTermService>(); var leaseService = helper.GetService <Mock <ILeaseService> >(); var leaseTermRepository = helper.GetService <Mock <Repositories.ILeaseTermRepository> >(); leaseService.Setup(x => x.IsRowVersionEqual(It.IsAny <long>(), It.IsAny <long>())).Returns(true); leaseTermRepository.Setup(x => x.GetByLeaseId(It.IsAny <long>())).Returns(lease.PimsLeaseTerms); leaseTermRepository.Setup(x => x.GetById(It.IsAny <long>(), It.IsAny <bool>())).Returns(term); // Act var ex = Assert.Throws <InvalidOperationException>(() => service.DeleteTerm(lease.Id, 1, term)); ex.Message.Should().Be("Exercised terms cannot be deleted. Remove all payments from this term and set this term to 'Not Exercised' to delete this term."); }
public void AddTerm_PaymentsNotExercised() { // Arrange var helper = new TestHelper(); var user = PrincipalHelper.CreateForPermission(Permissions.LeaseEdit); var lease = EntityHelper.CreateLease(1); var payment = new PimsLeasePayment(); helper.CreatePimsContext(user, true).AddAndSaveChanges(lease); var service = helper.Create <LeaseTermService>(); var leaseService = helper.GetService <Mock <ILeaseService> >(); var leaseTermRepository = helper.GetService <Mock <Repositories.ILeaseTermRepository> >(); leaseService.Setup(x => x.IsRowVersionEqual(It.IsAny <long>(), It.IsAny <long>())).Returns(true); leaseTermRepository.Setup(x => x.GetByLeaseId(It.IsAny <long>())).Returns(lease.PimsLeaseTerms); // Act var term = new PimsLeaseTerm() { TermStartDate = DateTime.MaxValue, LeaseId = lease.Id, Lease = lease, LeaseTermStatusTypeCode = "NEXER", PimsLeasePayments = new List <PimsLeasePayment>() { payment } }; var ex = Assert.Throws <InvalidOperationException>(() => service.AddTerm(lease.Id, 1, term)); ex.Message.Should().Be("Term must be 'exercised' if payments have been made."); }
public void AddPayment() { // Arrange var user = PrincipalHelper.CreateForPermission(Permissions.LeaseEdit, Permissions.LeaseView); var lease = EntityHelper.CreateLease(1); helper.CreatePimsContext(user, true).AddAndSaveChanges(lease); var term = new PimsLeaseTerm() { TermStartDate = DateTime.Now, TermExpiryDate = DateTime.Now.AddDays(10) }; MockCommonServices(); leaseService.Setup(x => x.IsRowVersionEqual(It.IsAny <long>(), It.IsAny <long>())).Returns(true); leaseService.Setup(x => x.GetById(It.IsAny <long>())).Returns(lease); leaseTermRepository.Setup(x => x.GetById(It.IsAny <long>(), true)).Returns(term); // Act var payment = new PimsLeasePayment() { PaymentReceivedDate = DateTime.Now }; var updatedLease = paymentService.AddPayment(lease.Id, 1, payment); // Assert leasePaymentRepository.Verify(x => x.Add(payment), Times.Once); leaseService.Verify(x => x.GetById(lease.Id), Times.Once); }
private static string GetPaymentStatus(PimsLeasePayment payment, PimsLeaseTerm parent) { decimal?expectedTotal = (parent.PaymentAmount ?? 0) + (parent.GstAmount ?? 0); if (payment.PaymentAmountTotal == 0) { return(PimsLeasePaymentStatusTypes.UNPAID); } else if (payment.PaymentAmountTotal < expectedTotal) { return(PimsLeasePaymentStatusTypes.PARTIAL); } else if (payment.PaymentAmountTotal == expectedTotal) { return(PimsLeasePaymentStatusTypes.PAID); } else if (payment.PaymentAmountTotal > expectedTotal) { return(PimsLeasePaymentStatusTypes.OVERPAID); } else { throw new InvalidOperationException("Invalid payment value provided"); } }
public PimsLease DeletePayment(long leaseId, long leaseRowVersion, PimsLeasePayment payment) { ValidatePaymentServiceCall(leaseId, leaseRowVersion); _leasePaymentRepository.Delete(payment.Id); _leasePaymentRepository.CommitTransaction(); return(_leaseService.GetById(leaseId)); }
public void DeletePayment_InvalidRowVersion() { // Arrange var user = PrincipalHelper.CreateForPermission(Permissions.LeaseView, Permissions.LeaseEdit); var lease = EntityHelper.CreateLease(1); helper.CreatePimsContext(user, true).AddAndSaveChanges(lease); MockCommonServices(); // Act var payment = new PimsLeasePayment(); Assert.Throws <DbUpdateConcurrencyException>(() => paymentService.DeletePayment(lease.Id, 1, payment)); }
public void DeletePayment_NotAuthorized() { // Arrange var user = PrincipalHelper.CreateForPermission(Permissions.LeaseView); var lease = EntityHelper.CreateLease(1); helper.CreatePimsContext(user, true).AddAndSaveChanges(lease); MockCommonServices(); // Act var payment = new PimsLeasePayment(); Assert.Throws <NotAuthorizedException>(() => paymentService.DeletePayment(lease.Id, 1, payment)); }
/// <summary> /// Validate that the payment received date is part of the parent term. /// </summary> /// <param name="payment"></param> private void ValidatePaymentRules(PimsLeasePayment payment) { PimsLeaseTerm leaseTerm = _leaseTermRepository.GetById(payment.LeaseTermId, true); if (leaseTerm == null) { throw new InvalidOperationException("Payment must be made against a parent term."); } if (payment.PaymentReceivedDate < leaseTerm.TermStartDate || (leaseTerm.TermExpiryDate != null && payment.PaymentReceivedDate > leaseTerm.TermExpiryDate)) { throw new InvalidOperationException("Payment received date must be within the start and expiry date of the term."); } payment.LeasePaymentStatusTypeCode = GetPaymentStatus(payment, leaseTerm); }
public void AddPayment_StatusPaymentType() { // Arrange var user = PrincipalHelper.CreateForPermission(Permissions.LeaseEdit, Permissions.LeaseView); var lease = EntityHelper.CreateLease(1); helper.CreatePimsContext(user, true).AddAndSaveChanges(lease); var term = new PimsLeaseTerm() { TermStartDate = DateTime.Now, TermExpiryDate = DateTime.Now.AddDays(10), GstAmount = 1, PaymentAmount = 1 }; MockCommonServices(); leaseService.Setup(x => x.IsRowVersionEqual(It.IsAny <long>(), It.IsAny <long>())).Returns(true); leaseService.Setup(x => x.GetById(It.IsAny <long>())).Returns(lease); leaseTermRepository.Setup(x => x.GetById(It.IsAny <long>(), true)).Returns(term); // Act var unpaidPayment = new PimsLeasePayment() { PaymentReceivedDate = DateTime.Now, PaymentAmountTotal = 0, }; var overpaidPayment = new PimsLeasePayment() { PaymentReceivedDate = DateTime.Now, PaymentAmountTotal = 3 }; var paidPayment = new PimsLeasePayment() { PaymentReceivedDate = DateTime.Now, PaymentAmountTotal = 2 }; var partialPayment = new PimsLeasePayment() { PaymentReceivedDate = DateTime.Now, PaymentAmountTotal = 1 }; paymentService.AddPayment(lease.Id, 1, unpaidPayment); paymentService.AddPayment(lease.Id, 1, overpaidPayment); paymentService.AddPayment(lease.Id, 1, paidPayment); paymentService.AddPayment(lease.Id, 1, partialPayment); // Assert leasePaymentRepository.Verify(x => x.Add(It.Is <PimsLeasePayment>(x => x.LeasePaymentStatusTypeCode == PimsLeasePaymentStatusTypes.UNPAID && x.PaymentAmountTotal == 0))); leasePaymentRepository.Verify(x => x.Add(It.Is <PimsLeasePayment>(x => x.LeasePaymentStatusTypeCode == PimsLeasePaymentStatusTypes.OVERPAID && x.PaymentAmountTotal == 3))); leasePaymentRepository.Verify(x => x.Add(It.Is <PimsLeasePayment>(x => x.LeasePaymentStatusTypeCode == PimsLeasePaymentStatusTypes.PAID && x.PaymentAmountTotal == 2))); leasePaymentRepository.Verify(x => x.Add(It.Is <PimsLeasePayment>(x => x.LeasePaymentStatusTypeCode == PimsLeasePaymentStatusTypes.PARTIAL && x.PaymentAmountTotal == 1))); }
public void DeleteTerm_Initial() { // Arrange var helper = new TestHelper(); var user = PrincipalHelper.CreateForPermission(Permissions.LeaseEdit); var lease = EntityHelper.CreateLease(1); var payment = new PimsLeasePayment(); var term = new PimsLeaseTerm() { TermStartDate = DateTime.Now, LeaseId = lease.Id, Lease = lease }; var term2 = new PimsLeaseTerm() { TermStartDate = DateTime.Now, LeaseId = lease.Id, Lease = lease }; lease.PimsLeaseTerms = new List <PimsLeaseTerm>() { term, term2 }; helper.CreatePimsContext(user, true).AddAndSaveChanges(lease); var service = helper.Create <LeaseTermService>(); var leaseService = helper.GetService <Mock <ILeaseService> >(); var leaseTermRepository = helper.GetService <Mock <Repositories.ILeaseTermRepository> >(); leaseService.Setup(x => x.IsRowVersionEqual(It.IsAny <long>(), It.IsAny <long>())).Returns(true); leaseTermRepository.Setup(x => x.GetByLeaseId(It.IsAny <long>())).Returns(lease.PimsLeaseTerms); leaseTermRepository.Setup(x => x.GetById(It.IsAny <long>(), It.IsAny <bool>())).Returns(term); // Act var ex = Assert.Throws <InvalidOperationException>(() => service.DeleteTerm(lease.Id, 1, term)); ex.Message.Should().Be("You must delete all renewals before deleting the initial term."); }
public void DeleteTerm_Payments() { // Arrange var helper = new TestHelper(); var user = PrincipalHelper.CreateForPermission(Permissions.LeaseEdit); var lease = EntityHelper.CreateLease(1); var payment = new PimsLeasePayment(); var term = new PimsLeaseTerm() { TermStartDate = DateTime.Now, LeaseId = lease.Id, Lease = lease, PimsLeasePayments = new List <PimsLeasePayment>() { payment } }; lease.PimsLeaseTerms = new List <PimsLeaseTerm>() { term }; helper.CreatePimsContext(user, true).AddAndSaveChanges(lease); var service = helper.Create <LeaseTermService>(); var leaseService = helper.GetService <Mock <ILeaseService> >(); var leaseTermRepository = helper.GetService <Mock <Repositories.ILeaseTermRepository> >(); leaseService.Setup(x => x.IsRowVersionEqual(It.IsAny <long>(), It.IsAny <long>())).Returns(true); leaseTermRepository.Setup(x => x.GetByLeaseId(It.IsAny <long>())).Returns(lease.PimsLeaseTerms); leaseTermRepository.Setup(x => x.GetById(It.IsAny <long>(), It.IsAny <bool>())).Returns(term); // Act var ex = Assert.Throws <InvalidOperationException>(() => service.DeleteTerm(lease.Id, 1, term)); ex.Message.Should().Be("A term with payments attached can not be deleted. If you intend to delete this term, you must delete each of the corresponding payments first."); }