тестировать сложный метод django, содержащий несколько полей ManyToMany, используя pytest
мое приложение:
account_engine
имеет следующие модели:
class Company(models.Model):
name = models.CharField(max_length=200)
class Location(models.Model):
name = models.CharField(max_length=200)
class Client(models.Model):
name = models.CharField(max_length=200)
class CustomPermission(models.Model):
url_name = models.CharField(max_length=200)
url = models.CharField(max_length=200)
class CustomRole(models.Model):
name = models.CharField(max_length=200)
class RoleSpecificPermission(models.Model):
role = models.ForeignKey(CustomRole, on_delete=models.CASCADE)
permission = models.ManyToManyField(CustomPermission, blank=True)
class GroupSpecificPermission(models.Model):
group = models.ForeignKey(CustomGroup, on_delete=models.CASCADE)
permission = models.ManyToManyField(CustomPermission, blank=True)
class UserDetail(models.Model):
mobile = models.CharField(max_length=10)
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
company = models.ForeignKey(Company, on_delete=models.CASCADE)
location = models.ForeignKey(Location, on_delete=models.CASCADE)
client = models.ManyToManyField(Client, blank=True)
role = models.ManyToManyField(CustomRole, blank=True)
group = models.ManyToManyField(CustomGroup, blank=True)
special_permission = models.ManyToManyField(CustomPermission, blank=True)
def get_all_permissions(self):
# adding all permissions in set to remove duplicates
final_set = set()
role_level_prem = RoleSpecificPermission.objects.filter(role__in = list(self.role.all()))
group_level_prem = GroupSpecificPermission.objects.filter(group__in = list(self.group.all()))
for each_permission_set in role_level_prem:
for each_permission in each_permission_set.permission.all():
final_set.add(each_permission)
for each_permission_set in group_level_prem:
for each_permission in each_permission_set.permission.all():
final_set.add(each_permission)
for each_permission in self.special_permission.all():
final_set.add(each_permission)
return list(final_set)
Я хочу опробовать метод
get_all_permissions
или модель
UserDetail
класс с использованием
pytest
,
pytest-django
и
mixer
мой тест выглядит следующим образом:
class TestUserDetail:
def test_method_get_all_permissions(self):
roles = mixer.cycle(10).blend('account_engine.CustomRole')
groups = mixer.cycle(10).blend('account_engine.CustomGroup')
permissions = mixer.cycle(5).blend('account_engine.CustomPermission')
special_permissions = mixer.cycle(5).blend('account_engine.CustomPermission')
obj = mixer.blend('account_engine.UserDetail', role=mixer.sequence(*roles), group=mixer.sequence(*groups), permission=mixer.sequence(*permissions), special_permission=mixer.sequence(*special_permissions),)
assert obj.get_all_permissions() == all_the_possible_permissions_for_which_i_need_your_inputs
Я просто потерялся и не могу написать тест, чтобы проверить, работает ли мой метод должным образом. Кроме того, не стесняйтесь поделиться своими впечатлениями, чтобы улучшить мой текущий метод.