Esempio n. 1
0
    def test_batches_available_for_anon(self):
        anonymous_user = AnonymousUser()

        project_protected = Project(
            active=True,
            login_required=True,
        )
        project_protected.save()
        self.assertEqual(
            len(project_protected.batches_available_for(anonymous_user)), 0)

        Batch(project=project_protected).save()
        self.assertEqual(
            len(project_protected.batches_available_for(anonymous_user)), 0)

        project_unprotected = Project(
            active=True,
            login_required=False,
        )
        project_unprotected.save()
        self.assertEqual(
            len(project_unprotected.batches_available_for(anonymous_user)), 0)

        Batch(project=project_unprotected).save()
        self.assertEqual(
            len(project_unprotected.batches_available_for(anonymous_user)), 1)
Esempio n. 2
0
    def test_available_tasks_for_anon_user(self):
        anonymous_user = AnonymousUser()
        user = User.objects.create_user('user', password='******')

        project_protected = Project(
            active=True,
            login_required=True,
        )
        project_protected.save()
        self.assertEqual(len(Project.all_available_for(anonymous_user)), 0)
        self.assertEqual(len(Project.all_available_for(user)), 2)  # Project created by setUp
        batch_protected = Batch(project=project_protected)
        batch_protected.save()
        Task(batch=batch_protected).save()
        self.assertEqual(len(batch_protected.available_tasks_for(anonymous_user)), 0)
        self.assertEqual(len(batch_protected.available_tasks_for(user)), 1)

        project_unprotected = Project(
            active=True,
            login_required=False,
        )
        project_unprotected.save()
        batch_unprotected = Batch(project=project_unprotected)
        batch_unprotected.save()
        Task(batch=batch_unprotected).save()
        self.assertEqual(len(Project.all_available_for(anonymous_user)), 1)
        self.assertEqual(len(Project.all_available_for(user)), 3)
        self.assertEqual(len(project_unprotected.batches_available_for(anonymous_user)), 1)
        self.assertEqual(len(project_unprotected.batches_available_for(user)), 1)
        self.assertEqual(len(batch_unprotected.available_tasks_for(anonymous_user)), 1)
        self.assertEqual(len(batch_unprotected.available_tasks_for(user)), 1)
Esempio n. 3
0
    def test_available_tasks_for__aph_is_2(self):
        batch = Batch(assignments_per_task=2, project=self.project)
        batch.save()
        self.assertEqual(batch.total_available_tasks_for(self.user), 0)

        task = Task(batch=batch, )
        task.save()
        self.assertEqual(batch.total_available_tasks_for(self.user), 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)

        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)
Esempio n. 4
0
    def test_index_unprotected_template(self):
        project_unprotected = Project(
            active=True,
            login_required=False,
            name='MY_TEMPLATE_NAME',
        )
        project_unprotected.save()
        batch = Batch(project=project_unprotected, name='MY_BATCH_NAME')
        batch.save()
        Task(batch=batch).save()

        anon_client = django.test.Client()
        response = anon_client.get(reverse('index'))
        self.assertEqual(response.status_code, 200)
        self.assertFalse(b'No Tasks available' in response.content)
        self.assertTrue(b'MY_TEMPLATE_NAME' in response.content)
        self.assertTrue(b'MY_BATCH_NAME' in response.content)

        known_client = django.test.Client()
        User.objects.create_superuser('admin', '*****@*****.**', 'secret')
        known_client.login(username='******', password='******')
        response = known_client.get(reverse('index'))
        self.assertEqual(response.status_code, 200)
        self.assertFalse(b'No Tasks available' in response.content)
        self.assertTrue(b'MY_TEMPLATE_NAME' in response.content)
        self.assertTrue(b'MY_BATCH_NAME' in response.content)
Esempio n. 5
0
    def setUp(self):
        with open('turkle/tests/resources/form_0.html') as f:
            html_template = f.read()

        self.project = Project(name="filepath", html_template=html_template)
        self.project.save()
        self.batch = Batch(project=self.project)
        self.batch.save()
        field_names = "tweet0_id,tweet0_entity,tweet0_before_entity,tweet0_after_entity," + \
            "tweet0_word0,tweet0_word1,tweet0_word2,tweet1_id,tweet1_entity," + \
            "tweet1_before_entity,tweet1_after_entity,tweet1_word0,tweet1_word1,tweet1_word2," + \
            "tweet2_id,tweet2_entity,tweet2_before_entity,tweet2_after_entity,tweet2_word0," + \
            "tweet2_word1,tweet2_word2,tweet3_id,tweet3_entity,tweet3_before_entity," + \
            "tweet3_after_entity,tweet3_word0,tweet3_word1,tweet3_word2,tweet4_id," + \
            "tweet4_entity,tweet4_before_entity,tweet4_after_entity,tweet4_word0," + \
            "tweet4_word1,tweet4_word2,tweet5_id,tweet5_entity,tweet5_before_entity," + \
            "tweet5_after_entity,tweet5_word0,tweet5_word1,tweet5_word2",
        values = "268,SANTOS, Muy bien America ......... y lo siento mucho , un muy buen " + \
            "rival,mucho, , ,2472,GREGORY, Ah bueno , tampoco andes pidiendo ese " +\
            "tipo de milagros . @jcabrerac @CarlosCabreraR,bueno, , ,478,ALEJANDRO," + \
            " @aguillen19 , un super abrazo mi querido , , mis mejores deseos para " + \
            "este 2012 ... muakkk !,querido, , ,906_control, PF, Acusan camioneros " + \
            "extorsiones de, : Transportistas acusaron que deben pagar entre 13 y 15 mil " + \
            "pesos a agentes que .. http://t.co/d8LUVvhP,acusaron, , ,2793_control," + \
            " CHICARO, Me gusta cuando chicharo hace su oracion es lo que lo hace especial .," + \
            " ,gusta, , ,357,OSCAR WILDE", " @ ifilosofia : Las " + \
            "pequeñas acciones de cada día son las que hacen o deshacen el carácter." , " + \
            "bueno !!!! Es así,bueno, , ",
        self.task = Task(batch=self.batch,
                         input_csv_fields=dict(zip(field_names, values)))
        self.task.save()
Esempio n. 6
0
    def setUp(self):
        """
        Sets up Project, Task objects, and saves them to the DB.
        The Project form HTML only displays the one input variable.
        The Task has inputs and answers and refers to the Project form.
        """
        admin = User.objects.create_superuser('admin', '*****@*****.**', 'secret')
        project = Project(name='test', html_template="<p>${foo}</p><textarea>")
        project.created_by = admin
        project.updated_by = admin
        save_model(project)
        batch = Batch(name='test', project=project, filename='test.csv')
        batch.created_by = admin
        batch.updated_by = admin
        save_model(batch)

        task = Task(
            batch=batch,
            input_csv_fields={'foo': 'bar'},
            completed=True,
        )
        task.save()
        self.task = task

        self.task_assignment = TaskAssignment(
            answers={
                "comment": "\u221e", "userDisplayLanguage": "",
                "sentence_textbox_3_verb1": "", "city": "",
                "sentence_textbox_1_verb6": "",
                "sentence_textbox_1_verb7": "",
                "sentence_textbox_1_verb4": "",
                "sentence_textbox_1_verb5": "",
                "sentence_textbox_1_verb2": "",
                "sentence_textbox_1_verb3": "",
                "sentence_textbox_1_verb1": "",
                "sentence_textbox_2_verb4": "",
                "csrfmiddlewaretoken": "7zxQ9Yyug6Nsnm4nLky9p8ObJwNipdu8",
                "sentence_drop_2_verb3": "foo",
                "sentence_drop_2_verb2": "foo",
                "sentence_drop_2_verb1": "foo",
                "sentence_textbox_2_verb1": "",
                "sentence_textbox_2_verb3": "",
                "sentence_drop_2_verb4": "foo",
                "sentence_textbox_2_verb2": "",
                "submitit": "Submit", "browserInfo": "",
                "sentence_drop_1_verb1": "foo",
                "sentence_drop_1_verb2": "foo",
                "sentence_drop_1_verb3": "foo",
                "sentence_drop_1_verb4": "foo",
                "sentence_drop_1_verb5": "foo",
                "sentence_drop_1_verb6": "foo",
                "sentence_drop_1_verb7": "foo", "country": "",
                "sentence_drop_3_verb1": "foo",
                "ipAddress": "", "region": ""
            },
            assigned_to=None,
            completed=True,
            task=task
        )
        self.task_assignment.save()
Esempio n. 7
0
    def test_task_marked_as_completed_two_way_redundancy(self):
        # When assignment_per_task==2, completing 2 Assignments marks Task as complete
        project = Project(
            name='test',
            html_template='<p>${number} - ${letter}</p><textarea>')
        project.save()
        batch = Batch(name='test', project=project)
        batch.assignments_per_task = 2
        batch.save()

        task = Task(batch=batch,
                    input_csv_fields={
                        'number': '1',
                        'letter': 'a'
                    })
        task.save()
        self.assertFalse(task.completed)
        self.assertFalse(batch.completed)

        TaskAssignment(assigned_to=None, completed=True, task=task).save()
        task.refresh_from_db()
        batch.refresh_from_db()
        self.assertFalse(task.completed)
        self.assertFalse(batch.completed)

        TaskAssignment(assigned_to=None, completed=True, task=task).save()
        task.refresh_from_db()
        batch.refresh_from_db()
        self.assertTrue(task.completed)
        self.assertTrue(batch.completed)
Esempio n. 8
0
    def test_expire_abandoned_assignments(self):
        t = timezone.now()
        dt = datetime.timedelta(hours=2)
        past = t - dt

        project = Project(login_required=False)
        project.save()
        batch = Batch(allotted_assignment_time=1, project=project)
        batch.save()
        task = Task(batch=batch)
        task.save()
        ha = TaskAssignment(
            completed=False,
            expires_at=past,
            task=task,
        )
        # Bypass TaskAssignment's save(), which updates expires_at
        super(TaskAssignment, ha).save()
        self.assertEqual(TaskAssignment.objects.count(), 1)

        User.objects.create_superuser('admin', '*****@*****.**', 'secret')
        client = django.test.Client()
        client.login(username='******', password='******')
        response = client.get(
            reverse('turkle_admin:expire_abandoned_assignments'))
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response['Location'], '/admin/')
        self.assertEqual(TaskAssignment.objects.count(), 0)
        messages = list(get_messages(response.wsgi_request))
        self.assertEqual(len(messages), 1)
        self.assertEqual(str(messages[0]),
                         u'All 1 abandoned Tasks have been expired')
Esempio n. 9
0
    def test_batch_to_input_csv(self):
        project = Project(name='test', html_template='<p>${letter}</p><textarea>')
        project.save()
        batch = Batch(project=project)
        batch.save()

        task1 = Task(
            batch=batch,
            completed=True,
            input_csv_fields={'letter': 'a', 'number': '1'},
        )
        task1.save()
        task2 = Task(
            batch=batch,
            completed=True,
            input_csv_fields={'letter': 'b', 'number': '2'},
        )
        task2.save()

        csv_output = StringIO()
        batch.to_input_csv(csv_output)
        rows = csv_output.getvalue().split()

        # Original column order not guaranteed
        if '"letter","number"' in rows[0]:
            self.assertTrue(any(['"a","1"' in row for row in rows[1:]]))
            self.assertTrue(any(['"b","2"' in row for row in rows[1:]]))
        elif '"number","letter"' in rows[0]:
            self.assertTrue(any(['"1","a"' in row for row in rows[1:]]))
            self.assertTrue(any(['"2","b"' in row for row in rows[1:]]))
        else:
            self.fail('Unexpected header value: %s' % rows[0])
Esempio n. 10
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)
Esempio n. 11
0
    def test_batch_to_csv_variable_number_of_answers(self):
        project = Project(name='test',
                          html_template='<p>${letter}</p><textarea>')
        project.save()
        batch = Batch(project=project)
        batch.save()

        task1 = Task(
            batch=batch,
            completed=True,
            input_csv_fields={'letter': 'a'},
        )
        task1.save()
        TaskAssignment(
            answers={
                '1': 1,
                '2': 2
            },
            assigned_to=None,
            completed=True,
            task=task1,
        ).save()

        task2 = Task(
            batch=batch,
            completed=True,
            input_csv_fields={'letter': 'b'},
        )
        task2.save()
        TaskAssignment(answers={
            '3': 3,
            '4': 4
        },
                       assigned_to=None,
                       completed=True,
                       task=task2).save()

        task3 = Task(
            batch=batch,
            completed=True,
            input_csv_fields={'letter': 'c'},
        )
        task3.save()
        TaskAssignment(answers={
            '3': 3,
            '2': 2
        },
                       assigned_to=None,
                       completed=True,
                       task=task3).save()

        csv_output = StringIO()
        batch.to_csv(csv_output)
        rows = csv_output.getvalue().split()
        self.assertTrue(
            '"Input.letter","Answer.1","Answer.2","Answer.3","Answer.4"' in
            rows[0])
        self.assertTrue(any(['"a","1","2","",""' in row for row in rows[1:]]))
        self.assertTrue(any(['"b","","","3","4"' in row for row in rows[1:]]))
        self.assertTrue(any(['"c","","2","3",""' in row for row in rows[1:]]))
Esempio n. 12
0
 def setUp(self):
     project = Project(login_required=False)
     project.save()
     self.batch = Batch(project=project)
     self.batch.save()
     self.task = Task(batch=self.batch)
     self.task.save()
Esempio n. 13
0
    def test_project_to_csv(self):
        project = Project(name='test',
                          html_template='<p>${number} - ${letter}</p>')
        project.save()
        batch_one = Batch(project=project)
        batch_one.save()

        task1 = Task(
            batch=batch_one,
            completed=True,
            input_csv_fields={
                'number': '1',
                'letter': 'a'
            },
        )
        task1.save()
        TaskAssignment(answers={
            'combined': '1a'
        },
                       assigned_to=None,
                       completed=True,
                       task=task1).save()

        batch_two = Batch(project=project)
        batch_two.save()
        task2 = Task(batch=batch_two,
                     completed=True,
                     input_csv_fields={
                         'number': '2',
                         'letter': 'b'
                     })
        task2.save()
        TaskAssignment(answers={
            'combined': '2b'
        },
                       assigned_to=None,
                       completed=True,
                       task=task2).save()

        csv_output = BytesIO()
        project.to_csv(csv_output)

        rows = csv_output.getvalue().split(b'\r\n')
        self.assertTrue(
            b'"Input.letter","Input.number","Answer.combined"' in rows[0])
        self.assertTrue(any([b'"a","1","1a"' in row for row in rows[1:]]))
        self.assertTrue(any([b'"b","2","2b"' in row for row in rows[1:]]))
Esempio n. 14
0
 def test_login_required_validation_2(self):
     # No ValidationError thrown
     project = Project(login_required=True, )
     project.save()
     Batch(
         assignments_per_task=2,
         project=project,
     ).clean()
Esempio n. 15
0
    def setUp(self):
        """
        Sets up Project, Task objects, and saves them to the DB.
        The Project form HTML only displays the one input variable.
        The Task has inputs and answers and refers to the Project form.
        """
        project = Project(name='test', html_template="<p>${foo}</p>")
        project.save()
        batch = Batch(project=project)
        batch.save()

        task = Task(
            batch=batch,
            input_csv_fields={u'foo': u'bar'},
            completed=True,
        )
        task.save()
        self.task = task

        self.task_assignment = TaskAssignment(answers={
            u"comment": u"\u221e",
            u"userDisplayLanguage": u"",
            u"sentence_textbox_3_verb1": u"",
            u"city": u"",
            u"sentence_textbox_1_verb6": u"",
            u"sentence_textbox_1_verb7": u"",
            u"sentence_textbox_1_verb4": u"",
            u"sentence_textbox_1_verb5": u"",
            u"sentence_textbox_1_verb2": u"",
            u"sentence_textbox_1_verb3": u"",
            u"sentence_textbox_1_verb1": u"",
            u"sentence_textbox_2_verb4": u"",
            u"csrfmiddlewaretoken": u"7zxQ9Yyug6Nsnm4nLky9p8ObJwNipdu8",
            u"sentence_drop_2_verb3": u"foo",
            u"sentence_drop_2_verb2": u"foo",
            u"sentence_drop_2_verb1": u"foo",
            u"sentence_textbox_2_verb1": u"",
            u"sentence_textbox_2_verb3": u"",
            u"sentence_drop_2_verb4": u"foo",
            u"sentence_textbox_2_verb2": u"",
            u"submitit": u"Submit",
            u"browserInfo": u"",
            u"sentence_drop_1_verb1": u"foo",
            u"sentence_drop_1_verb2": u"foo",
            u"sentence_drop_1_verb3": u"foo",
            u"sentence_drop_1_verb4": u"foo",
            u"sentence_drop_1_verb5": u"foo",
            u"sentence_drop_1_verb6": u"foo",
            u"sentence_drop_1_verb7": u"foo",
            u"country": u"",
            u"sentence_drop_3_verb1": u"foo",
            u"ipAddress": u"",
            u"region": u""
        },
                                              assigned_to=None,
                                              completed=True,
                                              task=task)
        self.task_assignment.save()
Esempio n. 16
0
    def test_project_to_csv_different_answers_per_batch(self):
        project = Project(name='test', html_template='<p>${letter}</p>')
        project.save()
        batch_one = Batch(project=project)
        batch_one.save()

        task1 = Task(
            batch=batch_one,
            completed=True,
            input_csv_fields={'letter': 'a'},
        )
        task1.save()
        TaskAssignment(answers={
            '1': 1,
            '2': 2
        },
                       assigned_to=None,
                       completed=True,
                       task=task1).save()

        batch_two = Batch(project=project)
        batch_two.save()
        task2 = Task(
            batch=batch_two,
            completed=True,
            input_csv_fields={'letter': 'b'},
        )
        task2.save()
        TaskAssignment(answers={
            '3': 3,
            '4': 4
        },
                       assigned_to=None,
                       completed=True,
                       task=task2).save()

        csv_output = BytesIO()
        project.to_csv(csv_output)

        rows = csv_output.getvalue().split(b'\r\n')
        self.assertTrue(
            b'"Input.letter","Answer.1","Answer.2","Answer.3","Answer.4"' in
            rows[0])
        self.assertTrue(b'"a","1","2","",""' in rows[1])
        self.assertTrue(b'"b","","","3","4"' in rows[2])
Esempio n. 17
0
    def setUp(self):
        self.user = User.objects.create_user('testuser', password='******')

        self.project = Project()
        self.project.save()
        self.batch = Batch(project=self.project)
        self.batch.save()
        self.task = Task(batch=self.batch)
        self.task.save()
Esempio n. 18
0
 def test_login_required_validation_3(self):
     with self.assertRaisesMessage(ValidationError,
                                   'Assignments per Task must be 1'):
         project = Project(login_required=False, )
         project.save()
         Batch(
             assignments_per_task=2,
             project=project,
         ).clean()
Esempio n. 19
0
 def setUp(self):
     self.project = Project(login_required=False)
     self.project.save()
     batch = Batch(project=self.project)
     batch.save()
     self.task = Task(input_csv_fields={}, batch=batch)
     self.task.save()
     self.task_assignment = TaskAssignment(task=self.task)
     self.task_assignment.save()
Esempio n. 20
0
 def setUp(self):
     User.objects.create_superuser('admin', '*****@*****.**', 'secret')
     project = Project(name='foo',
                       html_template='<p>${foo}: ${bar}</p><textarea>')
     project.save()
     self.batch = Batch(project=project,
                        name='MY_BATCH_NAME',
                        published=False)
     self.batch.save()
Esempio n. 21
0
    def setUp(self):
        project = Project(name='foo', html_template='<p>${foo}: ${bar}</p>')
        project.save()

        batch = Batch(project=project, name='foo', filename='foo.csv')
        batch.save()

        self.task = Task(batch=batch)
        self.task.save()
Esempio n. 22
0
    def test_batches_available_for(self):
        user = User.objects.create_user('testuser', password='******')

        project = Project(active=True, )
        project.save()
        self.assertEqual(len(project.batches_available_for(user)), 0)

        Batch(
            active=False,
            project=project,
        ).save()
        self.assertEqual(len(project.batches_available_for(user)), 0)

        Batch(
            active=True,
            project=project,
        ).save()
        self.assertEqual(len(project.batches_available_for(user)), 1)
Esempio n. 23
0
 def setUp(self):
     project = Project(login_required=False)
     project.save()
     self.batch = Batch(project=project)
     self.batch.save()
     self.task_one = Task(batch=self.batch)
     self.task_one.save()
     self.task_two = Task(batch=self.batch)
     self.task_two.save()
     self.task_three = Task(batch=self.batch)
     self.task_three.save()
Esempio n. 24
0
 def setUp(self):
     project = Project(login_required=False,
                       name='foo',
                       html_template='<p></p><textarea>')
     project.save()
     batch = Batch(project=project)
     batch.save()
     self.task = Task(batch=batch, input_csv_fields='{}')
     self.task.save()
     self.task_assignment = TaskAssignment(assigned_to=None,
                                           completed=False,
                                           task=self.task)
     self.task_assignment.save()
Esempio n. 25
0
 def setUp(self):
     self.user = User.objects.create_user('testuser', password='******')
     self.admin = User.objects.create_superuser('admin', '*****@*****.**',
                                                'secret')
     self.project = Project(name="Test", login_required=False)
     self.project.created_by = self.admin
     self.project.updated_by = self.admin
     self.project.save()
     batch = Batch(project=self.project)
     batch.save()
     self.task = Task(input_csv_fields={}, batch=batch)
     self.task.save()
     self.task_assignment = TaskAssignment(task=self.task)
     self.task_assignment.save()
Esempio n. 26
0
    def setUp(self):
        project = Project(login_required=False,
                          name='foo',
                          html_template='<p>${foo}: ${bar}</p>')
        project.save()

        self.batch = Batch(project=project, name='foo', filename='foo.csv')
        self.batch.save()

        self.task = Task(batch=self.batch,
                         input_csv_fields={
                             'foo': 'fufu',
                             'bar': 'baba'
                         })
        self.task.save()
Esempio n. 27
0
 def test_login_required_validation_3(self):
     with self.assertRaisesMessage(ValidationError, 'Assignments per Task must be 1'):
         project = Project(
             name='test',
             html_template='<textarea>',
             created_by=self.admin,
             updated_by=self.admin,
         )
         save_model(project)
         Batch(
             name='test',
             assignments_per_task=2,
             login_required=False,
             project=project,
         ).clean()
Esempio n. 28
0
 def test_login_required_validation_2(self):
     # No ValidationError thrown
     project = Project(
         name='test',
         login_required=True,
         html_template='<textarea>',
         created_by=self.admin,
         updated_by=self.admin,
     )
     save_model(project)
     Batch(
         name='test',
         assignments_per_task=2,
         project=project,
     ).clean()
Esempio n. 29
0
    def test_batch_from_emoji_csv(self):
        template = '<p>${emoji} - ${more_emoji}</p><textarea>'
        project = Project(name='test', html_template=template)
        project.save()
        batch = Batch(project=project)
        batch.save()

        with open(os.path.abspath('turkle/tests/resources/emoji.csv'), 'r') as csv_fh:
            batch.create_tasks_from_csv(csv_fh)

        self.assertEqual(batch.total_tasks(), 3)
        tasks = batch.task_set.all()
        self.assertEqual(tasks[0].input_csv_fields['emoji'], '😀')
        self.assertEqual(tasks[0].input_csv_fields['more_emoji'], '😃')
        self.assertEqual(tasks[2].input_csv_fields['emoji'], '🤔')
        self.assertEqual(tasks[2].input_csv_fields['more_emoji'], '🤭')
Esempio n. 30
0
    def test_batch_to_csv(self):
        project = Project(name='test',
                          html_template='<p>${number} - ${letter}</p>')
        project.save()
        batch = Batch(project=project)
        batch.save()

        task1 = Task(
            batch=batch,
            completed=True,
            input_csv_fields={
                'number': '1',
                'letter': 'a'
            },
        )
        task1.save()
        TaskAssignment(answers={
            'combined': '1a'
        },
                       assigned_to=None,
                       completed=True,
                       task=task1).save()

        task2 = Task(
            batch=batch,
            completed=True,
            input_csv_fields={
                'number': '2',
                'letter': 'b'
            },
        )
        task2.save()
        TaskAssignment(answers={
            'combined': '2b'
        },
                       assigned_to=None,
                       completed=True,
                       task=task2).save()

        csv_output = StringIO()
        batch.to_csv(csv_output)
        csv_string = csv_output.getvalue()
        self.assertTrue(b'"Input.letter","Input.number","Answer.combined"\r\n'
                        in csv_string)
        self.assertTrue(b'"b","2","2b"\r\n' in csv_string)
        self.assertTrue(b'"a","1","1a"\r\n' in csv_string)