тестировать сложный метод 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

Я просто потерялся и не могу написать тест, чтобы проверить, работает ли мой метод должным образом. Кроме того, не стесняйтесь поделиться своими впечатлениями, чтобы улучшить мой текущий метод.

0 ответов

Другие вопросы по тегам