Django-python- TestCase - транзакции никогда не должны иметь метку времени в будущем
Я работаю над платежной системой, которая регистрирует транзакции и временные метки. Я хотел бы сделать тест, чтобы убедиться, что транзакции совершаются только на прошлую дату - не должно быть возможности иметь транзакцию с будущей датой.
models.py
20 class Ledger(models.Model):
19 account = models.ForeignKey(Account, on_delete=models.PROTECT)
18 transaction = models.ForeignKey(UID, on_delete=models.PROTECT)
17 amount = models.DecimalField(max_digits=10, decimal_places=2)
16 timestamp = models.DateTimeField(auto_now_add=True, db_index=True)
15 text = models.TextField()
14
13 @classmethod
12 def transfer(cls, amount, debit_account, debit_text, credit_account, credit_text, is_loan=False) -> int:
11 assert amount >= 0, 'Negative amount not allowed for transfer.'
10 with transaction.atomic():
9 if debit_account.balance >= amount or is_loan:
8 uid = UID.uid
7 cls(amount=-amount, transaction=uid, account=debit_account, text=debit_text).save()
6 cls(amount=amount, transaction=uid, account=credit_account, text=credit_text).save()
5 else:
4 raise InsufficientFunds
3 return uid
2
1 def __str__(self):
122 return f'{self.amount} :: {self.transaction} :: {self.timestamp} :: {self.account} :: {self. text}'
Честно говоря, я даже не знаю, с чего начать тестирование этого класса, потому что тестирование для меня очень ново. Я протестировал некоторые вещи, которые я видел в Интернете, близкие к нижеприведенным, но не могу увидеть, что что-то происходит. Есть ли в этом какой-то смысл? Может быть, есть что-то, что имеет больше смысла тестировать здесь... Предложения более чем приветствуются!
tests.py
class LedgerModelTestCase(TestCase):
# def setUp(self):
1 # no data to test yet
2 def transfer_completed(self):
3 time = timezone.now() + datetime.timedelta(days=30)
4 print(time)
5 future_transfer = Ledger(timestamp=time)
6 print(future_transfer)
7 self.assertIs(future_transfer.was_published_recently(), False)
8