def test_list_ordering(self):
     currentperiodbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()
     for short_name in ('week1', 'week2', 'week3'):
         currentperiodbuilder.add_assignment(short_name)\
             .add_group().add_examiners(self.examiner1)
     response = self._getas('examiner1')
     self.assertEquals(response.status_code, 200)
     html = response.content
     self.assertEquals(len(cssFind(html, '.active-assignment-listing-item')), 3)
     names = [name.text.strip() for name in cssFind(html, '.assignmentname')]
     self.assertEquals(names, [
         'duck1010.active - week3',
         'duck1010.active - week2',
         'duck1010.active - week1'])
 def test_deadline_ordering(self):
     groupbuilder = self.week1builder.add_group(
             examiners=[self.examiner1])
     deadline2 = groupbuilder.add_deadline_in_x_weeks(weeks=1).deadline
     deadline3 = groupbuilder.add_deadline_in_x_weeks(weeks=2).deadline
     deadline1 = groupbuilder.add_deadline_x_weeks_ago(weeks=1).deadline
     with self.settings(DATETIME_FORMAT=_DJANGO_ISODATETIMEFORMAT, USE_L10N=False):
         response = self._getas('examiner1', groupbuilder.group.id)
     self.assertEquals(response.status_code, 200)
     html = response.content
     prefixes = map(lambda element: element.text.strip(), cssFind(html, '.deadline-header-prefix'))
     self.assertEquals(prefixes, ['Deadline 3', 'Deadline 2', 'Deadline 1'])
     datetimes = map(lambda element: element.text.strip(), cssFind(html, '.deadline-datetime'))
     self.assertEquals(datetimes,
         [_isoformat_datetime(deadline.deadline) for deadline in (deadline3, deadline2, deadline1)])
    def test_render(self):
        myregistry = GradingSystemPluginRegistry()
        myregistry.add(MockPointsPluginApi)
        self.assignmentbuilder.update(grading_system_plugin_id=MockPointsPluginApi.id)
        with patch('devilry.apps.core.models.assignment.gradingsystempluginregistry', myregistry):
            response = self.get_as(self.admin1)
            self.assertEquals(response.status_code, 200)
            html = response.content
            self.assertEquals(cssGet(html, '.page-header h1').text.strip(),
                'How are results presented to the student?')
            self.assertEquals(len(cssFind(html, '.devilry_gradingsystem_verbose_selectbox')), 3)

            self.assertEquals(cssGet(html, '.passed-failed_points_to_grade_mapper_box h2').text.strip(),
                'As passed or failed')
            self.assertEquals(cssGet(html, '.passed-failed_points_to_grade_mapper_box a.btn')['href'],
                '?points_to_grade_mapper=passed-failed')

            self.assertEquals(cssGet(html, '.raw-points_points_to_grade_mapper_box h2').text.strip(),
                'As points')
            self.assertEquals(cssGet(html, '.raw-points_points_to_grade_mapper_box a.btn')['href'],
                '?points_to_grade_mapper=raw-points')

            self.assertEquals(cssGet(html, '.custom-table_points_to_grade_mapper_box h2').text.strip(),
                'As a text looked up in a custom table')
            self.assertEquals(cssGet(html, '.custom-table_points_to_grade_mapper_box a.btn')['href'],
                '?points_to_grade_mapper=custom-table')
 def test_filemeta_links_multi(self):
     deliverybuilder = self.week1builder\
         .add_group(examiners=[self.examiner1])\
         .add_deadline_x_weeks_ago(weeks=1)\
         .add_delivery_x_hours_before_deadline(hours=1)
     deliverybuilder.add_filemeta( filename='b.txt', data='test')
     deliverybuilder.add_filemeta(filename='a.txt', data='test')
     response = self._getas('examiner1', deliverybuilder.delivery.id)
     html = response.content
     self.assertTrue(cssExists(html, '.delivery_files'))
     self.assertEquals(len(cssFind(html, '.delivery_files a')), 3) # One for the "Download files"-button and one for each file
     self.assertTrue(cssExists(html, '.delivery_files .btn'))
     self.assertEquals(cssGet(html, '.delivery_files .btn').text.strip(),
         'Download files')
     filenames = map(lambda e: e.text.strip(), cssFind(html, '.delivery_files ul li'))
     self.assertEquals(filenames, ['a.txt', 'b.txt'])
 def test_deadline_render_no_text(self):
     groupbuilder = self.week1builder.add_group(
             examiners=[self.examiner1])
     deadlinebuilder = groupbuilder.add_deadline_in_x_weeks(weeks=1)
     response = self._getas('examiner1', groupbuilder.group.id)
     html = response.content
     self.assertEquals(len(cssFind(html, '.deadlinebox .deadline-text')), 0)
 def test_assignmentadmin(self):
     self.assignmentbuilder.add_admins(self.admin1)
     response = self.get_as(self.admin1)
     html = response.content
     breadcrumb = cssFind(html, 'ol.breadcrumb li')
     self.assertEquals(len(breadcrumb), 3)
     self.assertEquals(breadcrumb[0].text, 'Subject administrator')
     self.assertEquals(breadcrumb[1].text, 'duck1010.active.myassignment')
     self.assertEquals(breadcrumb[2].text, 'Grading system')
Example #7
0
 def test_assignmentadmin(self):
     self.assignmentbuilder.add_admins(self.admin1)
     response = self.get_as(self.admin1)
     html = response.content
     breadcrumb = cssFind(html, 'ol.breadcrumb li')
     self.assertEquals(len(breadcrumb), 3)
     self.assertEquals(breadcrumb[0].text, 'Subject administrator')
     self.assertEquals(breadcrumb[1].text, 'duck1010.active.myassignment')
     self.assertEquals(breadcrumb[2].text, 'Grading system')
 def test_delivery_order(self):
     groupbuilder = self.week1builder.add_group(
             examiners=[self.examiner1])
     deadlinebuilder = groupbuilder.add_deadline_in_x_weeks(weeks=1)
     delivery1 = deadlinebuilder.add_delivery_x_hours_before_deadline(hours=10).delivery
     delivery2 = deadlinebuilder.add_delivery_x_hours_before_deadline(hours=5).delivery
     delivery3 = deadlinebuilder.add_delivery_x_hours_before_deadline(hours=1).delivery
     with self.settings(DATETIME_FORMAT=_DJANGO_ISODATETIMEFORMAT, USE_L10N=False):
         response = self._getas('examiner1', groupbuilder.group.id)
     html = response.content
     deliveries = map(lambda element: element.text.strip(), cssFind(html, '.delivery h3 a'))
     self.assertEquals(deliveries,
         ['Delivery #3', 'Delivery #2', 'Delivery #1'])
     datetimes = map(lambda element: element.text.strip(), cssFind(html, '.delivery .time_of_delivery'))
     self.assertEquals(datetimes, [
         _isoformat_datetime(delivery3.time_of_delivery),
         _isoformat_datetime(delivery2.time_of_delivery),
         _isoformat_datetime(delivery1.time_of_delivery),
     ])
    def test_results_ordering(self):
        self.assignmentbuilder\
            .add_group(name='Group A')\
            .add_deadline_in_x_weeks(weeks=1)\
            .add_delivery()\
            .add_filemeta(filename='Test1.java', data='if(i==10) {}')
        self.assignmentbuilder\
            .add_group(name='Group B')\
            .add_deadline_in_x_weeks(weeks=1)\
            .add_delivery()\
            .add_filemeta(filename='Test2.java', data='class Test {if(i==10) {}}')
        self.assignmentbuilder\
            .add_group(name='Group C')\
            .add_deadline_in_x_weeks(weeks=1)\
            .add_delivery()\
            .add_filemeta(filename='Test3.java', data='class Test {}')
        detektorassignment = DetektorAssignment.objects.create(
            assignment_id=self.assignmentbuilder.assignment.id,
            processing_started_by=self.testuser)
        AssignmentParser(assignment_id=self.assignmentbuilder.assignment.id).run_detektor()
        CompareManyCollection(detektorassignment).save()

        request = self._create_mock_getrequest(data={
            'language': 'java'
        })
        response = AssignmentAssemblyView.as_view()(
            request, assignmentid=self.assignmentbuilder.assignment.id)
        response.render()

        displaynames = []
        for displayname1, displayname2 in zip(
                [span.text.strip() for span in
                 cssFind(response.content, '#detektorassembly-results .detektorassembly-delivery1-displayname')],
                [span.text.strip() for span in
                 cssFind(response.content, '#detektorassembly-results .detektorassembly-delivery2-displayname')]):
            displaynames.append({displayname1, displayname2})
        self.assertEqual(
            displaynames,
            [
                {'Group A', 'Group B'},
                {'Group A', 'Group C'},
            ])
 def test_list_single(self):
     currentperiodbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()
     week1builder = currentperiodbuilder.add_assignment('week1', 'Week 1')
     week1builder.add_group().add_examiners(self.examiner1)
     response = self._getas('examiner1')
     self.assertEquals(response.status_code, 200)
     html = response.content
     self.assertEquals(len(cssFind(html, '.active-assignment-listing-item')), 1)
     linktag = cssGet(html, 'a.assignment-duck1010.active.week1')
     self.assertEquals(linktag.text.strip(), 'duck1010.active - Week 1')
     self.assertEquals(linktag['href'], '/devilry_examiner/allgroupsoverview/{}/waiting_for_feedback_or_all'.format(week1builder.assignment.id))
 def test_render(self):
     myregistry = GradingSystemPluginRegistry()
     myregistry.add(MockPointsPluginApi)
     myregistry.add(MockApprovedPluginApi)
     with patch('devilry.devilry_gradingsystem.views.admin.selectplugin.gradingsystempluginregistry', myregistry):
         response = self.get_as(self.admin1)
         self.assertEquals(response.status_code, 200)
         html = response.content
         self.assertEquals(cssGet(html, '.page-header h1').text.strip(),
             'How would you like to provide feedback to your students?')
         self.assertEquals(len(cssFind(html, '.devilry_gradingsystem_verbose_selectbox')), 2)
 def test_filemeta_links_single(self):
     deliverybuilder = self.week1builder\
         .add_group(examiners=[self.examiner1])\
         .add_deadline_x_weeks_ago(weeks=1)\
         .add_delivery_x_hours_before_deadline(hours=1)
     deliverybuilder.add_filemeta(filename='testfile.txt', data='test')
     response = self._getas('examiner1', deliverybuilder.delivery.id)
     html = response.content
     self.assertTrue(cssExists(html, '.delivery_files'))
     self.assertEquals(len(cssFind(html, '.delivery_files a')), 1)
     self.assertTrue(cssExists(html, '.delivery_files .btn'))
     self.assertEquals(cssGet(html, '.delivery_files a.btn').text.strip(),
         'testfile.txt')
    def test_render_waiting_for_response_from(self):
        inviteuser1 = UserBuilder('inviteuser1').user
        inviteuser2 = UserBuilder('inviteuser2').user
        groupbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\
            .add_assignment('assignment1', students_can_create_groups=True)\
            .add_group(students=[self.testuser])
        groupbuilder.add_deadline_in_x_weeks(weeks=1)
        for inviteuser in (inviteuser1, inviteuser2):
            groupbuilder.group.groupinvite_set.create(
                sent_by=self.testuser,
                sent_to=inviteuser)

        html = self._getas(groupbuilder.group.id, self.testuser).content
        names = [element.text.strip() for element in \
            cssFind(html, '#devilry_student_projectgroup_overview_waiting_for_response_from .invite_sent_to_displayname')]
        self.assertEquals(set(names), {'inviteuser1', 'inviteuser2'})
 def test_render(self):
     myregistry = GradingSystemPluginRegistry()
     myregistry.add(MockPointsPluginApi)
     myregistry.add(MockApprovedPluginApi)
     with patch(
             'devilry.devilry_gradingsystem.views.admin.selectplugin.gradingsystempluginregistry',
             myregistry):
         response = self.get_as(self.admin1)
         self.assertEquals(response.status_code, 200)
         html = response.content
         self.assertEquals(
             cssGet(html, '.page-header h1').text.strip(),
             'How would you like to provide feedback to your students?')
         self.assertEquals(
             len(cssFind(html, '.devilry_gradingsystem_verbose_selectbox')),
             2)
    def test_render(self):
        myregistry = GradingSystemPluginRegistry()
        myregistry.add(MockPointsPluginApi)
        self.assignmentbuilder.update(
            grading_system_plugin_id=MockPointsPluginApi.id)
        with patch(
                'devilry.apps.core.models.assignment.gradingsystempluginregistry',
                myregistry):
            response = self.get_as(self.admin1)
            self.assertEquals(response.status_code, 200)
            html = response.content
            self.assertEquals(
                cssGet(html, '.page-header h1').text.strip(),
                'How are results presented to the student?')
            self.assertEquals(
                len(cssFind(html, '.devilry_gradingsystem_verbose_selectbox')),
                3)

            self.assertEquals(
                cssGet(html, '.passed-failed_points_to_grade_mapper_box h2').
                text.strip(), 'As passed or failed')
            self.assertEquals(
                cssGet(
                    html,
                    '.passed-failed_points_to_grade_mapper_box a.btn')['href'],
                '?points_to_grade_mapper=passed-failed')

            self.assertEquals(
                cssGet(
                    html,
                    '.raw-points_points_to_grade_mapper_box h2').text.strip(),
                'As points')
            self.assertEquals(
                cssGet(html,
                       '.raw-points_points_to_grade_mapper_box a.btn')['href'],
                '?points_to_grade_mapper=raw-points')

            self.assertEquals(
                cssGet(html, '.custom-table_points_to_grade_mapper_box h2').
                text.strip(), 'As a text looked up in a custom table')
            self.assertEquals(
                cssGet(
                    html,
                    '.custom-table_points_to_grade_mapper_box a.btn')['href'],
                '?points_to_grade_mapper=custom-table')
 def test_render_custom_table(self):
     myregistry = GradingSystemPluginRegistry()
     myregistry.add(MockPointsPluginApi)
     self.assignmentbuilder.update(
         grading_system_plugin_id=MockPointsPluginApi.id,
         points_to_grade_mapper='custom-table')
     self.assignmentbuilder.assignment.get_point_to_grade_map().create_map(
         (0, 'Bad'),
         (30, 'Better'),
         (60, 'Good'))
     with patch('devilry.apps.core.models.assignment.gradingsystempluginregistry', myregistry):
         response = self.get_as(self.admin1)
         self.assertEquals(response.status_code, 200)
         html = response.content
         self.assertEquals(cssGet(html, '.page-header h1').text.strip(),
             'Select the grade required to pass')
         self.assertTrue(cssExists(html, '#id_passing_grade_min_points'))
         self.assertEquals(len(cssFind(html, '#id_passing_grade_min_points option')), 3)
         self.assertEquals(cssGet(html, '#id_passing_grade_min_points option[value=0]').text.strip(), 'Bad')
         self.assertEquals(cssGet(html, '#id_passing_grade_min_points option[value=30]').text.strip(), 'Better')
         self.assertEquals(cssGet(html, '#id_passing_grade_min_points option[value=60]').text.strip(), 'Good')
    def test_render_send_invite_to_selectlist(self):
        UserBuilder('ignoreduser')
        alreadyingroupuser1 = UserBuilder('alreadyingroupuser1').user
        alreadyingroupuser2 = UserBuilder('alreadyingroupuser2').user
        hasinviteuser = UserBuilder('hasinviteuser').user
        matchuser1 = UserBuilder('matchuser1').user
        matchuser2 = UserBuilder('matchuser2', full_name='Match User Two').user

        groupbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\
            .add_relatedstudents(
                alreadyingroupuser1, alreadyingroupuser2, hasinviteuser,
                matchuser1, matchuser2)\
            .add_assignment('assignment1', students_can_create_groups=True)\
            .add_group(students=[alreadyingroupuser1, alreadyingroupuser2])
        groupbuilder.add_deadline_in_x_weeks(weeks=1)
        groupbuilder.group.groupinvite_set.create(
            sent_by=alreadyingroupuser1,
            sent_to=hasinviteuser)

        html = self._getas(groupbuilder.group.id, alreadyingroupuser1).content
        send_to_options = [e.text.strip() for e in cssFind(html, '#id_sent_to option')]
        self.assertEquals(set(send_to_options), {'', 'matchuser1', 'Match User Two'})