def test_problems_list(self): for name, user in self.users.items(): with self.subTest(user=name): with self.subTest(list='accessible problems'): # We only care about consistency between Problem.is_accessible_by and Problem.get_visible_problems problem_codes = [] for problem in Problem.objects.prefetch_related('authors', 'curators', 'testers', 'organizations'): if problem.is_accessible_by(user): problem_codes.append(problem.code) self.assertCountEqual( Problem.get_visible_problems(user).distinct().values_list('code', flat=True), problem_codes, ) with self.subTest(list='editable problems'): # We only care about consistency between Problem.is_editable_by and Problem.get_editable_problems problem_codes = [] for problem in Problem.objects.prefetch_related('authors', 'curators'): if problem.is_editable_by(user): problem_codes.append(problem.code) self.assertCountEqual( Problem.get_editable_problems(user).distinct().values_list('code', flat=True), problem_codes, )
def filter_visible_tickets(queryset, user): return queryset.filter( own_ticket_filter(user.profile.id) | Q(content_type=ContentType.objects.get_for_model(GeneralIssue)) | Q(content_type=ContentType.objects.get_for_model(Problem), object_id__in=Problem.get_editable_problems(user))).distinct()
def get_queryset(self, request): return Problem.get_editable_problems( request.user).prefetch_related('authors__user').distinct()
def user_editable_ids(profile): return set( Problem.get_editable_problems(profile.user).values_list('id', flat=True))