def test_resolve_course_enrollments(self):
        """
        Test that the CourseEnrollmentsScopeResolver actually returns all enrollments
        """

        test_user_1 = UserFactory.create(password='******')
        CourseEnrollmentFactory(user=test_user_1, course_id=self.course.id)
        test_user_2 = UserFactory.create(password='******')
        CourseEnrollmentFactory(user=test_user_2, course_id=self.course.id)
        test_user_3 = UserFactory.create(password='******')
        enrollment = CourseEnrollmentFactory(user=test_user_3, course_id=self.course.id)

        # unenroll #3

        enrollment.is_active = False
        enrollment.save()

        resolver = CourseEnrollmentsScopeResolver()

        user_ids = resolver.resolve('course_enrollments', {'course_id': self.course.id}, None)

        # should have first two, but the third should not be present

        self.assertTrue(test_user_1.id in user_ids)
        self.assertTrue(test_user_2.id in user_ids)

        self.assertFalse(test_user_3.id in user_ids)
    def test_resolve_course_enrollments(self):
        """
        Test that the CourseEnrollmentsScopeResolver actually returns all enrollments
        """

        test_user_1 = UserFactory.create(password='******')
        CourseEnrollmentFactory(user=test_user_1, course_id=self.course.id)
        test_user_2 = UserFactory.create(password='******')
        CourseEnrollmentFactory(user=test_user_2, course_id=self.course.id)
        test_user_3 = UserFactory.create(password='******')
        enrollment = CourseEnrollmentFactory(user=test_user_3,
                                             course_id=self.course.id)

        # unenroll #3

        enrollment.is_active = False
        enrollment.save()

        resolver = CourseEnrollmentsScopeResolver()

        user_ids = resolver.resolve('course_enrollments',
                                    {'course_id': self.course.id}, None)

        # should have first two, but the third should not be present

        self.assertTrue(test_user_1.id in user_ids)
        self.assertTrue(test_user_2.id in user_ids)

        self.assertFalse(test_user_3.id in user_ids)
    def test_bad_params(self):
        """
        Makes sure the resolver returns None if all parameters aren't passed
        """

        resolver = CourseEnrollmentsScopeResolver()

        self.assertIsNone(resolver.resolve('bad', {'course_id': 'foo'}, None))

        with self.assertRaises(KeyError):
            self.assertIsNone(resolver.resolve('course_enrollments', {'bad': 'foo'}, None))
    def test_bad_params(self):
        """
        Makes sure the resolver returns None if all parameters aren't passed
        """

        resolver = CourseEnrollmentsScopeResolver()

        self.assertIsNone(resolver.resolve('bad', {'course_id': 'foo'}, None))

        with self.assertRaises(KeyError):
            self.assertIsNone(
                resolver.resolve('course_enrollments', {'bad': 'foo'}, None))
Example #5
0
def startup_notification_subsystem():
    """
    Initialize the Notification subsystem
    """
    try:
        startup.initialize()

        # register the scope resolvers that the runtime will be providing
        # to edx-notifications
        register_user_scope_resolver('course_enrollments',
                                     CourseEnrollmentsScopeResolver())
        register_user_scope_resolver('course_group',
                                     CourseGroupScopeResolver())
        register_user_scope_resolver('group_project_participants',
                                     GroupProjectParticipantsScopeResolver())
        register_user_scope_resolver('group_project_workgroup',
                                     GroupProjectParticipantsScopeResolver())
        register_user_scope_resolver('user_email_resolver',
                                     StudentEmailScopeResolver())

        # register namespace resolver
        register_namespace_resolver(CourseNamespaceResolver())
    except Exception, ex:
        # Note this will fail when we try to run migrations as manage.py will call startup.py
        # and startup.initialze() will try to manipulate some database tables.
        # We need to research how to identify when we are being started up as part of
        # a migration script
        log.error(
            'There was a problem initializing notifications subsystem. '
            'This could be because the database tables have not yet been created and '
            './manage.py lms syncdb needs to run setup.py. Error was "{err_msg}". Continuing...'
            .format(err_msg=str(ex)))