Beispiel #1
0
    def test_available_tasks_for_anon_user(self):
        anon_user = AnonymousUser()
        user = User.objects.create_user('user', password='******')

        self.assertEqual(len(Batch.access_permitted_for(user)), 0)
        batch_protected = Batch.objects.create(
            active=True,
            login_required=True,
            project=self.project
        )
        self.assertEqual(len(Batch.access_permitted_for(anon_user)), 0)
        self.assertEqual(len(Batch.access_permitted_for(user)), 1)

        Task.objects.create(batch=batch_protected)
        self.assertEqual(len(batch_protected.available_tasks_for(anon_user)), 0)
        self.assertEqual(
            Batch.available_task_counts_for(self.batch_query, anon_user)[batch_protected.id], 0)
        self.assertEqual(len(batch_protected.available_tasks_for(user)), 1)
        self.assertEqual(
            Batch.available_task_counts_for(self.batch_query, user)[batch_protected.id], 1)

        batch_unprotected = Batch.objects.create(
            active=True,
            login_required=False,
            project=self.project
        )
        Task.objects.create(batch=batch_unprotected)
        self.assertEqual(len(Batch.access_permitted_for(anon_user)), 1)
        self.assertEqual(len(Batch.access_permitted_for(user)), 2)
        self.assertEqual(len(batch_unprotected.available_tasks_for(anon_user)), 1)
        self.assertEqual(
            Batch.available_task_counts_for(self.batch_query, anon_user)[batch_unprotected.id], 1)
        self.assertEqual(len(batch_unprotected.available_tasks_for(user)), 1)
        self.assertEqual(
            Batch.available_task_counts_for(self.batch_query, user)[batch_unprotected.id], 1)
Beispiel #2
0
    def test_available_tasks_for__apt_is_1(self):
        batch = Batch(assignments_per_task=1, project=self.project)
        batch.save()
        self.assertEqual(batch.total_available_tasks_for(self.user), 0)
        self.assertEqual(
            Batch.available_task_counts_for(self.batch_query,
                                            self.user)[batch.id], 0)
        self.assertEqual(batch.next_available_task_for(self.user), None)

        task = Task(batch=batch, )
        task.save()
        self.assertEqual(batch.total_available_tasks_for(self.user), 1)
        self.assertEqual(
            Batch.available_task_counts_for(self.batch_query,
                                            self.user)[batch.id], 1)
        self.assertEqual(batch.next_available_task_for(self.user), task)

        task_assignment = TaskAssignment(
            assigned_to=self.user,
            completed=False,
            task=task,
        )
        task_assignment.save()
        self.assertEqual(batch.total_available_tasks_for(self.user), 0)
        self.assertEqual(
            Batch.available_task_counts_for(self.batch_query,
                                            self.user)[batch.id], 0)
        self.assertEqual(batch.next_available_task_for(self.user), None)
Beispiel #3
0
    def test_available_tasks_for__apt_is_2(self):
        batch = Batch(assignments_per_task=2, project=self.project)
        batch.save()
        self.assertEqual(batch.total_available_tasks_for(self.user), 0)
        self.assertEqual(
            Batch.available_task_counts_for(self.batch_query,
                                            self.user)[batch.id], 0)

        task = Task(batch=batch, )
        task.save()
        self.assertEqual(batch.total_available_tasks_for(self.user), 1)
        self.assertEqual(
            Batch.available_task_counts_for(self.batch_query,
                                            self.user)[batch.id], 1)

        task_assignment = TaskAssignment(
            assigned_to=self.user,
            completed=False,
            task=task,
        )
        task_assignment.save()
        self.assertEqual(batch.total_available_tasks_for(self.user), 0)
        self.assertEqual(
            Batch.available_task_counts_for(self.batch_query,
                                            self.user)[batch.id], 0)

        other_user = User.objects.create_user('other_user', password='******')
        self.assertEqual(batch.total_available_tasks_for(other_user), 1)

        task_assignment = TaskAssignment(
            assigned_to=other_user,
            completed=False,
            task=task,
        )
        task_assignment.save()
        self.assertEqual(batch.total_available_tasks_for(other_user), 0)
        self.assertEqual(
            Batch.available_task_counts_for(self.batch_query,
                                            self.user)[batch.id], 0)
Beispiel #4
0
def index(request):
    """
    Security behavior:
    - Anyone can access the page, but the page only shows the user
      information they have access to.
    """
    abandoned_assignments = []
    if request.user.is_authenticated:
        for ha in TaskAssignment.objects.filter(
                assigned_to=request.user).filter(completed=False):
            abandoned_assignments.append({
                'task': ha.task,
                'task_assignment_id': ha.id
            })

    batch_list = Batch.access_permitted_for(request.user)
    batch_query = Batch.objects.filter(id__in=[b.id for b in batch_list])

    available_task_counts = Batch.available_task_counts_for(
        batch_query, request.user)

    batch_rows = []
    for batch in batch_query.values('created_at', 'id', 'name',
                                    'project__name'):
        total_tasks_available = available_task_counts[batch['id']]

        if total_tasks_available > 0:
            batch_rows.append({
                'project_name':
                batch['project__name'],
                'batch_name':
                batch['name'],
                'batch_published':
                batch['created_at'],
                'assignments_available':
                total_tasks_available,
                'preview_next_task_url':
                reverse('preview_next_task', kwargs={'batch_id': batch['id']}),
                'accept_next_task_url':
                reverse('accept_next_task', kwargs={'batch_id': batch['id']})
            })
    return render(request, 'index.html', {
        'abandoned_assignments': abandoned_assignments,
        'batch_rows': batch_rows
    })