コード例 #1
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)
コード例 #2
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
    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])
コード例 #3
0
 def test_form_without_submit_button(self):
     project = Project(name='Test',
                       html_template='<p>Quick brown fox</p><textarea>')
     project.created_by = self.admin
     project.updated_by = self.admin
     save_model(project)
     self.assertFalse(project.html_template_has_submit_button)
コード例 #4
0
    def test_extract_fieldnames_from_form_html(self):
        self.assertEqual({'foo': True}, self.task.batch.project.fieldnames)

        project = Project(name='test',
                          html_template='<p>${foo} - ${bar}</p><textarea>')
        project.clean()
        self.assertEqual({'foo': True, 'bar': True}, project.fieldnames)
コード例 #5
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')
コード例 #6
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,&nbsp;,&nbsp;,2472,GREGORY, Ah bueno , tampoco andes pidiendo ese " +\
            "tipo de milagros . @jcabrerac @CarlosCabreraR,bueno,&nbsp;,&nbsp;,478,ALEJANDRO," + \
            " @aguillen19 &#44; un super abrazo mi querido , &#44; mis mejores deseos para " + \
            "este 2012 ... muakkk !,querido,&nbsp;,&nbsp;,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,&nbsp;,&nbsp;,2793_control," + \
            " CHICARO, Me gusta cuando chicharo hace su oracion es lo que lo hace especial .," + \
            "&nbsp;,gusta,&nbsp;,&nbsp;,357,OSCAR WILDE&QUOT;, &quot; @ ifilosofia : Las " + \
            "pequeñas acciones de cada día son las que hacen o deshacen el carácter.&quot; , " + \
            "bueno !!!! Es así,bueno,&nbsp;,&nbsp;",
        self.task = Task(batch=self.batch,
                         input_csv_fields=dict(zip(field_names, values)))
        self.task.save()
コード例 #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)
コード例 #8
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
    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()
コード例 #9
0
ファイル: test_admin_views.py プロジェクト: hltcoe/turkle
    def test_batch_add_validation_extra_csv_fields(self):
        project = Project(name='foo', html_template='<p>${f2}</p><textarea>')
        project.save()

        self.assertFalse(Batch.objects.filter(name='batch_save').exists())

        client = django.test.Client()
        client.login(username='******', password='******')
        # CSV file has fields 'f2' and 'f3'
        with open(os.path.abspath('turkle/tests/resources/mismatched_fields.csv')) as fp:
            response = client.post(
                '/admin/turkle/batch/add/',
                {
                    'assignments_per_task': 1,
                    'project': project.id,
                    'name': 'batch_save',
                    'csv_file': fp
                })
        self.assertEqual(response.status_code, 302)
        self.assertTrue(Batch.objects.filter(name='batch_save').exists())
        matching_batch = Batch.objects.filter(name='batch_save').first()
        self.assertEqual(response['Location'], reverse('turkle_admin:review_batch',
                                                       kwargs={'batch_id': matching_batch.id}))
        messages = list(get_messages(response.wsgi_request))
        self.assertEqual(len(messages), 1)
        self.assertTrue('The CSV file contained fields that are not in the HTML template.'
                        in str(messages[0]))
コード例 #10
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])
コード例 #11
0
ファイル: test_admin_views.py プロジェクト: hltcoe/turkle
    def test_batch_add(self):
        project = Project(name='foo', html_template='<p>${foo}: ${bar}</p><textarea>')
        project.save()

        self.assertFalse(Batch.objects.filter(name='batch_save').exists())

        client = django.test.Client()
        client.login(username='******', password='******')
        with open(os.path.abspath('turkle/tests/resources/form_1_vals.csv')) as fp:
            response = client.post(
                '/admin/turkle/batch/add/',
                {
                    'assignments_per_task': 1,
                    'project': project.id,
                    'name': 'batch_save',
                    'csv_file': fp
                })
        self.assertTrue(b'Please correct the error' not in response.content)
        self.assertEqual(response.status_code, 302)
        self.assertTrue(Batch.objects.filter(name='batch_save').exists())
        matching_batch = Batch.objects.filter(name='batch_save').last()
        self.assertEqual(response['Location'],
                         '/admin/turkle/batch/{}/review/'.format(matching_batch.id))
        self.assertEqual(matching_batch.filename, 'form_1_vals.csv')
        self.assertEqual(matching_batch.total_tasks(), 1)
        self.assertEqual(matching_batch.allotted_assignment_time,
                         Batch._meta.get_field('allotted_assignment_time').get_default())
        self.assertEqual(matching_batch.created_by, self.user)
コード例 #12
0
ファイル: test_views.py プロジェクト: hltcoe/turkle
 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()
コード例 #13
0
ファイル: test_admin_views.py プロジェクト: hltcoe/turkle
    def test_batch_add_csv_with_emoji(self):
        project = Project(name='foo', html_template='<p>${emoji}: ${more_emoji}</p><textarea>')
        project.save()

        self.assertFalse(Batch.objects.filter(name='batch_save').exists())

        client = django.test.Client()
        client.login(username='******', password='******')
        with open(os.path.abspath('turkle/tests/resources/emoji.csv')) as fp:
            response = client.post(
                '/admin/turkle/batch/add/',
                {
                    'assignments_per_task': 1,
                    'project': project.id,
                    'name': 'batch_save',
                    'csv_file': fp
                })
        self.assertTrue(b'Please correct the error' not in response.content)
        self.assertEqual(response.status_code, 302)
        self.assertTrue(Batch.objects.filter(name='batch_save').exists())
        matching_batch = Batch.objects.filter(name='batch_save').last()
        self.assertEqual(response['Location'],
                         '/admin/turkle/batch/{}/review/'.format(matching_batch.id))
        self.assertEqual(matching_batch.filename, 'emoji.csv')

        self.assertEqual(matching_batch.total_tasks(), 3)
        tasks = matching_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'], '🤭')
コード例 #14
0
ファイル: test_views.py プロジェクト: hltcoe/turkle
    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)
コード例 #15
0
ファイル: test_admin_views.py プロジェクト: hltcoe/turkle
    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]),
                         'All 1 abandoned Tasks have been expired')
コード例 #16
0
    def test_batch_add_validation_extra_csv_fields(self):
        project = Project(name='foo', html_template='<p>${f2}</p>')
        project.save()

        self.assertFalse(Batch.objects.filter(name='batch_save').exists())

        client = django.test.Client()
        client.login(username='******', password='******')
        # CSV file has fields 'f2' and 'f3'
        with open(
                os.path.abspath(
                    'turkle/tests/resources/mismatched_fields.csv')) as fp:
            response = client.post(
                u'/admin/turkle/batch/add/', {
                    'assignments_per_task': 1,
                    'project': project.id,
                    'name': 'batch_save',
                    'csv_file': fp
                })
        self.assertEqual(response.status_code, 302)
        self.assertTrue(Batch.objects.filter(name='batch_save').exists())
        matching_batch = Batch.objects.filter(name='batch_save').first()
        self.assertEqual(
            response['Location'],
            reverse('turkle_admin:review_batch',
                    kwargs={'batch_id': matching_batch.id}))
        messages = list(get_messages(response.wsgi_request))
        self.assertEqual(len(messages), 1)
        self.assertTrue(
            u'The CSV file contained fields that are not in the HTML template.'
            in str(messages[0]))
コード例 #17
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()
コード例 #18
0
ファイル: test_models.py プロジェクト: yishuihanhan/turkle
 def test_form_with_submit_button(self):
     project = Project(
         html_template=
         '<p><input id="my_submit_button" type="submit" value="MySubmit" /></p>'
     )
     project.save()
     self.assertTrue(project.html_template_has_submit_button)
コード例 #19
0
ファイル: test_admin_views.py プロジェクト: dejmail/turkle
    def test_batch_add_validation_missing_csv_fields(self):
        project = Project(name='foo',
                          html_template='<p>${f1} ${f2} ${f3}</p><textarea>')
        project.created_by = self.user
        project.updated_by = self.user
        save_model(project)

        self.assertFalse(Batch.objects.filter(name='batch_save').exists())

        client = django.test.Client()
        client.login(username='******', password='******')
        # CSV file has fields 'f2' and 'f3'
        with open(
                os.path.abspath(
                    'turkle/tests/resources/mismatched_fields.csv')) as fp:
            response = client.post('/admin/turkle/batch/add/', {
                'project': project.id,
                'name': 'batch_save',
                'csv_file': fp
            })
        self.assertEqual(response.status_code, 200)
        print(response.content)
        self.assertTrue(b'Please correct the error' in response.content)
        self.assertTrue(b'extra fields' not in response.content)
        self.assertTrue(b'missing fields' in response.content)
コード例 #20
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:]]))
コード例 #21
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()
コード例 #22
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
    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)

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

        TaskAssignment(
            assigned_to=None,
            completed=True,
            task=task
        ).save()
        task.refresh_from_db()
        self.assertTrue(task.completed)
コード例 #23
0
    def test_batch_add(self):
        project = Project(name='foo', html_template='<p>${foo}: ${bar}</p>')
        project.save()

        self.assertFalse(Batch.objects.filter(name='batch_save').exists())

        client = django.test.Client()
        client.login(username='******', password='******')
        with open(os.path.abspath(
                'turkle/tests/resources/form_1_vals.csv')) as fp:
            response = client.post(
                u'/admin/turkle/batch/add/', {
                    'assignments_per_task': 1,
                    'project': project.id,
                    'name': 'batch_save',
                    'csv_file': fp
                })
        self.assertTrue(b'error' not in response.content)
        self.assertEqual(response.status_code, 302)
        self.assertTrue(Batch.objects.filter(name='batch_save').exists())
        matching_batch = Batch.objects.filter(name='batch_save').last()
        self.assertEqual(
            response['Location'],
            u'/admin/turkle/batch/{}/review/'.format(matching_batch.id))
        self.assertEqual(matching_batch.filename, u'form_1_vals.csv')
        self.assertEqual(matching_batch.total_tasks(), 1)
        self.assertEqual(
            matching_batch.allotted_assignment_time,
            Batch._meta.get_field('allotted_assignment_time').get_default())
        self.assertEqual(matching_batch.created_by, self.user)
コード例 #24
0
    def test_batch_add_csv_with_emoji(self):
        project = Project(name='foo',
                          html_template='<p>${emoji}: ${more_emoji}</p>')
        project.save()

        self.assertFalse(Batch.objects.filter(name='batch_save').exists())

        client = django.test.Client()
        client.login(username='******', password='******')
        with open(os.path.abspath('turkle/tests/resources/emoji.csv')) as fp:
            response = client.post(
                u'/admin/turkle/batch/add/', {
                    'assignments_per_task': 1,
                    'project': project.id,
                    'name': 'batch_save',
                    'csv_file': fp
                })
        self.assertTrue(b'error' not in response.content)
        self.assertEqual(response.status_code, 302)
        self.assertTrue(Batch.objects.filter(name='batch_save').exists())
        matching_batch = Batch.objects.filter(name='batch_save').last()
        self.assertEqual(
            response['Location'],
            u'/admin/turkle/batch/{}/review/'.format(matching_batch.id))
        self.assertEqual(matching_batch.filename, u'emoji.csv')

        self.assertEqual(matching_batch.total_tasks(), 3)
        tasks = matching_batch.task_set.all()
        self.assertEqual(tasks[0].input_csv_fields['emoji'], u'😀')
        self.assertEqual(tasks[0].input_csv_fields['more_emoji'], u'😃')
        self.assertEqual(tasks[2].input_csv_fields['emoji'], u'🤔')
        self.assertEqual(tasks[2].input_csv_fields['more_emoji'], u'🤭')
コード例 #25
0
ファイル: test_models.py プロジェクト: yishuihanhan/turkle
 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()
コード例 #26
0
ファイル: test_models.py プロジェクト: yishuihanhan/turkle
    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()
コード例 #27
0
ファイル: test_views.py プロジェクト: hltcoe/turkle
    def setUp(self):
        project = Project(name='foo', html_template='<p>${foo}: ${bar}</p><textarea>')
        project.save()

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

        self.task = Task(batch=batch)
        self.task.save()
コード例 #28
0
ファイル: test_admin_views.py プロジェクト: dejmail/turkle
 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()
コード例 #29
0
ファイル: test_views.py プロジェクト: hltcoe/turkle
    def setUp(self):
        self.user = User.objects.create_user('testuser', password='******')

        project = Project()
        project.save()
        batch = Batch(project=project)
        batch.save()
        self.task = Task(batch=batch)
        self.task.save()
コード例 #30
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
 def test_form_without_submit_button(self):
     project = Project(
         name='Test',
         html_template='<p>Quick brown fox</p><textarea>'
     )
     project.created_by = self.admin
     project.updated_by = self.admin
     save_model(project)
     self.assertFalse(project.html_template_has_submit_button)
コード例 #31
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()
コード例 #32
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()
コード例 #33
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
 def test_form_with_submit_button(self):
     project = Project(
         name='Test',
         html_template='<p><input id="my_submit_button" type="submit" value="MySubmit" /></p>'
     )
     project.created_by = self.admin
     project.updated_by = self.admin
     save_model(project)
     self.assertTrue(project.html_template_has_submit_button)
コード例 #34
0
ファイル: test_models.py プロジェクト: yishuihanhan/turkle
 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()
コード例 #35
0
 def test_form_with_submit_button(self):
     project = Project(
         name='Test',
         html_template='<p><input id="my_submit_button" type="submit" value="MySubmit" /></p>'
     )
     project.created_by = self.admin
     project.updated_by = self.admin
     save_model(project)
     self.assertTrue(project.html_template_has_submit_button)
コード例 #36
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()
コード例 #37
0
ファイル: test_models.py プロジェクト: yishuihanhan/turkle
    def test_available_for_active_flag(self):
        user = User.objects.create_user('testuser', password='******')

        self.assertEqual(len(Project.all_available_for(user)), 0)

        Project(active=False, ).save()
        self.assertEqual(len(Project.all_available_for(user)), 0)

        Project(active=True, ).save()
        self.assertEqual(len(Project.all_available_for(user)), 1)
コード例 #38
0
ファイル: test_views.py プロジェクト: hltcoe/turkle
 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()
コード例 #39
0
ファイル: test_models.py プロジェクト: yishuihanhan/turkle
    def test_available_for_login_required(self):
        anonymous_user = AnonymousUser()

        self.assertEqual(len(Project.all_available_for(anonymous_user)), 0)

        Project(login_required=True, ).save()
        self.assertEqual(len(Project.all_available_for(anonymous_user)), 0)

        authenticated_user = User.objects.create_user('testuser',
                                                      password='******')
        self.assertEqual(len(Project.all_available_for(authenticated_user)), 1)
コード例 #40
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()
コード例 #41
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
    def test_all_available_for_login_required(self):
        anonymous_user = AnonymousUser()

        self.assertEqual(len(Project.all_available_for(anonymous_user)), 0)

        Project(
            login_required=True,
        ).save()
        self.assertEqual(len(Project.all_available_for(anonymous_user)), 0)

        authenticated_user = User.objects.create_user('testuser', password='******')
        self.assertEqual(len(Project.all_available_for(authenticated_user)), 1)
コード例 #42
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
    def test_extract_fieldnames_from_form_html(self):
        self.assertEqual(
            {'foo': True},
            self.task.batch.project.fieldnames
        )

        project = Project(name='test', html_template='<p>${foo} - ${bar}</p><textarea>')
        project.clean()
        self.assertEqual(
            {'foo': True, 'bar': True},
            project.fieldnames
        )
コード例 #43
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
    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:]]))
コード例 #44
0
ファイル: test_views.py プロジェクト: hltcoe/turkle
    def setUp(self):
        project = Project(login_required=False, name='foo',
                          html_template='<p>${foo}: ${bar}</p><textarea>')
        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()
コード例 #45
0
ファイル: test_views.py プロジェクト: hltcoe/turkle
 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()
コード例 #46
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()
コード例 #47
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
    def test_all_available_for_active_flag(self):
        user = User.objects.create_user('testuser', password='******')

        self.assertEqual(len(Project.all_available_for(user)), 0)

        Project(
            active=False,
        ).save()
        self.assertEqual(len(Project.all_available_for(user)), 0)

        Project(
            active=True,
        ).save()
        self.assertEqual(len(Project.all_available_for(user)), 1)
コード例 #48
0
ファイル: test_views.py プロジェクト: hltcoe/turkle
class TestTaskAssignmentIFrame(TestCase):
    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()

    def test_get_task_assignment_iframe_with_wrong_user(self):
        User.objects.create_user('wrong_user', password='******')
        self.task_assignment.assigned_to = self.user
        self.task_assignment.save()

        client = django.test.Client()
        client.login(username='******', password='******')
        response = client.get(reverse('task_assignment_iframe',
                                      kwargs={'task_id': self.task.id,
                                              'task_assignment_id': self.task_assignment.id}))
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response['Location'], reverse('index'))
        messages = list(get_messages(response.wsgi_request))
        self.assertEqual(len(messages), 1)
        self.assertTrue('You do not have permission to work on the Task Assignment with ID'
                        in str(messages[0]))

    def test_template_with_submit_button(self):
        self.project.html_template = \
            '<input id="my_submit_button" type="submit" value="MySubmit" />'
        save_model(self.project)
        self.project.refresh_from_db()
        self.assertTrue(self.project.html_template_has_submit_button)

        client = django.test.Client()
        response = client.get(reverse('task_assignment_iframe',
                                      kwargs={'task_id': self.task.id,
                                              'task_assignment_id': self.task_assignment.id}))
        self.assertEqual(response.status_code, 200)
        self.assertTrue(b'my_submit_button' in response.content)
        self.assertFalse(b'submitButton' in response.content)

    def test_template_without_submit_button(self):
        self.project.form = '<input id="foo" type="text" value="MyText" />'
        self.project.save()
        self.project.refresh_from_db()
        self.assertFalse(self.project.html_template_has_submit_button)

        client = django.test.Client()
        response = client.get(reverse('task_assignment_iframe',
                                      kwargs={'task_id': self.task.id,
                                              'task_assignment_id': self.task_assignment.id}))
        self.assertEqual(response.status_code, 200)
        self.assertFalse(b'my_submit_button' in response.content)
        self.assertTrue(b'submitButton' in response.content)
コード例 #49
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()
コード例 #50
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()
コード例 #51
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
    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()

        csv_fh = open(os.path.abspath('turkle/tests/resources/emoji.csv'), 'r')
        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'], '🤭')
コード例 #52
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
    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,&nbsp;,&nbsp;,2472,GREGORY, Ah bueno , tampoco andes pidiendo ese " +\
            "tipo de milagros . @jcabrerac @CarlosCabreraR,bueno,&nbsp;,&nbsp;,478,ALEJANDRO," + \
            " @aguillen19 &#44; un super abrazo mi querido , &#44; mis mejores deseos para " + \
            "este 2012 ... muakkk !,querido,&nbsp;,&nbsp;,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,&nbsp;,&nbsp;,2793_control," + \
            " CHICARO, Me gusta cuando chicharo hace su oracion es lo que lo hace especial .," + \
            "&nbsp;,gusta,&nbsp;,&nbsp;,357,OSCAR WILDE&QUOT;, &quot; @ ifilosofia : Las " + \
            "pequeñas acciones de cada día son las que hacen o deshacen el carácter.&quot; , " + \
            "bueno !!!! Es así,bueno,&nbsp;,&nbsp;",
        self.task = Task(
            batch=self.batch,
            input_csv_fields=dict(zip(field_names, values))
        )
        self.task.save()
コード例 #53
0
ファイル: views.py プロジェクト: hltcoe/turkle
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
            })

    # Create a row for each Batch that has Tasks available for the current user
    batch_rows = []
    for project in Project.all_available_for(request.user):
        for batch in project.batches_available_for(request.user):
            total_tasks_available = batch.total_available_tasks_for(request.user)
            if total_tasks_available > 0:
                batch_rows.append({
                    'project_name': 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
    })
コード例 #54
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
            })

    # Create a row for each Batch that has Tasks available for the current user
    batch_rows = []
    for project in Project.all_available_for(request.user):
        for batch in project.batches_available_for(request.user):
            total_tasks_available = batch.total_available_tasks_for(request.user)
            if total_tasks_available > 0:
                batch_rows.append({
                    'project_name': 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
    })
コード例 #55
0
ファイル: test_views.py プロジェクト: hltcoe/turkle
    def setUp(self):
        project = Project(name='foo', html_template='<p>${foo}: ${bar}</p><textarea>')
        project.save()

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

        task = Task(
            batch=self.batch,
            input_csv_fields={'foo': 'fufu', 'bar': 'baba'}
        )
        task.save()
        TaskAssignment(
            answers={'a1': 'sauce'},
            assigned_to=None,
            completed=True,
            task=task
        ).save()
コード例 #56
0
ファイル: test_admin_views.py プロジェクト: hltcoe/turkle
    def test_batch_add_missing_file_field(self):
        project = Project(name='foo', html_template='<p>${emoji}: ${more_emoji}</p><textarea>')
        project.save()

        self.assertFalse(Batch.objects.filter(name='batch_save').exists())

        client = django.test.Client()
        client.login(username='******', password='******')
        response = client.post(
            '/admin/turkle/batch/add/',
            {
                'assignments_per_task': 1,
                'project': project.id,
                'name': 'batch_save',
            })
        self.assertTrue(b'Please correct the error' in response.content)
        self.assertEqual(response.status_code, 200)
        self.assertTrue(b'This field is required' in response.content)
コード例 #57
0
ファイル: test_admin_views.py プロジェクト: hltcoe/turkle
    def test_batch_add_missing_project(self):
        project = Project(name='foo', html_template='<p>${foo}: ${bar}</p><textarea>')
        project.save()

        self.assertFalse(Batch.objects.filter(name='batch_save').exists())

        client = django.test.Client()
        client.login(username='******', password='******')
        with open(os.path.abspath('turkle/tests/resources/form_1_vals.csv')) as fp:
            response = client.post(
                '/admin/turkle/batch/add/',
                {
                    'assignments_per_task': 1,
                    'name': 'batch_save',
                    'csv_file': fp
                })
        self.assertTrue(b'Please correct the error' in response.content)
        self.assertEqual(response.status_code, 200)
        self.assertTrue(b'This field is required' in response.content)
コード例 #58
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
    def test_project_to_csv(self):
        project = Project(name='test', html_template='<p>${number} - ${letter}</p><textarea>')
        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 = StringIO()
        project.to_csv(csv_output)

        rows = csv_output.getvalue().split('\r\n')
        self.assertTrue(
            '"Input.letter","Input.number","Answer.combined"' in rows[0])
        self.assertTrue(any(['"a","1","1a"' in row for row in rows[1:]]))
        self.assertTrue(any(['"b","2","2b"' in row for row in rows[1:]]))
コード例 #59
0
ファイル: test_models.py プロジェクト: hltcoe/turkle
    def test_project_to_csv_different_answers_per_batch(self):
        project = Project(name='test', html_template='<p>${letter}</p><textarea>')
        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 = StringIO()
        project.to_csv(csv_output)

        rows = csv_output.getvalue().split('\r\n')
        self.assertTrue(
            '"Input.letter","Answer.1","Answer.2","Answer.3","Answer.4"' in rows[0])
        self.assertTrue('"a","1","2","",""' in rows[1])
        self.assertTrue('"b","","","3","4"' in rows[2])
コード例 #60
0
ファイル: test_admin_views.py プロジェクト: hltcoe/turkle
    def test_batch_add_validation_variable_fields_per_row(self):
        project = Project(name='foo', html_template='<p>${f1} ${f2} ${f3}</p><textarea>')
        project.save()

        self.assertFalse(Batch.objects.filter(name='batch_save').exists())

        client = django.test.Client()
        client.login(username='******', password='******')
        # CSV file has fields 'f2' and 'f3'
        with open(os.path.abspath('turkle/tests/resources/variable_fields_per_row.csv')) as fp:
            response = client.post(
                '/admin/turkle/batch/add/',
                {
                    'project': project.id,
                    'name': 'batch_save',
                    'csv_file': fp
                })
        self.assertEqual(response.status_code, 200)
        self.assertTrue(b'Please correct the error' in response.content)
        self.assertTrue(b'line 2 has 2 fields' in response.content)
        self.assertTrue(b'line 4 has 4 fields' in response.content)