def test_post_invalid(self): testuser = UserBuilder('testuser') testuser.update( languagecode='nb' ) with self.settings(LANGUAGES=[('en', 'English')]): response = self.post_as(testuser.user, self.url, { 'languagecode': 'tu', 'redirect_url': '/successtest' }) self.assertEqual(response.status_code, 400) testuser.reload_from_db() self.assertEqual(testuser.user.languagecode, 'nb')
def test_post_valid(self): testuser = UserBuilder('testuser') testuser.update_profile( languagecode='nb' ) with self.settings(LANGUAGES=[('en', 'English')]): response = self.post_as(testuser.user, self.url, { 'languagecode': 'en', 'redirect_url': '/successtest' }) self.assertEquals(response.status_code, 302) self.assertEquals(response['Location'], 'http://testserver/successtest') testuser.reload_from_db() self.assertEquals(testuser.user.devilryuserprofile.languagecode, 'en')
def setUp(self): self.testuser = UserBuilder('testuser').user self.assignmentbuilder = PeriodBuilder\ .quickadd_ducku_duck1010_active()\ .add_admins(self.testuser)\ .add_assignment('testassignment') self.factory = RequestFactory()
def setUp(self): self.admin1 = UserBuilder('admin1').user self.assignmentbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_assignment('assignment1')\ .add_admins(self.admin1) self.url = reverse('devilry_gradingsystem_admin_setpassing_grade_min_points', kwargs={ 'assignmentid': self.assignmentbuilder.assignment.id, })
def setUp(self): self.testexaminer = UserBuilder('testexaminer').user self.deliverybuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_assignment('assignment1', points_to_grade_mapper='raw-points', passing_grade_min_points=20, max_points=100) \ .add_group(examiners=[self.testexaminer])\ .add_deadline_in_x_weeks(weeks=1)\ .add_delivery_x_hours_before_deadline(hours=1)
def test_get_last_feedbackdraft_feedback_workflow_does_not_allow_shared_feedback_drafts( self): FeedbackDraftFile.objects.create( delivery=self.deliverybuilder.delivery, saved_by=UserBuilder('otheruser').user, filename='test.txt') self.assertEquals( FeedbackDraftFile.objects.filter_accessible_files( assignment=self.assignment1builder.assignment, delivery=self.deliverybuilder.delivery, user=self.testexaminer).first(), None)
def test_get_not_admin_404_with_pluginselected(self): nobody = UserBuilder('nobody').user myregistry = GradingSystemPluginRegistry() myregistry.add(MockPointsPluginApi) with patch( 'devilry.devilry_gradingsystem.views.admin.selectplugin.gradingsystempluginregistry', myregistry): self.assertIn(MockPointsPluginApi.id, myregistry) response = self.get_as( nobody, {'grading_system_plugin_id': MockPointsPluginApi.id}) self.assertEquals(response.status_code, 404)
def setUp(self): self.admin1 = UserBuilder('admin1').user self.subjectbuilder = SubjectBuilder.quickadd_ducku_duck1010() self.periodbuilder = self.subjectbuilder.add_6month_active_period() self.assignmentbuilder = self.periodbuilder.add_assignment( 'myassignment') self.url = reverse('devilry_gradingsystem_admin_summary', kwargs={ 'assignmentid': self.assignmentbuilder.assignment.id, })
def test_get_render_other_examiner_has_feedback_draft_no_draft_sharing( self): FeedbackDraft.objects.create( delivery=self.get_empty_delivery_with_testexaminer_as_examiner(), feedbacktext_raw='Test feedback', points=30, saved_by=UserBuilder('someotheruser').user) response = self.get_as(self.get_testexaminer()) selector = htmls.S(response.content) self.assertEquals( selector.one('#id_feedbacktext').alltext_normalized, '')
def setUp(self): self.testexaminer = UserBuilder('testexaminer').user self.deliverybuilder = AssignmentGroupBuilder\ .quickadd_ducku_duck1010_active_assignment1_group()\ .add_examiners(self.testexaminer)\ .add_deadline_in_x_weeks(weeks=1)\ .add_delivery_x_hours_before_deadline(hours=1) self.draftfile = FeedbackDraftFile( delivery=self.deliverybuilder.delivery, saved_by=self.testexaminer, filename='test.txt') self.draftfile.file.save('test.txt', ContentFile('A testfile'))
def test_get_last_feedbackdraft_feedback_workflow_does_not_allow_shared_feedback_drafts( self): FeedbackDraft.objects.create(delivery=self.deliverybuilder.delivery, feedbacktext_raw='Test', feedbacktext_html='<p>Test</p>', points=30, saved_by=UserBuilder('otheruser').user) self.assertEquals( FeedbackDraft.get_last_feedbackdraft( assignment=self.assignment1builder.assignment, delivery=self.deliverybuilder.delivery, user=self.testexaminer), None)
class TestAboutMeView(TestCase): def setUp(self): self.testuserbuilder = UserBuilder('testuserbuilder') self.url = reverse('devilry_header_aboutme') def _getas(self, user, *args, **kwargs): self.client.login(username=user.username, password='******') return self.client.get(self.url, *args, **kwargs) def test_nologin(self): response = self.client.get(self.url) self.assertEquals(response.status_code, 302) def test_render_noinput(self): response = self._getas(self.testuserbuilder.user) self.assertEquals(response.status_code, 200) # html = response.content def test_languageselect(self): self.testuserbuilder.update_profile( languagecode='en' ) with self.settings(LANGUAGES=[('en', 'English'), ('nb', 'Norwegian')]): html = self._getas(self.testuserbuilder.user).content self.assertTrue(cssExists(html, '#devilry_frontpage_languageselect #devilry_change_language_form')) self.assertEquals( cssGet(html, '#devilry_change_language_form option[value="en"]')['selected'], 'selected') def test_languageselect_no_current_language(self): with self.settings( LANGUAGES=[('en', 'English'), ('nb', 'Norwegian')], LANGUAGE_CODE='nb'): html = self._getas(self.testuserbuilder.user).content self.assertTrue(cssExists(html, '#devilry_frontpage_languageselect #devilry_change_language_form')) self.assertEquals( cssGet(html, '#devilry_change_language_form option[value="nb"]')['selected'], 'selected')
def test_get_last_feedbackdraft_feedback_workflow_allows_shared_feedback_drafts( self): self.assignment1builder.update( feedback_workflow='trusted-cooperative-feedback-editing') feedbackdraft = FeedbackDraftFile.objects.create( delivery=self.deliverybuilder.delivery, saved_by=UserBuilder('otheruser').user, filename='test.txt') self.assertEquals( FeedbackDraftFile.objects.filter_accessible_files( assignment=self.assignment1builder.assignment, delivery=self.deliverybuilder.delivery, user=self.testexaminer).first(), feedbackdraft)
class TestAboutMeView(TestCase): def setUp(self): self.testuserbuilder = UserBuilder('testuserbuilder') self.url = reverse('devilry_header_aboutme') def _getas(self, user, *args, **kwargs): self.client.login(username=user.shortname, password='******') return self.client.get(self.url, *args, **kwargs) def test_nologin(self): response = self.client.get(self.url) self.assertEquals(response.status_code, 302) def test_render_noinput(self): response = self._getas(self.testuserbuilder.user) self.assertEquals(response.status_code, 200) # html = response.content def test_languageselect(self): self.testuserbuilder.update( languagecode='en' ) with self.settings(LANGUAGES=[('en', 'English'), ('nb', 'Norwegian')]): html = self._getas(self.testuserbuilder.user).content self.assertTrue(cssExists(html, '#devilry_change_language_form')) self.assertEquals( cssGet(html, '#devilry_change_language_form option[value="en"]')['selected'], 'selected') def test_languageselect_no_current_language(self): with self.settings( LANGUAGES=[('en', 'English'), ('nb', 'Norwegian')], LANGUAGE_CODE='nb'): html = self._getas(self.testuserbuilder.user).content self.assertTrue(cssExists(html, '#devilry_change_language_form')) self.assertEquals( cssGet(html, '#devilry_change_language_form option[value="nb"]')['selected'], 'selected')
def test_get_last_feedbackdraft_for_group_feedback_workflow_allows_shared_feedback_drafts( self): self.assignment1builder.update( feedback_workflow='trusted-cooperative-feedback-editing') feedbackdraft = FeedbackDraft.objects.create( delivery=self.deliverybuilder.delivery, feedbacktext_raw='Test', feedbacktext_html='<p>Test</p>', points=30, saved_by=UserBuilder('otheruser').user) self.assertEquals( FeedbackDraft.get_last_feedbackdraft_for_group( assignment=self.assignment1builder.assignment, group=self.groupbuilder.group, user=self.testexaminer), feedbackdraft)
def test_get_render_other_examiner_has_feedback_draft_draft_sharing(self): testdelivery = self.get_empty_delivery_with_testexaminer_as_examiner() assignment = testdelivery.assignment assignment.feedback_workflow = 'trusted-cooperative-feedback-editing' assignment.save() FeedbackDraft.objects.create( delivery=testdelivery, feedbacktext_raw='Test feedback', points=30, saved_by=UserBuilder('someotheruser').user) response = self.get_as(self.get_testexaminer()) selector = htmls.S(response.content) self.assertEquals( selector.one('#id_feedbacktext').alltext_normalized, 'Test feedback')
def setUp(self): self.admin1 = UserBuilder('admin1').user self.myregistry = GradingSystemPluginRegistry() self.myregistry.add(MockPointsPluginApi) self.assignmentbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_assignment('assignment1', grading_system_plugin_id=MockPointsPluginApi.id, max_points=100, points_to_grade_mapper='custom-table' )\ .add_admins(self.admin1) self.url = reverse('devilry_gradingsystem_admin_setup_custom_table', kwargs={ 'assignmentid': self.assignmentbuilder.assignment.id, })
def test_post_invalid(self): testuser = UserBuilder('testuser') testuser.update(languagecode='nb') with self.settings(LANGUAGES=[('en', 'English')]): response = self.post_as(testuser.user, self.url, { 'languagecode': 'tu', 'redirect_url': '/successtest' }) self.assertEquals(response.status_code, 400) testuser.reload_from_db() self.assertEquals(testuser.user.languagecode, 'nb')
def test_has_staticfeedbacks_warning(self): examiner1 = UserBuilder('examiner1').user delivery = self.assignmentbuilder\ .add_group()\ .add_deadline_in_x_weeks(weeks=1)\ .add_delivery_x_hours_before_deadline(hours=1)\ .add_passed_feedback(saved_by=examiner1) myregistry = GradingSystemPluginRegistry() 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.assertIn( 'You SHOULD NOT reconfigure the grading system for this assignment.', html)
def test_has_feedbackdrafts_message(self): delivery = self.assignmentbuilder\ .add_group()\ .add_deadline_in_x_weeks(weeks=1)\ .add_delivery_x_hours_before_deadline(hours=1).delivery examiner1 = UserBuilder('examiner1').user FeedbackDraft.objects.create(points=40, delivery=delivery, saved_by=examiner1, feedbacktext_html='This is a test.') myregistry = GradingSystemPluginRegistry() 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.assertIn( 'You can reconfigure the grading system for this assignment, but be careful, at least one examiner has saved a feedback draft.', html)
def test_post_with_feedbackfile_is_private(self): testexaminer = self.get_testexaminer() delivery = self.get_empty_delivery_with_testexaminer_as_examiner() feedbackdraftfile = FeedbackDraftFile( delivery=delivery, saved_by=UserBuilder('otheruser').user, filename='otherfile.txt') feedbackdraftfile.file.save('unused.txt', ContentFile('Other')) postdata = self.get_valid_post_data_without_feedbackfile_or_feedbacktext( ) postdata['feedbackfile'] = SimpleUploadedFile('testfile.txt', 'Feedback file test') self.assertEquals( FeedbackDraftFile.objects.filter(delivery=delivery).count(), 1) self.post_as(testexaminer, postdata) self.assertEquals( FeedbackDraftFile.objects.filter(delivery=delivery).count(), 2) self.assertEquals( FeedbackDraftFile.objects.filter(delivery=delivery, saved_by=testexaminer).count(), 1)
def test_send_invite_to_choices_queryset(self): UserBuilder('ignoreduser') alreadyingroupuser1 = UserBuilder('alreadyingroupuser1').user alreadyingroupuser2 = UserBuilder('alreadyingroupuser2').user hasinviteuser = UserBuilder('hasinviteuser').user matchuser1 = UserBuilder('matchuser1').user matchuser2 = UserBuilder('matchuser2').user group = 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]).group group.groupinvite_set.create(sent_by=alreadyingroupuser1, sent_to=hasinviteuser) can_invite_users = set( GroupInvite.send_invite_to_choices_queryset(group)) self.assertEquals(can_invite_users, set([matchuser1, matchuser2]))
def test_ok_as_superuser(self): self._test_as(UserBuilder('superuser', is_superuser=True).user)
def setUp(self): self.testuser = UserBuilder('testuser').user self.assignmentbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_assignment('testassignment')
def create_user(self): return UserBuilder(self.username, full_name=self.full_name, is_superuser=self.is_superuser).user
def test_403_not_owner_or_superuser(self): response = self._get_as( UserBuilder('otheruser').user, self.draftfile.id) self.assertEquals(response.status_code, 403)
def setUp(self): self.add(nodes="uio:admin(uioadmin).ifi:admin(ifiadmin,ifitechsupport)") self.add(nodes="uio.deepdummy1") self.thesuperuser = UserBuilder('thesuperuser', is_superuser=True).user
def test_get_not_admin_404(self): nobody = UserBuilder('nobody').user response = self.get_as(nobody) self.assertEquals(response.status_code, 404)
def setUp(self): self.testuserbuilder = UserBuilder('testuser') self.testuser = self.testuserbuilder.user
class TestProjectGroupOverviewView(TestCase): def setUp(self): self.testuserbuilder = UserBuilder('testuser') self.testuser = self.testuserbuilder.user def _getas(self, group_id, user, *args, **kwargs): self.client.login(username=user.shortname, password='******') url = reverse_cradmin_url( instanceid='devilry_student_group', appname='projectgroup', roleid=group_id ) return self.client.get(url, *args, **kwargs) def _postas(self, group_id, user, *args, **kwargs): self.client.login(username=user.shortname, password='******') url = reverse_cradmin_url( instanceid='devilry_student_group', appname='projectgroup', roleid=group_id ) return self.client.post(url, *args, **kwargs) def test_render(self): groupbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_assignment('assignment1')\ .add_group(students=[self.testuser]) groupbuilder.add_deadline_in_x_weeks(weeks=1) response = self._getas(groupbuilder.group.id, self.testuser) self.assertEquals(response.status_code, 200) html = response.content self.assertEquals(cssGet(html, 'h1').text.strip(), 'Project group') def test_groupinvite_not_allowed(self): groupbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_assignment('assignment1', students_can_create_groups=False)\ .add_group(students=[self.testuser]) html = self._getas(groupbuilder.group.id, self.testuser).content self.assertFalse(cssExists(html, '#devilry_student_projectgroupoverview_invitebox')) def test_groupinvite_allowed(self): 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) html = self._getas(groupbuilder.group.id, self.testuser).content self.assertTrue(cssExists(html, '#devilry_student_projectgroupoverview_invitebox')) 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'}) 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_current_group_members_usernames(self): otheruser = UserBuilder('otheruser').user groupbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_assignment('assignment1', students_can_create_groups=True)\ .add_group(students=[self.testuser, otheruser]) groupbuilder.add_deadline_in_x_weeks(weeks=1) html = self._getas(groupbuilder.group.id, self.testuser).content selector = htmls.S(html) usernames = [element.alltext_normalized for element in selector.list('.devilry-student-projectgroupoverview-username')] self.assertEquals({'testuser', 'otheruser'}, set(usernames)) def test_render_current_group_members_emails(self): otheruser = UserBuilder('otheruser').user groupbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_assignment('assignment1', students_can_create_groups=True)\ .add_group(students=[self.testuser, otheruser]) groupbuilder.add_deadline_in_x_weeks(weeks=1) html = self._getas(groupbuilder.group.id, self.testuser).content selector = htmls.S(html) emails = [element.alltext_normalized for element in selector.list('.devilry-student-projectgroupoverview-email')] self.assertEquals({'*****@*****.**', '*****@*****.**'}, set(emails)) def test_render_current_group_members_fullnames(self): otheruser = UserBuilder('otheruser', full_name='Other User').user self.testuserbuilder.update(fullname='Test User') groupbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_assignment('assignment1', students_can_create_groups=True)\ .add_group(students=[self.testuserbuilder.user, otheruser]) groupbuilder.add_deadline_in_x_weeks(weeks=1) html = self._getas(groupbuilder.group.id, self.testuserbuilder.user).content selector = htmls.S(html) emails = [element.alltext_normalized for element in selector.list('.devilry-student-projectgroupoverview-fullname')] self.assertEquals({'Test User', 'Other User'}, set(emails)) def test_send_to_post(self): inviteuser = UserBuilder('inviteuser').user groupbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_relatedstudents(self.testuser, inviteuser)\ .add_assignment('assignment1', students_can_create_groups=True)\ .add_group(students=[self.testuser]) groupbuilder.add_deadline_in_x_weeks(weeks=1) self.assertEquals(GroupInvite.objects.count(), 0) response = self._postas(groupbuilder.group.id, self.testuser, { 'sent_to': inviteuser.id }) self.assertEquals(response.status_code, 302) self.assertEquals(GroupInvite.objects.count(), 1) invite = GroupInvite.objects.all()[0] self.assertEquals(invite.sent_by, self.testuser) self.assertEquals(invite.sent_to, inviteuser) self.assertEquals(invite.accepted, None) def test_send_to_post_notrelated(self): inviteuser = UserBuilder('inviteuser').user groupbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_relatedstudents(self.testuser)\ .add_assignment('assignment1', students_can_create_groups=True)\ .add_group(students=[self.testuser]) groupbuilder.add_deadline_in_x_weeks(weeks=1) self.assertEquals(GroupInvite.objects.count(), 0) response = self._postas(groupbuilder.group.id, self.testuser, { 'sent_to': inviteuser.id }) self.assertEquals(response.status_code, 200) self.assertIn( 'Select a valid choice. {} is not one of the available choices.'.format(inviteuser.id), response.content)
def setUp(self): self.testuser1 = UserBuilder('testuser1').user self.testuser2 = UserBuilder('testuser2').user self.testuser3 = UserBuilder('testuser3').user
def setUp(self): self.testuserbuilder = UserBuilder('testuserbuilder') self.url = reverse('devilry_header_aboutme')
def setUp(self): self.testuser = UserBuilder('testuser').user DeliveryBuilder.set_memory_deliverystore()