def test_loan_entity_match_then_change_loan_entity(self): """ Does match between loan_entity_deposit and loan_entity_withdraw then change loan_entity """ test_account = Account.objects.create( name='Test Account', currency=CURRENCY_CUC, balance=1000) test_loan_entity1 = LoanEntity.objects.create( name='Test Loan Entity1') test_date = timezone.now() test_amount = 100 test_status = STATUS_READY loan_entity_deposit = LoanEntityDeposit( date=test_date, account=test_account, amount=test_amount, loan_entity=test_loan_entity1, status=test_status) loan_entity_deposit = FinanceServices.save_loan_entity_deposit( user=self.test_user, loan_entity_deposit=loan_entity_deposit) loan_entity_withdraw = LoanEntityWithdraw( date=test_date, account=test_account, amount=test_amount, loan_entity=test_loan_entity1, status=test_status) loan_entity_withdraw = FinanceServices.save_loan_entity_withdraw( user=self.test_user, loan_entity_withdraw=loan_entity_withdraw) loan_entity_match = LoanEntityMatch( loan_entity_deposit=loan_entity_deposit, loan_entity_withdraw=loan_entity_withdraw, matched_amount=test_amount) loan_entity_match = FinanceServices.save_loan_entity_match(loan_entity_match) loan_entity_deposit.refresh_from_db() loan_entity_withdraw.refresh_from_db() self.assertEqual(loan_entity_deposit.matched_amount, test_amount) self.assertEqual(loan_entity_withdraw.matched_amount, test_amount) test_loan_entity2 = LoanEntity.objects.create( name='Test Loan Entity2') loan_entity_withdraw.loan_entity = test_loan_entity2 with self.assertRaisesMessage(ValidationError, ERROR_MATCH_LOAN_ENTITY): loan_entity_withdraw = FinanceServices.save_loan_entity_withdraw( user=self.test_user, loan_entity_withdraw=loan_entity_withdraw)
def test_loan_entity_match_then_increase_amount(self): """ Does match between loan_entity_deposit and loan_entity_withdraw then increase amount """ test_account = Account.objects.create( name='Test Account', currency=CURRENCY_CUC, balance=1000) test_loan_entity = LoanEntity.objects.create( name='Test Loan Entity') test_date = timezone.now() test_amount = 100 test_status = STATUS_READY loan_entity_deposit = LoanEntityDeposit( date=test_date, account=test_account, amount=test_amount, loan_entity=test_loan_entity, status=test_status) loan_entity_deposit = FinanceServices.save_loan_entity_deposit( user=self.test_user, loan_entity_deposit=loan_entity_deposit) loan_entity_withdraw = LoanEntityWithdraw( date=test_date, account=test_account, amount=test_amount, loan_entity=test_loan_entity, status=test_status) loan_entity_withdraw = FinanceServices.save_loan_entity_withdraw( user=self.test_user, loan_entity_withdraw=loan_entity_withdraw) loan_entity_match = LoanEntityMatch( loan_entity_deposit=loan_entity_deposit, loan_entity_withdraw=loan_entity_withdraw, matched_amount=test_amount) loan_entity_match = FinanceServices.save_loan_entity_match(loan_entity_match) loan_entity_deposit.refresh_from_db() loan_entity_withdraw.refresh_from_db() self.assertEqual(loan_entity_deposit.matched_amount, test_amount) self.assertEqual(loan_entity_withdraw.matched_amount, test_amount) loan_entity_withdraw.amount = loan_entity_withdraw.amount + 20 loan_entity_withdraw = FinanceServices.save_loan_entity_withdraw( user=self.test_user, loan_entity_withdraw=loan_entity_withdraw) self.assertEqual(loan_entity_withdraw.matched_amount, test_amount)
def test_loan_entity_match_different_accounts(self): """ Does match between loan_entity_deposit and loan_entity_withdraw with different accounts """ test_account1 = Account.objects.create( name='Test Account1', currency=CURRENCY_CUC, balance=1000) test_loan_entity = LoanEntity.objects.create( name='Test Loan Entity') test_date = timezone.now() test_amount = 100 test_status = STATUS_READY loan_entity_deposit = LoanEntityDeposit( date=test_date, account=test_account1, amount=test_amount, loan_entity=test_loan_entity, status=test_status) loan_entity_deposit = FinanceServices.save_loan_entity_deposit( user=self.test_user, loan_entity_deposit=loan_entity_deposit) test_account2 = Account.objects.create( name='Test Account2', currency=CURRENCY_CUC, balance=500) loan_entity_withdraw = LoanEntityWithdraw( date=test_date, account=test_account2, amount=test_amount, loan_entity=test_loan_entity, status=test_status) loan_entity_withdraw = FinanceServices.save_loan_entity_withdraw( user=self.test_user, loan_entity_withdraw=loan_entity_withdraw) loan_entity_match = LoanEntityMatch( loan_entity_deposit=loan_entity_deposit, loan_entity_withdraw=loan_entity_withdraw, matched_amount=test_amount) with self.assertRaises(ValidationError): loan_entity_match = FinanceServices.save_loan_entity_match(loan_entity_match)
def test_save_loan_entity_deposit_status_draft(self): """ Does draft loan_entity_deposit """ test_account = Account.objects.create(name='Test Account', currency=CURRENCY_CUC) test_balance = test_account.balance test_loan_entity = LoanEntity.objects.create(name='Test Loan Entity') test_date = timezone.now() test_amount = 100 test_status = STATUS_DRAFT loan_entity_deposit = LoanEntityDeposit(date=test_date, account=test_account, amount=test_amount, loan_entity=test_loan_entity, status=test_status) loan_entity_deposit = FinanceService.save_loan_entity_deposit( user=self.test_user, loan_entity_deposit=loan_entity_deposit) # account balance unchanged self.assertAccount(test_account=test_account, test_balance=test_balance) # document data auto filled self.assertDocument(loan_entity_deposit, DOC_TYPE_LOAN_ENTITY_DEPOSIT, test_account.currency) # one finantial history created finantials = loan_entity_deposit.finantialdocumenthistory_set self.assertEqual(finantials.count(), 1) # finantial history info finantial = finantials.first() self.assertFinantialHistory(test_finantial_history=finantial, test_document=loan_entity_deposit, test_user=self.test_user, test_old_status=None, test_new_status=test_status) # no accounting history created accountings = loan_entity_deposit.accountingdocumenthistory_set self.assertEqual(accountings.count(), 0)
def test_save_loan_entity_deposit_ready_then_amount_account(self): """ Does ready loan_entity_deposit and then change amount and account """ test_account1 = Account.objects.create(name='Test Account1', currency=CURRENCY_CUC) test_balance1 = test_account1.balance test_loan_entity = LoanEntity.objects.create(name='Test Loan Entity') test_date = timezone.now() test_amount1 = 100 test_status = STATUS_READY loan_entity_deposit = LoanEntityDeposit(date=test_date, account=test_account1, amount=test_amount1, loan_entity=test_loan_entity, status=test_status) loan_entity_deposit = FinanceService.save_loan_entity_deposit( user=self.test_user, loan_entity_deposit=loan_entity_deposit) # entity credit incremented self.assertLoanEntityCurrencyCreditAmount(loan_entity=test_loan_entity, currency=CURRENCY_CUC, amount=test_amount1) # account balance incremented self.assertAccount(test_account=test_account1, test_balance=test_balance1 + test_amount1) # document data auto filled self.assertDocument(loan_entity_deposit, DOC_TYPE_LOAN_ENTITY_DEPOSIT, test_account1.currency) # one finantial history created finantials = loan_entity_deposit.finantialdocumenthistory_set self.assertEqual(finantials.count(), 1) # finantial history info finantial = finantials.first() self.assertFinantialHistory(test_finantial_history=finantial, test_document=loan_entity_deposit, test_user=self.test_user, test_old_status=None, test_new_status=test_status) # one accounting history created accountings = loan_entity_deposit.accountingdocumenthistory_set self.assertEqual(accountings.count(), 1) # accounting history info accounting = accountings.first() operation = Operation.objects.get(pk=accounting.operation_id) # one movement created movements = operation.operationmovement_set self.assertEqual(movements.count(), 1) # movement info movement = movements.first() self.assertMovement(test_movement=movement, test_account=test_account1, test_movement_type=MOVEMENT_TYPE_INPUT, test_amount=test_amount1) test_account2 = Account.objects.create(name='Test Account2', currency=CURRENCY_USD) test_balance2 = test_account2.balance test_amount2 = 50 loan_entity_deposit.account = test_account2 loan_entity_deposit.amount = test_amount2 loan_entity_deposit = FinanceService.save_loan_entity_deposit( user=self.test_user, loan_entity_deposit=loan_entity_deposit) # entity credit returned to 0 self.assertLoanEntityCurrencyCreditAmount(loan_entity=test_loan_entity, currency=CURRENCY_CUC, amount=0) # entity credit incremented self.assertLoanEntityCurrencyCreditAmount(loan_entity=test_loan_entity, currency=CURRENCY_USD, amount=test_amount2) # account balance updated self.assertAccount(test_account=test_account1, test_balance=test_balance1) self.assertAccount(test_account=test_account2, test_balance=test_balance2 + test_amount2) # document data auto filled self.assertDocument(loan_entity_deposit, DOC_TYPE_LOAN_ENTITY_DEPOSIT, test_account2.currency) # no aditional finantial history finantials = loan_entity_deposit.finantialdocumenthistory_set self.assertEqual(finantials.count(), 1) # two accounting history created accountings = loan_entity_deposit.accountingdocumenthistory_set self.assertEqual(accountings.count(), 3) elements = accountings.all() # accounting history info accounting = elements[1] operation = Operation.objects.get(pk=accounting.operation_id) # one movement created movements = operation.operationmovement_set self.assertEqual(movements.count(), 1) # movement info movement = movements.first() self.assertMovement(test_movement=movement, test_account=test_account2, test_movement_type=MOVEMENT_TYPE_INPUT, test_amount=test_amount2) # accounting history info accounting = elements[2] operation = Operation.objects.get(pk=accounting.operation_id) # one movement created movements = operation.operationmovement_set self.assertEqual(movements.count(), 1) # movement info movement = movements.first() self.assertMovement(test_movement=movement, test_account=test_account1, test_movement_type=MOVEMENT_TYPE_OUTPUT, test_amount=test_amount1)
def test_save_loan_entity_deposit_status_ready(self): """ Does ready loan_entity_deposit """ test_account = Account.objects.create(name='Test Account', currency=CURRENCY_CUC) test_balance = test_account.balance test_loan_entity = LoanEntity.objects.create(name='Test Loan Entity') test_date = timezone.now() test_amount = 100 test_status = STATUS_READY loan_entity_deposit = LoanEntityDeposit(date=test_date, account=test_account, amount=test_amount, loan_entity=test_loan_entity, status=test_status) loan_entity_deposit = FinanceService.save_loan_entity_deposit( user=self.test_user, loan_entity_deposit=loan_entity_deposit) # entity credit incremented self.assertLoanEntityCurrencyCreditAmount(loan_entity=test_loan_entity, currency=CURRENCY_CUC, amount=test_amount) # account balance incremented self.assertAccount(test_account=test_account, test_balance=test_balance + test_amount) # document data auto filled self.assertDocument(loan_entity_deposit, DOC_TYPE_LOAN_ENTITY_DEPOSIT, test_account.currency) # one finantial history created finantials = loan_entity_deposit.finantialdocumenthistory_set self.assertEqual(finantials.count(), 1) # finantial history info finantial = finantials.first() self.assertFinantialHistory(test_finantial_history=finantial, test_document=loan_entity_deposit, test_user=self.test_user, test_old_status=None, test_new_status=test_status) # one accounting history created accountings = loan_entity_deposit.accountingdocumenthistory_set self.assertEqual(accountings.count(), 1) # accounting history info accounting = accountings.first() operation = Operation.objects.get(pk=accounting.operation_id) # one movement created movements = operation.operationmovement_set self.assertEqual(movements.count(), 1) # movement info movement = movements.first() self.assertMovement(test_movement=movement, test_account=test_account, test_movement_type=MOVEMENT_TYPE_INPUT, test_amount=test_amount)