def test_chunked_queries_send_numerous_emails(self, email_mock):
        """
        Test sending a large number of emails, to test the chunked querying
        """
        mock_factory = MockCourseEmailResult()
        email_mock.side_effect = mock_factory.get_mock_update_subtask_status()
        added_users = []
        for _ in xrange(LARGE_NUM_EMAILS):
            user = UserFactory()
            added_users.append(user)
            CourseEnrollmentFactory.create(user=user, course_id=self.course.id)

        optouts = []
        for i in [1, 3, 9, 10, 18]:  # 5 random optouts
            user = added_users[i]
            optouts.append(user)
            optout = Optout(user=user, course_id=self.course.id)
            optout.save()

        test_email = {
            'action': 'Send email',
            'to_option': 'all',
            'subject': 'test subject for all',
            'message': 'test message for all'
        }
        response = self.client.post(self.url, test_email)
        self.assertContains(response, "Your email was successfully queued for sending.")
        self.assertEquals(mock_factory.emails_sent,
                          1 + len(self.staff) + len(self.students) + LARGE_NUM_EMAILS - len(optouts))
        outbox_contents = [e.to[0] for e in mail.outbox]
        should_send_contents = ([self.instructor.email] +
                                [s.email for s in self.staff] +
                                [s.email for s in self.students] +
                                [s.email for s in added_users if s not in optouts])
        self.assertItemsEqual(outbox_contents, should_send_contents)
Beispiel #2
0
    def test_is_user_opted_out_for_course(self):
        user = UserFactory.create()
        course_id = CourseKey.from_string('abc/123/doremi')

        self.assertFalse(Optout.is_user_opted_out_for_course(user, course_id))

        Optout.objects.create(
            user=user,
            course_id=course_id,
        )

        self.assertTrue(Optout.is_user_opted_out_for_course(user, course_id))
Beispiel #3
0
    def test_is_user_opted_out_for_course(self):
        user = UserFactory.create()
        course_id = CourseKey.from_string('abc/123/doremi')

        self.assertFalse(Optout.is_user_opted_out_for_course(user, course_id))

        Optout.objects.create(
            user=user,
            course_id=course_id,
        )

        self.assertTrue(Optout.is_user_opted_out_for_course(user, course_id))
Beispiel #4
0
def is_user_opted_out_for_course(user, course_id):
    """
    Arguments:
        user: user whose opt out status is to be returned
        course_id (CourseKey): id of the course

    Returns:
        bool: True if user has opted out of e-mails for the course
        associated with course_id, False otherwise.
    """
    return Optout.is_user_opted_out_for_course(user, course_id)
Beispiel #5
0
def is_user_opted_out_for_course(user, course_id):
    """
    Arguments:
        user: user whose opt out status is to be returned
        course_id (CourseKey): id of the course

    Returns:
        bool: True if user has opted out of e-mails for the course
        associated with course_id, False otherwise.
    """
    return Optout.is_user_opted_out_for_course(user, course_id)
    def test_chunked_queries_send_numerous_emails(self, email_mock):
        """
        Test sending a large number of emails, to test the chunked querying
        """
        mock_factory = MockCourseEmailResult()
        email_mock.side_effect = mock_factory.get_mock_update_subtask_status()
        added_users = []
        for _ in xrange(LARGE_NUM_EMAILS):
            user = UserFactory()
            added_users.append(user)
            CourseEnrollmentFactory.create(user=user, course_id=self.course.id)

        optouts = []
        for i in [1, 3, 9, 10, 18]:  # 5 random optouts
            user = added_users[i]
            optouts.append(user)
            optout = Optout(user=user, course_id=self.course.id)
            optout.save()

        test_email = {
            "action": "Send email",
            "send_to": "all",
            "subject": "test subject for all",
            "message": "test message for all",
        }
        # Post the email to the instructor dashboard API
        response = self.client.post(self.send_mail_url, test_email)
        self.assertEquals(json.loads(response.content), self.success_content)

        self.assertEquals(
            mock_factory.emails_sent, 1 + len(self.staff) + len(self.students) + LARGE_NUM_EMAILS - len(optouts)
        )
        outbox_contents = [e.to[0] for e in mail.outbox]
        should_send_contents = (
            [self.instructor.email]
            + [s.email for s in self.staff]
            + [s.email for s in self.students]
            + [s.email for s in added_users if s not in optouts]
        )
        self.assertItemsEqual(outbox_contents, should_send_contents)
Beispiel #7
0
    def test_chunked_queries_send_numerous_emails(self, email_mock):
        """
        Test sending a large number of emails, to test the chunked querying
        """
        mock_factory = MockCourseEmailResult()
        email_mock.side_effect = mock_factory.get_mock_update_subtask_status()
        added_users = []
        for _ in xrange(LARGE_NUM_EMAILS):
            user = UserFactory()
            added_users.append(user)
            CourseEnrollmentFactory.create(user=user, course_id=self.course.id)

        optouts = []
        for i in [1, 3, 9, 10, 18]:  # 5 random optouts
            user = added_users[i]
            optouts.append(user)
            optout = Optout(user=user, course_id=self.course.id)
            optout.save()

        test_email = {
            'action': 'Send email',
            'send_to': 'all',
            'subject': 'test subject for all',
            'message': 'test message for all'
        }
        # Post the email to the instructor dashboard API
        response = self.client.post(self.send_mail_url, test_email)
        self.assertEquals(json.loads(response.content), self.success_content)

        self.assertEquals(
            mock_factory.emails_sent, 1 + len(self.staff) +
            len(self.students) + LARGE_NUM_EMAILS - len(optouts))
        outbox_contents = [e.to[0] for e in mail.outbox]
        should_send_contents = (
            [self.instructor.email] + [s.email for s in self.staff] +
            [s.email for s in self.students] +
            [s.email for s in added_users if s not in optouts])
        self.assertItemsEqual(outbox_contents, should_send_contents)