Только начал писать тесты. В проекте используется django-mptt. Как писать к нему тесты? SQLite.
В этом тесте user2 становится потомком user1, а user1.invite_period_expire_date присваивается значение user2.contract_date+timedelta(days=30). Только вызов user2.get_ancestors() возвращает пустой массив. В аттрибутах указаны только те поля, на которые жаловался django. Сейчас просто тесты не проходят.
from django.test import TestCase
from models import TreeNode
from datetime import date, timedelta
class TreeTest(TestCase):
def test_invite_period_works_correctly(self):
user1 = TreeNode.objects.create(id=4,
date_of_birth=date.today(),
passport_address_id=1,
identity_expire_date=date.today(),
contract_date=date(2014, 1, 1),
itn=1, account_id=1, level=1, lft=1, rght=4, tree_id=1).save()
user2 = TreeNode.objects.create(id=15,
date_of_birth=date.today(),
passport_address_id=1,
identity_expire_date=date.today(),
contract_date=date(2014, 1, 2),
itn=2, account_id=2, level=2, lft=1, rght=3, tree_id=1)\
.insert_at(TreeNode.objects.get(id=4),, save=True)
self.assertEqual(user2.get_parent_of_level(1).invite_period_expire_date, user2.contract_date + timedelta(days=30))
тестируемая модель
class TreeNode(MPTTModel):
id = models.CharField(verbose_name='Клиентский ID', max_length=10, primary_key=True)
parent = TreeForeignKey('self', verbose_name='ID пригласившего', null=True, blank=True, related_name='child')
contract_date = models.DateField(null=False, blank=False)
invite_period_expire_date = models.DateField(null=True, blank=True)
def save(self, *args, **kwargs):
super(TreeNode, self).save(*args, **kwargs)
if self.get_parent_of_level(1):
if not self.get_parent_of_level(1).invite_period_expire_date:
self.get_parent_of_level(1).start_invite_period(self.contract_date)
def start_invite_period(self, start_date):
self.invite_period_expire_date = start_date + invite_period
self.save()
def get_parent_of_level(self, level):
if self.get_level() - level >= 0:
return self.get_ancestors().get(level=self.get_level() - level)
return None