def test_bulk_send_emails_message_and_messagereceivers_created(self): new_deadline = datetime.utcnow() testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start', long_name='Assignment 1') testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) testgroup2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) testgroup3 = mommy.make('core.AssignmentGroup', parentnode=testassignment) test_fb1 = group_mommy.feedbackset_first_attempt_published( group=testgroup1, grading_points=1, deadline_datetime=new_deadline) test_fb2 = group_mommy.feedbackset_first_attempt_published( group=testgroup2, grading_points=1, deadline_datetime=new_deadline) test_fb3 = group_mommy.feedbackset_first_attempt_published( group=testgroup3, grading_points=1, deadline_datetime=new_deadline) student1 = mommy.make('core.Candidate', assignment_group=testgroup1) mommy.make('devilry_account.UserEmail', user=student1.relatedstudent.user, email='*****@*****.**') student2 = mommy.make('core.Candidate', assignment_group=testgroup2) mommy.make('devilry_account.UserEmail', user=student2.relatedstudent.user, email='*****@*****.**') student3 = mommy.make('core.Candidate', assignment_group=testgroup3) mommy.make('devilry_account.UserEmail', user=student3.relatedstudent.user, email='*****@*****.**') deadline_email.bulk_send_new_attempt_email( assignment_id=testassignment.id, feedbackset_id_list=[test_fb1.id, test_fb2.id, test_fb3.id], domain_url_start='http://www.example.com/') self.assertEqual(len(mail.outbox), 3) self.assertEqual(Message.objects.count(), 3) self.assertEqual(MessageReceiver.objects.count(), 3)
def __give_new_attempt(self, deadline, text, assignment_group_ids): """ Give a new attempt to the selected ``AssignmentGroups``. This will create new ``FeedbackSet``s with the new deadline, and an attached ``GroupComment``. Args: deadline: The new deadline. text: comment text. assignment_group_ids: groups that gets a new attempt. """ now_without_sec_and_micro = timezone.now().replace(microsecond=0) with transaction.atomic(): feedbackset_id_list = [] for group_id in assignment_group_ids: feedbackset_id = self.__create_feedbackset( group_id=group_id, deadline=deadline, created_datetime=now_without_sec_and_micro) self.__create_groupcomment( feedback_set_id=feedbackset_id, publishing_time=now_without_sec_and_micro + timezone.timedelta(microseconds=1), text=text) feedbackset_id_list.append(feedbackset_id) # deadline_email.bulk_send_new_attempt_email( # feedbackset_id_list=feedbackset_id_list, # domain_url_start=self.request.build_absolute_uri('/')) deadline_email.bulk_send_new_attempt_email( assignment_id=self.assignment.id, feedbackset_id_list=feedbackset_id_list, domain_url_start=self.request.build_absolute_uri('/'))
def __give_new_attempt(self, deadline, text, assignment_group_ids): """ Give a new attempt to the selected ``AssignmentGroups``. This will create new ``FeedbackSet``s with the new deadline, and an attached ``GroupComment``. Args: deadline: The new deadline. text: comment text. assignment_group_ids: groups that gets a new attempt. """ now_without_sec_and_micro = timezone.now().replace(microsecond=0) with transaction.atomic(): feedbackset_id_list = [] for group_id in assignment_group_ids: feedbackset_id = self.__create_feedbackset( group_id=group_id, deadline=deadline, created_datetime=now_without_sec_and_micro ) self.__create_groupcomment( feedback_set_id=feedbackset_id, publishing_time=now_without_sec_and_micro + timezone.timedelta(microseconds=1), text=text ) feedbackset_id_list.append(feedbackset_id) # deadline_email.bulk_send_new_attempt_email( # feedbackset_id_list=feedbackset_id_list, # domain_url_start=self.request.build_absolute_uri('/')) deadline_email.bulk_send_new_attempt_email( assignment_id=self.assignment.id, feedbackset_id_list=feedbackset_id_list, domain_url_start=self.request.build_absolute_uri('/'))
def test_send_new_attempt_email_recipients(self): test_feedbackset = self.__setup_feedback_set( new_deadline=timezone.now() + timezone.timedelta(days=10)) deadline_email.bulk_send_new_attempt_email( assignment_id=test_feedbackset.group.parentnode_id, feedbackset_id_list=[test_feedbackset.id], domain_url_start='http://www.example.com/') self.assertEqual(mail.outbox[0].recipients(), ['*****@*****.**'])
def test_send_new_attempt_email_recipients(self): test_feedbackset = self.__setup_feedback_set(new_deadline=timezone.now() + timezone.timedelta(days=10)) deadline_email.bulk_send_new_attempt_email( assignment_id=test_feedbackset.group.parentnode_id, feedbackset_id_list=[test_feedbackset.id], domain_url_start='http://www.example.com/' ) self.assertEqual(mail.outbox[0].recipients(), ['*****@*****.**'])
def test_send_new_attempt_email_message_and_messagereceivers_created(self): test_feedbackset = self.__setup_feedback_set( new_deadline=timezone.now() + timezone.timedelta(days=10)) deadline_email.bulk_send_new_attempt_email( assignment_id=test_feedbackset.group.parentnode_id, feedbackset_id_list=[test_feedbackset.id], domain_url_start='http://www.example.com/') self.assertEqual(Message.objects.count(), 1) self.assertEqual(MessageReceiver.objects.count(), 1)
def test_send_new_attempt_email_message_and_messagereceivers_created(self): test_feedbackset = self.__setup_feedback_set(new_deadline=timezone.now() + timezone.timedelta(days=10)) deadline_email.bulk_send_new_attempt_email( assignment_id=test_feedbackset.group.parentnode_id, feedbackset_id_list=[test_feedbackset.id], domain_url_start='http://www.example.com/' ) self.assertEqual(Message.objects.count(), 1) self.assertEqual(MessageReceiver.objects.count(), 1)
def test_send_new_attempt_email_subject(self): test_feedbackset = self.__setup_feedback_set( new_deadline=timezone.now() + timezone.timedelta(days=10)) deadline_email.bulk_send_new_attempt_email( assignment_id=test_feedbackset.group.parentnode_id, feedbackset_id_list=[test_feedbackset.id], domain_url_start='http://www.example.com/') self.assertEqual( mail.outbox[0].subject, '[Devilry] New attempt for {}'.format( test_feedbackset.group.parentnode.long_name))
def test_send_new_attempt_email_subject(self): test_feedbackset = self.__setup_feedback_set(new_deadline=timezone.now() + timezone.timedelta(days=10)) deadline_email.bulk_send_new_attempt_email( assignment_id=test_feedbackset.group.parentnode_id, feedbackset_id_list=[test_feedbackset.id], domain_url_start='http://www.example.com/' ) self.assertEqual( mail.outbox[0].subject, '[Devilry] New attempt for {}'.format(test_feedbackset.group.parentnode.long_name))
def test_send_new_attempt_email_link(self): test_feedbackset = self.__setup_feedback_set( new_deadline=timezone.now() + timezone.timedelta(days=10)) deadline_email.bulk_send_new_attempt_email( assignment_id=test_feedbackset.group.parentnode_id, feedbackset_id_list=[test_feedbackset.id], domain_url_start='http://www.example.com/') feedback_link = 'http://www.example.com/devilry_group/student/{}/feedbackfeed/'.format( test_feedbackset.group.id) self.assertEqual( htmls.S(mail.outbox[0].message().as_string()).one( '.devilry_email_deadline_new_attempt_detail_url'). alltext_normalized, feedback_link)
def test_send_new_attempt_email_link(self): test_feedbackset = self.__setup_feedback_set(new_deadline=timezone.now() + timezone.timedelta(days=10)) deadline_email.bulk_send_new_attempt_email( assignment_id=test_feedbackset.group.parentnode_id, feedbackset_id_list=[test_feedbackset.id], domain_url_start='http://www.example.com/' ) feedback_link = 'http://www.example.com/devilry_group/student/{}/feedbackfeed/'.format( test_feedbackset.group.id) self.assertEqual( htmls.S(mail.outbox[0].message().as_string()).one( '.devilry_email_deadline_new_attempt_detail_url').alltext_normalized, feedback_link)
def test_send_new_attempt_email_body_text_with_deadline(self): test_feedbackset = self.__setup_feedback_set(new_deadline=datetime.utcnow()) deadline_email.bulk_send_new_attempt_email( assignment_id=test_feedbackset.group.parentnode_id, feedbackset_id_list=[test_feedbackset.id], domain_url_start='http://www.example.com/') self.assertEqual( htmls.S(mail.outbox[0].message().as_string()).one( '.devilry_email_deadline_new_attempt_info_text').alltext_normalized, 'You have been given a new attempt in {} with deadline {}'.format( test_feedbackset.group.parentnode.long_name, defaultfilters.date(test_feedbackset.deadline_datetime, 'DATETIME_FORMAT'))) self.assertEqual( htmls.S(mail.outbox[0].message().as_string()).one( '.devilry_email_deadline_new_attempt_detail_text').alltext_normalized, 'See the delivery feed for more details:')
def test_send_new_attempt_email_body_text_with_deadline(self): test_feedbackset = self.__setup_feedback_set( new_deadline=datetime.utcnow()) deadline_email.bulk_send_new_attempt_email( assignment_id=test_feedbackset.group.parentnode_id, feedbackset_id_list=[test_feedbackset.id], domain_url_start='http://www.example.com/') self.assertEqual( htmls.S(mail.outbox[0].message().as_string()).one( '.devilry_email_deadline_new_attempt_info_text'). alltext_normalized, 'You have been given a new attempt in {} with deadline {}'.format( test_feedbackset.group.parentnode.long_name, defaultfilters.date(test_feedbackset.deadline_datetime, 'DATETIME_FORMAT'))) self.assertEqual( htmls.S(mail.outbox[0].message().as_string()).one( '.devilry_email_deadline_new_attempt_detail_text'). alltext_normalized, 'See the delivery feed for more details:')
def test_bulk_send_emails(self): new_deadline = datetime.utcnow() testassignment = mommy.make_recipe( 'devilry.apps.core.assignment_activeperiod_start', long_name='Assignment 1') testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) testgroup2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) testgroup3 = mommy.make('core.AssignmentGroup', parentnode=testassignment) test_fb1 = group_mommy.feedbackset_first_attempt_published( group=testgroup1, grading_points=1, deadline_datetime=new_deadline) test_fb2 = group_mommy.feedbackset_first_attempt_published( group=testgroup2, grading_points=1, deadline_datetime=new_deadline) test_fb3 = group_mommy.feedbackset_first_attempt_published( group=testgroup3, grading_points=1, deadline_datetime=new_deadline) student1 = mommy.make('core.Candidate', assignment_group=testgroup1) mommy.make('devilry_account.UserEmail', user=student1.relatedstudent.user, email='*****@*****.**') student2 = mommy.make('core.Candidate', assignment_group=testgroup2) mommy.make('devilry_account.UserEmail', user=student2.relatedstudent.user, email='*****@*****.**') student3 = mommy.make('core.Candidate', assignment_group=testgroup3) mommy.make('devilry_account.UserEmail', user=student3.relatedstudent.user, email='*****@*****.**') deadline_email.bulk_send_new_attempt_email( assignment_id=testassignment.id, feedbackset_id_list=[test_fb1.id, test_fb2.id, test_fb3.id], domain_url_start='http://www.example.com/') self.assertEqual(len(mail.outbox), 3) recipient_list = [] for mail_item in mail.outbox: self.assertEqual(len(mail_item.recipients()), 1) recipient_list.append(mail_item.recipients()[0]) self.assertIn('*****@*****.**', recipient_list) self.assertIn('*****@*****.**', recipient_list) self.assertIn('*****@*****.**', recipient_list)