Exemplo n.º 1
0
        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.");
        }
Exemplo n.º 2
0
        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.");
        }
Exemplo n.º 3
0
        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.");
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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");
            }
        }
Exemplo n.º 6
0
        public PimsLease DeletePayment(long leaseId, long leaseRowVersion, PimsLeasePayment payment)
        {
            ValidatePaymentServiceCall(leaseId, leaseRowVersion);

            _leasePaymentRepository.Delete(payment.Id);
            _leasePaymentRepository.CommitTransaction();

            return(_leaseService.GetById(leaseId));
        }
Exemplo n.º 7
0
        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));
        }
Exemplo n.º 8
0
        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));
        }
Exemplo n.º 9
0
        /// <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);
        }
Exemplo n.º 10
0
        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)));
        }
Exemplo n.º 11
0
        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.");
        }
Exemplo n.º 12
0
        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.");
        }