Commit be7723d4 by Chris Dodge

add a namespace_scope to return multiple fields

parent 0c740649
......@@ -33,7 +33,7 @@ class CourseEnrollmentsScopeResolver(NotificationUserScopeResolver):
The entry point to resolve a scope_name with a given scope_context
"""
if scope_name != 'course_enrollments':
if scope_name != 'course_enrollments' and scope_name != 'namespace_scope':
# we can't resolve any other scopes
return None
......@@ -51,10 +51,37 @@ class CourseEnrollmentsScopeResolver(NotificationUserScopeResolver):
else:
course_key = course_id
if scope_name == 'course_enrollments':
return CourseEnrollment.objects.values_list('user_id', flat=True).filter(
is_active=1,
course_id=course_key
)
elif scope_name == 'namespace_scope':
query = User.objects.select_related('courseenrollment')
if 'fields' in scope_context:
fields = []
if scope_context['fields'].get('id'):
fields.append('id')
if scope_context['fields'].get('email'):
fields.append('email')
if scope_context['fields'].get('first_name'):
fields.append('first_name')
if scope_context['fields'].get('last_name'):
fields.append('last_name')
else:
fields =['id', 'email', 'first_name', 'last_name']
query = query.values(*fields)
query = query.filter(
courseenrollment__is_active=1,
courseenrollment__course_id=course_key
)
return query
class StudentEmailScopeResolver(NotificationUserScopeResolver):
......
......@@ -60,6 +60,73 @@ class StudentTasksTestCase(ModuleStoreTestCase):
self.assertIsNone(resolver.resolve('bad', {'course_id': 'foo'}, None))
self.assertIsNone(resolver.resolve('course_enrollments', {'bad': 'foo'}, None))
def test_namespace_scope(self):
"""
Make sure that we handle resolving namespaces correctly
"""
test_user_1 = UserFactory.create(
password='test_pass',
email='user1@foo.com',
first_name='user',
last_name='one'
)
CourseEnrollmentFactory(user=test_user_1, course_id=self.course.id)
test_user_2 = UserFactory.create(
password='test_pass',
email='user2@foo.com',
first_name='John',
last_name='Smith'
)
CourseEnrollmentFactory(user=test_user_2, course_id=self.course.id)
test_user_3 = UserFactory.create(password='test_pass')
enrollment = CourseEnrollmentFactory(user=test_user_3, course_id=self.course.id)
# unenroll #3
enrollment.is_active = False
enrollment.save()
resolver = CourseEnrollmentsScopeResolver()
users = resolver.resolve(
'namespace_scope',
{
'course_id': self.course.id,
'fields': {
'id': True,
'email': True,
'first_name': True,
'last_name': True,
}
},
None
)
_users = [user for user in users]
self.assertEqual(len(_users), 2)
self.assertIn('id', _users[0])
self.assertIn('email', _users[0])
self.assertIn('first_name', _users[0])
self.assertIn('last_name', _users[0])
self.assertEquals(_users[0]['id'], test_user_1.id)
self.assertEquals(_users[0]['email'], test_user_1.email)
self.assertEquals(_users[0]['first_name'], test_user_1.first_name)
self.assertEquals(_users[0]['last_name'], test_user_1.last_name)
self.assertIn('id', _users[1])
self.assertIn('email', _users[1])
self.assertIn('first_name', _users[1])
self.assertIn('last_name', _users[1])
self.assertEquals(_users[1]['id'], test_user_2.id)
self.assertEquals(_users[1]['email'], test_user_2.email)
self.assertEquals(_users[1]['first_name'], test_user_2.first_name)
self.assertEquals(_users[1]['last_name'], test_user_2.last_name)
def test_email_resolver(self):
"""
Make sure we can resolve emails
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment