def test_smart_create_non_electronic(self): assignment = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_assignment('assignment1', delivery_types=deliverytypes.NON_ELECTRONIC).assignment group1 = AssignmentGroup(parentnode=assignment) group2 = AssignmentGroup(parentnode=assignment) for group in group1, group2: group.save(autocreate_first_deadline_for_nonelectronic=False) deadline_datetime = Deadline.reduce_datetime_precision(DateTimeBuilder.now().plus(days=10)) result = Deadline.objects.smart_create( assignment.assignmentgroups.all(), deadline_datetime=deadline_datetime, text='Hello world') self.assertIsNone(result) self.assertEquals(group1.deadlines.count(), 1) group1 = AssignmentGroup.objects.get(id=group1.id) # Reload from db created_deadline = group1.deadlines.all()[0] self.assertEquals(created_deadline.deadline, deadline_datetime) self.assertEquals(created_deadline.text, 'Hello world') self.assertEquals(group1.last_deadline, created_deadline) self.assertEquals(group1.last_deadline.deliveries.count(), 1) self.assertEquals(group1.last_deadline.deliveries.all()[0], group1.last_delivery) self.assertTrue(group1.last_delivery.successful) self.assertEquals(group1.last_delivery.number, 1) group2 = AssignmentGroup.objects.get(id=group2.id) # Reload from db self.assertEquals(group2.deadlines.all()[0].deadline, deadline_datetime) self.assertEquals(group2.last_deadline, group2.deadlines.all()[0]) self.assertEquals(group2.last_deadline.deliveries.count(), 1) self.assertEquals(group2.last_deadline.deliveries.all()[0], group2.last_delivery) self.assertTrue(group2.last_delivery.successful) self.assertEquals(group2.last_delivery.number, 1)
def create_old_delivery_structure(): deadlinebuilder = groupbuilder \ .add_deadline( deadline=Deadline.reduce_datetime_precision( assignmentbuilder.assignment.first_deadline)) deliverybuilder = deadlinebuilder.add_delivery_x_hours_before_deadline( hours=random.randint(1, 30)) used_filenames = set() for number in xrange(filecount): while True: deliveryfile = random.choice(programs) filename = deliveryfile['filename'] if filename not in used_filenames: used_filenames.add(filename) break deliverybuilder.add_filemeta( filename=deliveryfile['filename'], data=deliveryfile['data']) if random.randint(0, 100) <= feedback_percent: feedback = StaticFeedback.from_points( assignment=assignmentbuilder.assignment, saved_by=examiner, delivery=deliverybuilder.delivery, rendered_view=self._lorem_paras(random.randint(1, 5)), points=random.randint(minpoints, maxpoints)) feedback.save()
def test_smart_create_no_text(self): assignmentbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_assignment('assignment1') group1builder = assignmentbuilder.add_group() deadline_datetime = Deadline.reduce_datetime_precision(DateTimeBuilder.now().plus(days=10)) Deadline.objects.smart_create( assignmentbuilder.assignment.assignmentgroups.all(), deadline_datetime=deadline_datetime) group1builder.reload_from_db() self.assertEquals(group1builder.group.last_deadline.deadline, deadline_datetime) self.assertEquals(group1builder.group.last_deadline.text, None)
def test_default_success_url(self): group1builder = self.assignment1builder\ .add_group(examiners=[self.examiner1]) deadline_datetime = Deadline.reduce_datetime_precision(DateTimeBuilder.now().plus(days=10)) response = self._postas(self.examiner1, { 'group_ids': [group1builder.group.id], 'deadline': isoformat_datetime(deadline_datetime), 'text': 'Hello world', 'add_deadline_form': 'i18nlabel' }) self.assertEquals(response.status_code, 302) self.assertTrue(response['Location'].endswith( reverse('devilry_examiner_allgroupsoverview', kwargs={'assignmentid': self.assignment1builder.assignment.id})))
def test_custom_success_url(self): group1builder = self.assignment1builder\ .add_group(examiners=[self.examiner1]) deadline_datetime = Deadline.reduce_datetime_precision(DateTimeBuilder.now().plus(days=10)) response = self._postas(self.examiner1, { 'group_ids': [group1builder.group.id], 'deadline': isoformat_datetime(deadline_datetime), 'text': 'Hello world', 'success_url': '/my/test', 'add_deadline_form': 'i18nlabel' }) self.assertEquals(response.status_code, 302) self.assertTrue(response['Location'].endswith('/my/test'))
def test_post_no_text_checkbox_required(self): group1builder = self.assignment1builder\ .add_group(examiners=[self.examiner1]) deadline_datetime = Deadline.reduce_datetime_precision(DateTimeBuilder.now().plus(days=10)) response = self._postas(self.examiner1, { 'group_ids': [group1builder.group.id], 'deadline': isoformat_datetime(deadline_datetime), 'add_deadline_form': 'i18nlabel' }) self.assertEquals(response.status_code, 200) group1builder.reload_from_db() self.assertEquals(group1builder.group.last_deadline, None) self.assertIn('You must specify an "About this deadline" message, or select that you do not want to specify a message.', response.content)
def test_post_no_text(self): group1builder = self.assignment1builder\ .add_group(examiners=[self.examiner1]) deadline_datetime = Deadline.reduce_datetime_precision(DateTimeBuilder.now().plus(days=10)) response = self._postas(self.examiner1, { 'group_ids': [group1builder.group.id], 'deadline': isoformat_datetime(deadline_datetime), 'add_deadline_form': 'i18nlabel', 'no_text': 'on' }) self.assertEquals(response.status_code, 302) group1builder.reload_from_db() self.assertEquals(group1builder.group.last_deadline.deadline, deadline_datetime) self.assertEquals(group1builder.group.last_deadline.text, '')
def test_post_why_created(self): group1builder = self.assignment1builder\ .add_group(examiners=[self.examiner1]) deadline_datetime = Deadline.reduce_datetime_precision(DateTimeBuilder.now().plus(days=10)) response = self._postas(self.examiner1, { 'group_ids': [group1builder.group.id], 'deadline': isoformat_datetime(deadline_datetime), 'text': 'Hello world', 'why_created': 'examiner-gave-another-chance', 'add_deadline_form': 'i18nlabel' }) self.assertEquals(response.status_code, 302) group1builder.reload_from_db() self.assertEquals(group1builder.group.last_deadline.why_created, 'examiner-gave-another-chance')
def test_post_no_text_checked_and_text_provided(self): group1builder = self.assignment1builder\ .add_group(examiners=[self.examiner1]) deadline_datetime = Deadline.reduce_datetime_precision(DateTimeBuilder.now().plus(days=10)) response = self._postas(self.examiner1, { 'group_ids': [group1builder.group.id], 'deadline': isoformat_datetime(deadline_datetime), 'add_deadline_form': 'i18nlabel', 'no_text': 'on', 'text': 'Test' }) self.assertEquals(response.status_code, 200) group1builder.reload_from_db() self.assertEquals(group1builder.group.last_deadline, None) self.assertIn('If you do not want to provide an "About this deadline" message, you have to clear the text field.', response.content)
def handle_noargs(self, **options): from devilry.apps.core.models import Deadline verbosity = int(options.get('verbosity', '1')) updates = 0 with transaction.commit_manually(): for deadline in Deadline.objects.all(): if deadline.deadline.microsecond != 0 and deadline.deadline.seconds != 0 and deadline.deadline.tzinfo != None: deadline.deadline = Deadline.reduce_datetime_precision(deadline.deadline) deadline.save() if verbosity > 1: print 'Updated deadline {0}'.format(deadline.id) elif verbosity > 1: print 'Deadline {0} is already correctly formatted: {1}'.format(deadline.id, deadline.deadline) updates += 1 transaction.commit() if verbosity > 0: print 'Successfully updated {0} deadlines.'.format(updates)
def test_smart_create_electronic(self): assignmentbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()\ .add_assignment('assignment1') group1builder = assignmentbuilder.add_group() group2builder = assignmentbuilder.add_group() deadline_datetime = Deadline.reduce_datetime_precision(DateTimeBuilder.now().plus(days=10)) result = Deadline.objects.smart_create( assignmentbuilder.assignment.assignmentgroups.all(), deadline_datetime=deadline_datetime, text='Hello world') self.assertIsNone(result) group1builder.reload_from_db() self.assertEquals(group1builder.group.deadlines.count(), 1) created_deadline = group1builder.group.deadlines.all()[0] self.assertEquals(created_deadline.deadline, deadline_datetime) self.assertEquals(created_deadline.text, 'Hello world') self.assertEquals(group1builder.group.last_deadline, created_deadline) self.assertEquals(group1builder.group.last_deadline.deliveries.count(), 0) group2builder.reload_from_db() self.assertEquals(group2builder.group.deadlines.all()[0].deadline, deadline_datetime) self.assertEquals(group2builder.group.last_deadline, group2builder.group.deadlines.all()[0])
def add_duck1100(self): duck1100 = self.duckburgh.add_subject( short_name='duck1100', long_name='DUCK1100 - Programming for the natural sciences') duck1100.add_admins(self.thor) relatedstudents = [ RelatedStudent(user=self.april, tags='group1'), ] relatedstudents.extend(self._as_relatedstudents(self.good_students.values(), 'group1')) relatedstudents.extend(self._as_relatedstudents(self.bad_students.values(), 'group2')) testsemester = duck1100.add_6month_active_period( short_name='testsemester', long_name='Testsemester', relatedstudents=relatedstudents, relatedexaminers=[ RelatedExaminer(user=self.thor, tags=''), RelatedExaminer(user=self.donald, tags='group1'), RelatedExaminer(user=self.scrooge, tags='group2') ]) # old_relatedstudentusers = [ # self.thor, # self.april, self.bad_students['dewey'], # self.bad_students['louie'], self.bad_students['june'], # self.good_students['loki'], self.good_students['kvasir']] # old_relatedstudents = self._as_relatedstudents(old_relatedstudentusers, tags='') oldtestsemester = duck1100.add_6month_lastyear_period( short_name='oldtestsemester', long_name='Old testsemester', relatedstudents=relatedstudents, relatedexaminers=[ RelatedExaminer(user=self.thor, tags=''), RelatedExaminer(user=self.donald, tags='group1'), RelatedExaminer(user=self.scrooge, tags='group2') ]) for periodbuilder, weekoffset in [ (oldtestsemester, 52), (testsemester, 0)]: self.build_random_pointassignmentdata( periodbuilder=periodbuilder, weeks_ago=weekoffset + 6, filecount=4, short_name='week1', long_name='Week 1') self.build_random_pointassignmentdata( periodbuilder=periodbuilder, weeks_ago=weekoffset + 5, filecount=2, short_name='week2', long_name='Week 2') self.build_random_pointassignmentdata( periodbuilder=periodbuilder, weeks_ago=weekoffset + 4, filecount=4, short_name='week3', long_name='Week 3') self.build_random_pointassignmentdata( periodbuilder=periodbuilder, weeks_ago=weekoffset + 3, filecount=8, short_name='week4', long_name='Week 4') if weekoffset == 0: self.build_random_pointassignmentdata( periodbuilder=periodbuilder, weeks_ago=weekoffset + 1, filecount=6, short_name='week5', long_name='Week 5', feedback_percent=50) week6 = periodbuilder.add_assignment_x_weeks_ago( weeks=weekoffset, short_name='week6', long_name='Week 6', passing_grade_min_points=1, grading_system_plugin_id='devilry_gradingsystemplugin_points', points_to_grade_mapper='raw-points', max_points=6 ) for user in self.allstudentslist + [self.april]: examiner = random.choice(self.examiners) week6 \ .add_group(students=[user], examiners=[examiner]) \ .add_deadline(deadline=Deadline.reduce_datetime_precision(DateTimeBuilder.now().plus(days=7))) else: self.build_random_pointassignmentdata( periodbuilder=periodbuilder, weeks_ago=weekoffset + 1, filecount=1, short_name='week5', long_name='Week 5') self.build_random_pointassignmentdata( periodbuilder=periodbuilder, weeks_ago=weekoffset, filecount=2, short_name='week6', long_name='Week 6') print print("*" * 70) print print('duck1100 added') print print("*" * 70) print