Commit 0225e33a by Matt Drayer Committed by Jonathan Piacenti

mattdrayer/api-middleware-regex: Support for opaque keys, server API namespace

parent e093fc25
...@@ -4,7 +4,7 @@ import logging ...@@ -4,7 +4,7 @@ import logging
from opaque_keys.edx.locations import SlashSeparatedCourseKey from opaque_keys.edx.locations import SlashSeparatedCourseKey
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from util.request import COURSE_REGEX from util.request import course_id_from_url, COURSE_REGEX
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
...@@ -15,7 +15,6 @@ def course_context_from_url(url): ...@@ -15,7 +15,6 @@ def course_context_from_url(url):
`course_context_from_course_id()`. `course_context_from_course_id()`.
""" """
url = url or '' url = url or ''
match = COURSE_REGEX.match(url) match = COURSE_REGEX.match(url)
course_id = None course_id = None
if match: if match:
...@@ -29,7 +28,6 @@ def course_context_from_url(url): ...@@ -29,7 +28,6 @@ def course_context_from_url(url):
), ),
exc_info=True exc_info=True
) )
return course_context_from_course_id(course_id) return course_context_from_course_id(course_id)
......
...@@ -50,12 +50,9 @@ def course_id_from_url(url): ...@@ -50,12 +50,9 @@ def course_id_from_url(url):
key_generator = CourseKey.from_string key_generator = CourseKey.from_string
match = COURSE_REGEX.match(url) match = COURSE_REGEX.match(url)
if match is None: if match is None:
return None return None
course_id = match.group('course_id') course_id = match.group('course_id')
if course_id is None: if course_id is None:
return None return None
......
...@@ -53,9 +53,12 @@ class CoursesApiTests(TestCase): ...@@ -53,9 +53,12 @@ class CoursesApiTests(TestCase):
def setUp(self): def setUp(self):
self.test_server_prefix = 'https://testserver' self.test_server_prefix = 'https://testserver'
self.base_courses_uri = '/api/courses' self.base_courses_uri = '/api/server/courses'
self.base_groups_uri = '/api/groups' self.base_groups_uri = '/api/server/groups'
self.base_users_uri = '/api/users' self.base_users_uri = '/api/server/users'
self.base_organizations_uri = '/api/server/organizations/'
self.base_projects_uri = '/api/server/projects/'
self.base_workgroups_uri = '/api/server/workgroups/'
self.test_group_name = 'Alpha Group' self.test_group_name = 'Alpha Group'
self.attempts = 3 self.attempts = 3
...@@ -203,7 +206,7 @@ class CoursesApiTests(TestCase): ...@@ -203,7 +206,7 @@ class CoursesApiTests(TestCase):
self.test_course_content_id = unicode(self.course_content.scope_ids.usage_id) self.test_course_content_id = unicode(self.course_content.scope_ids.usage_id)
self.test_bogus_content_id = "j5y://foo/bar/baz" self.test_bogus_content_id = "j5y://foo/bar/baz"
self.test_content_child_id = unicode(self.content_child.scope_ids.usage_id) self.test_content_child_id = unicode(self.content_child.scope_ids.usage_id)
self.base_course_content_uri = '/api/courses/' + self.test_course_id + '/content' self.base_course_content_uri = '{}/{}/content'.format(self.base_courses_uri, self.test_course_id)
self.base_chapters_uri = self.base_course_content_uri + '?type=chapter' self.base_chapters_uri = self.base_course_content_uri + '?type=chapter'
self.client = SecureClient() self.client = SecureClient()
...@@ -846,7 +849,7 @@ class CoursesApiTests(TestCase): ...@@ -846,7 +849,7 @@ class CoursesApiTests(TestCase):
def test_courses_users_list_post_existing_user(self): def test_courses_users_list_post_existing_user(self):
# create a new user (note, this calls into the /users/ subsystem) # create a new user (note, this calls into the /users/ subsystem)
test_uri = self.base_courses_uri + '/' + self.test_course_id + '/users' test_uri = self.base_courses_uri + '/' + self.test_course_id + '/users'
test_user_uri = '/api/users' test_user_uri = self.base_users_uri
local_username = "some_test_user" + str(randint(11, 99)) local_username = "some_test_user" + str(randint(11, 99))
local_email = "test+notpending@tester.com" local_email = "test+notpending@tester.com"
data = { data = {
...@@ -892,7 +895,7 @@ class CoursesApiTests(TestCase): ...@@ -892,7 +895,7 @@ class CoursesApiTests(TestCase):
def test_courses_users_list_get(self): def test_courses_users_list_get(self):
# create a new user (note, this calls into the /users/ subsystem) # create a new user (note, this calls into the /users/ subsystem)
test_uri = self.base_courses_uri + '/' + self.test_course_id + '/users' test_uri = self.base_courses_uri + '/' + self.test_course_id + '/users'
test_user_uri = '/api/users' test_user_uri = self.base_users_uri
local_username = "some_test_user" + str(randint(11, 99)) local_username = "some_test_user" + str(randint(11, 99))
local_email = "test+notpending@tester.com" local_email = "test+notpending@tester.com"
data = { data = {
...@@ -924,7 +927,7 @@ class CoursesApiTests(TestCase): ...@@ -924,7 +927,7 @@ class CoursesApiTests(TestCase):
'first_name': 'John{}'.format(i), 'first_name': 'John{}'.format(i),
'last_name': 'Doe{}'.format(i) 'last_name': 'Doe{}'.format(i)
} }
response = self.do_post('/api/users', data) response = self.do_post(self.base_users_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
users.append(response.data['id']) users.append(response.data['id'])
...@@ -936,7 +939,7 @@ class CoursesApiTests(TestCase): ...@@ -936,7 +939,7 @@ class CoursesApiTests(TestCase):
'display_name': '{} {}'.format('Test Org Display Name', i), 'display_name': '{} {}'.format('Test Org Display Name', i),
'users': [users[i]] 'users': [users[i]]
} }
response = self.do_post('/api/organizations/', data) response = self.do_post(self.base_organizations_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
self.assertGreater(response.data['id'], 0) self.assertGreater(response.data['id'], 0)
org_ids.append(response.data['id']) org_ids.append(response.data['id'])
...@@ -982,7 +985,7 @@ class CoursesApiTests(TestCase): ...@@ -982,7 +985,7 @@ class CoursesApiTests(TestCase):
'first_name': 'John{}'.format(i), 'first_name': 'John{}'.format(i),
'last_name': 'Doe{}'.format(i) 'last_name': 'Doe{}'.format(i)
} }
response = self.do_post('/api/users', data) response = self.do_post(self.base_users_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
users.append(response.data['id']) users.append(response.data['id'])
if i < 2: if i < 2:
...@@ -1014,7 +1017,7 @@ class CoursesApiTests(TestCase): ...@@ -1014,7 +1017,7 @@ class CoursesApiTests(TestCase):
def test_courses_users_detail_get(self): def test_courses_users_detail_get(self):
test_uri = self.base_courses_uri + '/' + self.test_course_id + '/users' test_uri = self.base_courses_uri + '/' + self.test_course_id + '/users'
test_user_uri = '/api/users' test_user_uri = self.base_users_uri
local_username = "some_test_user" + str(randint(11, 99)) local_username = "some_test_user" + str(randint(11, 99))
local_email = "test+notpending@tester.com" local_email = "test+notpending@tester.com"
data = { data = {
...@@ -1058,7 +1061,7 @@ class CoursesApiTests(TestCase): ...@@ -1058,7 +1061,7 @@ class CoursesApiTests(TestCase):
def test_courses_users_detail_delete(self): def test_courses_users_detail_delete(self):
test_uri = self.base_courses_uri + '/' + self.test_course_id + '/users' test_uri = self.base_courses_uri + '/' + self.test_course_id + '/users'
test_user_uri = '/api/users' test_user_uri = self.base_users_uri
local_username = "some_test_user" + str(randint(11, 99)) local_username = "some_test_user" + str(randint(11, 99))
local_email = "test+notpending@tester.com" local_email = "test+notpending@tester.com"
data = { data = {
...@@ -1711,7 +1714,7 @@ class CoursesApiTests(TestCase): ...@@ -1711,7 +1714,7 @@ class CoursesApiTests(TestCase):
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_course_project_list(self): def test_course_project_list(self):
projects_uri = '/api/projects/' projects_uri = self.base_projects_uri
for i in xrange(0, 25): for i in xrange(0, 25):
local_content_name = 'Video_Sequence{}'.format(i) local_content_name = 'Video_Sequence{}'.format(i)
...@@ -1736,7 +1739,7 @@ class CoursesApiTests(TestCase): ...@@ -1736,7 +1739,7 @@ class CoursesApiTests(TestCase):
def test_courses_data_metrics(self): def test_courses_data_metrics(self):
test_uri = self.base_courses_uri + '/' + self.test_course_id + '/users' test_uri = self.base_courses_uri + '/' + self.test_course_id + '/users'
test_user_uri = '/api/users' test_user_uri = self.base_users_uri
users_to_add = 5 users_to_add = 5
for i in xrange(0, users_to_add): for i in xrange(0, users_to_add):
data = { data = {
...@@ -1754,17 +1757,18 @@ class CoursesApiTests(TestCase): ...@@ -1754,17 +1757,18 @@ class CoursesApiTests(TestCase):
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
# get course metrics # get course metrics
course_metrics_uri = '/api/courses/{}/metrics/' course_metrics_uri = '{}/{}/metrics/'.format(self.base_courses_uri, self.test_course_id)
response = self.do_get(course_metrics_uri.format(self.test_course_id)) response = self.do_get(course_metrics_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['users_enrolled'], users_to_add + USER_COUNT) self.assertEqual(response.data['users_enrolled'], users_to_add + USER_COUNT)
# test with bogus course # test with bogus course
response = self.do_get(course_metrics_uri.format(self.test_bogus_course_id)) course_metrics_uri = '{}/{}/metrics/'.format(self.base_courses_uri, self.test_bogus_course_id)
response = self.do_get(course_metrics_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_course_workgroups_list(self): def test_course_workgroups_list(self):
projects_uri = '/api/projects/' projects_uri = self.base_projects_uri
data = { data = {
'course_id': self.test_course_id, 'course_id': self.test_course_id,
'content_id': 'self.test_course_content_id' 'content_id': 'self.test_course_content_id'
...@@ -1773,7 +1777,7 @@ class CoursesApiTests(TestCase): ...@@ -1773,7 +1777,7 @@ class CoursesApiTests(TestCase):
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
project_id = response.data['id'] project_id = response.data['id']
test_workgroups_uri = '/api/workgroups/' test_workgroups_uri = self.base_workgroups_uri
for i in xrange(1, 12): for i in xrange(1, 12):
data = { data = {
'name': '{} {}'.format('Workgroup', i), 'name': '{} {}'.format('Workgroup', i),
...@@ -1783,19 +1787,19 @@ class CoursesApiTests(TestCase): ...@@ -1783,19 +1787,19 @@ class CoursesApiTests(TestCase):
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
# get workgroups associated to course # get workgroups associated to course
test_uri = '/api/courses/{}/workgroups/?page_size=10'.format(self.test_course_id) test_uri = '{}/{}/workgroups/?page_size=10'.format(self.base_courses_uri, self.test_course_id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.data['count'], 11) self.assertEqual(response.data['count'], 11)
self.assertEqual(len(response.data['results']), 10) self.assertEqual(len(response.data['results']), 10)
self.assertEqual(response.data['num_pages'], 2) self.assertEqual(response.data['num_pages'], 2)
# test with bogus course # test with bogus course
test_uri = '/api/courses/{}/workgroups/'.format(self.test_bogus_course_id) test_uri = '{}/{}/workgroups/'.format(self.base_courses_uri, self.test_bogus_course_id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_course_users_count_by_city(self): def test_course_users_count_by_city(self):
test_uri = '/api/users' test_uri = self.base_users_uri
# create a 25 new users # create a 25 new users
for i in xrange(1, 26): for i in xrange(1, 26):
...@@ -1834,15 +1838,15 @@ class CoursesApiTests(TestCase): ...@@ -1834,15 +1838,15 @@ class CoursesApiTests(TestCase):
for user in self.users: for user in self.users:
allow_access(self.course, user, 'observer') allow_access(self.course, user, 'observer')
response = self.do_get('{}{}{}'.format('/api/courses/', self.test_course_id, '/metrics/cities/')) response = self.do_get('{}/{}/metrics/cities/'.format(self.base_courses_uri, self.test_course_id))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data['results']), 4) self.assertEqual(len(response.data['results']), 4)
self.assertEqual(response.data['results'][0]['city'], 'San Francisco') self.assertEqual(response.data['results'][0]['city'], 'San Francisco')
self.assertEqual(response.data['results'][0]['count'], 9) self.assertEqual(response.data['results'][0]['count'], 9)
# filter counts by city # filter counts by city
response = self.do_get('{}{}{}'.format('/api/courses/', self.test_course_id, sf_uri = '{}/{}/metrics/cities/?city=new york city, San Francisco'.format(self.base_courses_uri, self.test_course_id)
'/metrics/cities/?city=new york city, San Francisco')) response = self.do_get(sf_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data['results']), 2) self.assertEqual(len(response.data['results']), 2)
self.assertEqual(response.data['results'][0]['city'], 'San Francisco') self.assertEqual(response.data['results'][0]['city'], 'San Francisco')
...@@ -1851,8 +1855,8 @@ class CoursesApiTests(TestCase): ...@@ -1851,8 +1855,8 @@ class CoursesApiTests(TestCase):
self.assertEqual(response.data['results'][1]['count'], 6) self.assertEqual(response.data['results'][1]['count'], 6)
# filter counts by city # filter counts by city
response = self.do_get('{}{}{}'.format('/api/courses/', self.test_course_id, dnv_uri = '{}/{}/metrics/cities/?city=Denver'.format(self.base_courses_uri, self.test_course_id)
'/metrics/cities/?city=Denver')) response = self.do_get(dnv_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data['results']), 1) self.assertEqual(len(response.data['results']), 1)
self.assertEqual(response.data['results'][0]['city'], 'Denver') self.assertEqual(response.data['results'][0]['city'], 'Denver')
...@@ -1862,7 +1866,7 @@ class CoursesApiTests(TestCase): ...@@ -1862,7 +1866,7 @@ class CoursesApiTests(TestCase):
allow_access(self.course, self.users[0], 'staff') allow_access(self.course, self.users[0], 'staff')
allow_access(self.course, self.users[1], 'instructor') allow_access(self.course, self.users[1], 'instructor')
allow_access(self.course, self.users[2], 'observer') allow_access(self.course, self.users[2], 'observer')
test_uri = '/api/courses/{}/roles/'.format(unicode(self.course.id)) test_uri = '{}/{}/roles/'.format(self.base_courses_uri, unicode(self.course.id))
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 3) self.assertEqual(len(response.data), 3)
...@@ -1887,12 +1891,12 @@ class CoursesApiTests(TestCase): ...@@ -1887,12 +1891,12 @@ class CoursesApiTests(TestCase):
self.assertEqual(len(response.data), 0) self.assertEqual(len(response.data), 0)
def test_courses_roles_list_get_invalid_course(self): def test_courses_roles_list_get_invalid_course(self):
test_uri = '/api/courses/{}/roles/'.format(self.test_bogus_course_id) test_uri = '{}/{}/roles/'.format(self.base_courses_uri, self.test_bogus_course_id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_courses_roles_list_post(self): def test_courses_roles_list_post(self):
test_uri = '/api/courses/{}/roles/'.format(unicode(self.course.id)) test_uri = '{}/{}/roles/'.format(self.base_courses_uri, unicode(self.course.id))
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 0) self.assertEqual(len(response.data), 0)
...@@ -1910,25 +1914,25 @@ class CoursesApiTests(TestCase): ...@@ -1910,25 +1914,25 @@ class CoursesApiTests(TestCase):
self.assertTrue(has_role) self.assertTrue(has_role)
def test_courses_roles_list_post_invalid_course(self): def test_courses_roles_list_post_invalid_course(self):
test_uri = '/api/courses/{}/roles/'.format(self.test_bogus_course_id) test_uri = '{}/{}/roles/'.format(self.base_courses_uri, self.test_bogus_course_id)
data = {'user_id': self.users[0].id, 'role': 'instructor'} data = {'user_id': self.users[0].id, 'role': 'instructor'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_courses_roles_list_post_invalid_user(self): def test_courses_roles_list_post_invalid_user(self):
test_uri = '/api/courses/{}/roles/'.format(unicode(self.course.id)) test_uri = '{}/{}/roles/'.format(self.base_courses_uri, unicode(self.course.id))
data = {'user_id': 23423, 'role': 'instructor'} data = {'user_id': 23423, 'role': 'instructor'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 400) self.assertEqual(response.status_code, 400)
def test_courses_roles_list_post_invalid_role(self): def test_courses_roles_list_post_invalid_role(self):
test_uri = '/api/courses/{}/roles/'.format(unicode(self.course.id)) test_uri = '{}/{}/roles/'.format(self.base_courses_uri, unicode(self.course.id))
data = {'user_id': self.users[0].id, 'role': 'invalid_role'} data = {'user_id': self.users[0].id, 'role': 'invalid_role'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 400) self.assertEqual(response.status_code, 400)
def test_courses_roles_users_detail_delete(self): def test_courses_roles_users_detail_delete(self):
test_uri = '/api/courses/{}/roles/'.format(unicode(self.course.id)) test_uri = '{}/{}/roles/'.format(self.base_courses_uri, unicode(self.course.id))
data = {'user_id': self.users[0].id, 'role': 'instructor'} data = {'user_id': self.users[0].id, 'role': 'instructor'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
...@@ -1952,19 +1956,19 @@ class CoursesApiTests(TestCase): ...@@ -1952,19 +1956,19 @@ class CoursesApiTests(TestCase):
pass pass
def test_courses_roles_users_detail_delete_invalid_course(self): def test_courses_roles_users_detail_delete_invalid_course(self):
test_uri = '/api/courses/{}/roles/'.format(self.test_bogus_course_id) test_uri = '{}/{}/roles/'.format(self.base_courses_uri, self.test_bogus_course_id)
delete_uri = '{}instructor/users/{}'.format(test_uri, self.users[0].id) delete_uri = '{}instructor/users/{}'.format(test_uri, self.users[0].id)
response = self.do_delete(delete_uri) response = self.do_delete(delete_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_courses_roles_users_detail_delete_invalid_user(self): def test_courses_roles_users_detail_delete_invalid_user(self):
test_uri = '/api/courses/{}/roles/'.format(unicode(self.course.id)) test_uri = '{}/{}/roles/'.format(self.base_courses_uri, unicode(self.course.id))
delete_uri = '{}instructor/users/291231'.format(test_uri) delete_uri = '{}instructor/users/291231'.format(test_uri)
response = self.do_delete(delete_uri) response = self.do_delete(delete_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_courses_roles_users_detail_delete_invalid_role(self): def test_courses_roles_users_detail_delete_invalid_role(self):
test_uri = '/api/courses/{}/roles/'.format(unicode(self.course.id)) test_uri = '{}/{}/roles/'.format(self.base_courses_uri, unicode(self.course.id))
delete_uri = '{}invalid_role/users/{}'.format(test_uri, self.users[0].id) delete_uri = '{}invalid_role/users/{}'.format(test_uri, self.users[0].id)
response = self.do_delete(delete_uri) response = self.do_delete(delete_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
...@@ -83,7 +83,7 @@ def _serialize_content(request, content_key, content_descriptor): ...@@ -83,7 +83,7 @@ def _serialize_content(request, content_key, content_descriptor):
protocol = 'http' protocol = 'http'
if request.is_secure(): if request.is_secure():
protocol = protocol + 's' protocol = protocol + 's'
content_uri = '{}://{}/api/courses/{}'.format( content_uri = '{}://{}/api/server/courses/{}'.format(
protocol, protocol,
request.get_host(), request.get_host(),
unicode(content_key) unicode(content_key)
...@@ -466,7 +466,7 @@ class CourseContentDetail(SecureAPIView): ...@@ -466,7 +466,7 @@ class CourseContentDetail(SecureAPIView):
protocol = 'http' protocol = 'http'
if request.is_secure(): if request.is_secure():
protocol = protocol + 's' protocol = protocol + 's'
response_data['uri'] = '{}://{}/api/courses/{}'.format( response_data['uri'] = '{}://{}/api/server/courses/{}'.format(
protocol, protocol,
request.get_host(), request.get_host(),
unicode(course_key) unicode(course_key)
......
...@@ -42,8 +42,9 @@ class GroupsApiTests(ModuleStoreTestCase): ...@@ -42,8 +42,9 @@ class GroupsApiTests(ModuleStoreTestCase):
self.test_group_name = str(uuid.uuid4()) self.test_group_name = str(uuid.uuid4())
self.test_first_name = str(uuid.uuid4()) self.test_first_name = str(uuid.uuid4())
self.test_last_name = str(uuid.uuid4()) self.test_last_name = str(uuid.uuid4())
self.base_users_uri = '/api/users' self.base_users_uri = '/api/server/users'
self.base_groups_uri = '/api/groups' self.base_groups_uri = '/api/server/groups'
self.base_workgroups_uri = '/api/server/workgroups/'
self.test_course_data = '<html>{}</html>'.format(str(uuid.uuid4())) self.test_course_data = '<html>{}</html>'.format(str(uuid.uuid4()))
self.course = CourseFactory.create() self.course = CourseFactory.create()
...@@ -965,7 +966,7 @@ class GroupsApiTests(ModuleStoreTestCase): ...@@ -965,7 +966,7 @@ class GroupsApiTests(ModuleStoreTestCase):
response = self.do_post(self.base_groups_uri, data) response = self.do_post(self.base_groups_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
group_id = response.data['id'] group_id = response.data['id']
test_workgroups_uri = '/api/workgroups/' test_workgroups_uri = self.base_workgroups_uri
for i in xrange(1, 12): for i in xrange(1, 12):
project_id = self.test_project.id project_id = self.test_project.id
data = { data = {
...@@ -981,7 +982,7 @@ class GroupsApiTests(ModuleStoreTestCase): ...@@ -981,7 +982,7 @@ class GroupsApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
# test to get list of workgroups # test to get list of workgroups
test_uri = '/api/groups/{}/workgroups/?page_size=10'.format(group_id) test_uri = '{}/{}/workgroups/?page_size=10'.format(self.base_groups_uri, group_id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.data['count'], 11) self.assertEqual(response.data['count'], 11)
self.assertEqual(len(response.data['results']), 10) self.assertEqual(len(response.data['results']), 10)
...@@ -989,12 +990,13 @@ class GroupsApiTests(ModuleStoreTestCase): ...@@ -989,12 +990,13 @@ class GroupsApiTests(ModuleStoreTestCase):
# test with course_id filter # test with course_id filter
course_id = {'course_id': unicode(self.course.id)} course_id = {'course_id': unicode(self.course.id)}
response = self.do_get('/api/groups/{}/workgroups/?{}'.format(group_id, urlencode(course_id))) groups_uri = '{}/{}/workgroups/?{}'.format(self.base_groups_uri, group_id, urlencode(course_id))
response = self.do_get(groups_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 11) self.assertEqual(response.data['count'], 11)
self.assertIsNotNone(response.data['results'][0]['name']) self.assertIsNotNone(response.data['results'][0]['name'])
self.assertIsNotNone(response.data['results'][0]['project']) self.assertIsNotNone(response.data['results'][0]['project'])
# test with invalid group id # test with invalid group id
response = self.do_get('/api/groups/4356340/workgroups/') response = self.do_get('{}/4356340/workgroups/'.format(self.base_groups_uri))
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
...@@ -8,7 +8,6 @@ from django.test import RequestFactory ...@@ -8,7 +8,6 @@ from django.test import RequestFactory
from api_manager import models as api_models from api_manager import models as api_models
from api_manager.courseware_access import get_course, get_course_child from api_manager.courseware_access import get_course, get_course_child
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from projects import models as project_models
class Command(BaseCommand): class Command(BaseCommand):
...@@ -21,37 +20,6 @@ class Command(BaseCommand): ...@@ -21,37 +20,6 @@ class Command(BaseCommand):
request = request_factory.get('/') request = request_factory.get('/')
request.user = User(email='migration@edx.org', username='migration', password='migration', is_active=True) request.user = User(email='migration@edx.org', username='migration', password='migration', is_active=True)
projects = project_models.Project.objects.all()
for project in projects:
course_descriptor, course_key, course_content = get_course(request, request.user, project.course_id)
project.course_id = unicode(course_key)
try:
project.content_id = course_key.make_usage_key_from_deprecated_string(project.content_id)
except InvalidKeyError:
pass # If the key conversion fails it was either a new-style key or junk data
project.save()
workgroup_reviews = project_models.WorkgroupReview.objects.all()
for wr in workgroup_reviews:
course_id = wr.workgroup.project.course_id
course_descriptor, course_key, course_content = get_course(request, request.user, course_id)
try:
wr.content_id = course_key.make_usage_key_from_deprecated_string(wr.content_id)
except InvalidKeyError:
pass # If the key conversion fails it was either a new-style key or junk data
wr.save()
workgroup_submission_reviews = project_models.WorkgroupSubmissionReview.objects.all()
for wsr in workgroup_submission_reviews:
course_id = wsr.submission.workgroup.project.course_id
course_descriptor, course_key, course_content = get_course(request, request.user, course_id)
try:
wsr.content_id = course_key.make_usage_key_from_deprecated_string(wsr.content_id)
except InvalidKeyError:
pass # If the key conversion fails it was either a new-style key or junk data
wsr.save()
course_groups = api_models.CourseGroupRelationship.objects.all() course_groups = api_models.CourseGroupRelationship.objects.all()
for cg in course_groups: for cg in course_groups:
course_id = cg.course_id course_id = cg.course_id
......
...@@ -9,7 +9,6 @@ from django.contrib.auth.models import Group, User ...@@ -9,7 +9,6 @@ from django.contrib.auth.models import Group, User
from api_manager import models as api_models from api_manager import models as api_models
from api_manager.management.commands import migrate_courseids from api_manager.management.commands import migrate_courseids
from projects import models as project_models
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
...@@ -63,11 +62,6 @@ class MigrateCourseIdsTests(ModuleStoreTestCase): ...@@ -63,11 +62,6 @@ class MigrateCourseIdsTests(ModuleStoreTestCase):
""" """
# Set up the data to be migrated # Set up the data to be migrated
user = User.objects.create(email='testuser@edx.org', username='testuser', password='testpassword', is_active=True) user = User.objects.create(email='testuser@edx.org', username='testuser', password='testpassword', is_active=True)
project = project_models.Project.objects.create(course_id=self.old_style_course_id, content_id=self.old_style_content_id)
workgroup = project_models.Workgroup.objects.create(name='Test Workgroup', project=project)
workgroup_review = project_models.WorkgroupReview.objects.create(workgroup=workgroup, content_id=self.old_style_content_id)
workgroup_submission = project_models.WorkgroupSubmission.objects.create(workgroup=workgroup, user=user)
workgroup_submission_review = project_models.WorkgroupSubmissionReview.objects.create(submission=workgroup_submission, content_id=self.old_style_content_id)
group = Group.objects.create(name='Test Group') group = Group.objects.create(name='Test Group')
group_profile = api_models.GroupProfile.objects.create(group=group) group_profile = api_models.GroupProfile.objects.create(group=group)
course_group = api_models.CourseGroupRelationship.objects.create(course_id=self.old_style_course_id, group=group) course_group = api_models.CourseGroupRelationship.objects.create(course_id=self.old_style_course_id, group=group)
...@@ -75,11 +69,6 @@ class MigrateCourseIdsTests(ModuleStoreTestCase): ...@@ -75,11 +69,6 @@ class MigrateCourseIdsTests(ModuleStoreTestCase):
course_module_completion = api_models.CourseModuleCompletion.objects.create(user=user, course_id=self.old_style_course_id, content_id=self.old_style_content_id) course_module_completion = api_models.CourseModuleCompletion.objects.create(user=user, course_id=self.old_style_course_id, content_id=self.old_style_content_id)
user2 = User.objects.create(email='testuser2@edx.org', username='testuser2', password='testpassword2', is_active=True) user2 = User.objects.create(email='testuser2@edx.org', username='testuser2', password='testpassword2', is_active=True)
project2 = project_models.Project.objects.create(course_id=self.new_style_course_id2, content_id=self.new_style_content_id2)
workgroup2 = project_models.Workgroup.objects.create(name='Test Workgroup2', project=project2)
workgroup_review2 = project_models.WorkgroupReview.objects.create(workgroup=workgroup2, content_id=self.new_style_content_id2)
workgroup_submission2 = project_models.WorkgroupSubmission.objects.create(workgroup=workgroup2, user=user2)
workgroup_submission_review2 = project_models.WorkgroupSubmissionReview.objects.create(submission=workgroup_submission2, content_id=self.new_style_content_id2)
group2 = Group.objects.create(name='Test Group2') group2 = Group.objects.create(name='Test Group2')
group_profile2 = api_models.GroupProfile.objects.create(group=group2) group_profile2 = api_models.GroupProfile.objects.create(group=group2)
course_group2 = api_models.CourseGroupRelationship.objects.create(course_id=self.new_style_course_id2, group=group2) course_group2 = api_models.CourseGroupRelationship.objects.create(course_id=self.new_style_course_id2, group=group2)
...@@ -92,26 +81,6 @@ class MigrateCourseIdsTests(ModuleStoreTestCase): ...@@ -92,26 +81,6 @@ class MigrateCourseIdsTests(ModuleStoreTestCase):
# Confirm that the data has been properly migrated # Confirm that the data has been properly migrated
updated_project = project_models.Project.objects.get(id=project.id)
self.assertEqual(updated_project.course_id, self.new_style_course_id)
self.assertEqual(updated_project.content_id, self.new_style_content_id)
updated_project = project_models.Project.objects.get(id=project2.id)
self.assertEqual(updated_project.course_id, self.new_style_course_id2)
self.assertEqual(updated_project.content_id, self.new_style_content_id2)
print "Project Data Migration Passed"
updated_workgroup_review = project_models.WorkgroupReview.objects.get(id=workgroup_review.id)
self.assertEqual(updated_workgroup_review.content_id, self.new_style_content_id)
updated_workgroup_review = project_models.WorkgroupReview.objects.get(id=workgroup_review2.id)
self.assertEqual(updated_workgroup_review.content_id, self.new_style_content_id2)
print "Workgroup Review Data Migration Passed"
updated_workgroup_submission_review = project_models.WorkgroupSubmissionReview.objects.get(id=workgroup_submission_review.id)
self.assertEqual(updated_workgroup_submission_review.content_id, self.new_style_content_id)
updated_workgroup_submission_review = project_models.WorkgroupSubmissionReview.objects.get(id=workgroup_submission_review2.id)
self.assertEqual(updated_workgroup_submission_review.content_id, self.new_style_content_id2)
print "Workgroup Submission Review Data Migration Passed"
updated_course_group = api_models.CourseGroupRelationship.objects.get(id=course_group.id) updated_course_group = api_models.CourseGroupRelationship.objects.get(id=course_group.id)
self.assertEqual(updated_course_group.course_id, self.new_style_course_id) self.assertEqual(updated_course_group.course_id, self.new_style_course_id)
updated_course_group = api_models.CourseGroupRelationship.objects.get(id=course_group2.id) updated_course_group = api_models.CourseGroupRelationship.objects.get(id=course_group2.id)
......
...@@ -35,9 +35,9 @@ class OrganizationsApiTests(ModuleStoreTestCase): ...@@ -35,9 +35,9 @@ class OrganizationsApiTests(ModuleStoreTestCase):
def setUp(self): def setUp(self):
self.test_server_prefix = 'https://testserver' self.test_server_prefix = 'https://testserver'
self.test_organizations_uri = '/api/organizations/' self.base_organizations_uri = '/api/server/organizations/'
self.test_users_uri = '/api/users' self.base_users_uri = '/api/server/users'
self.base_groups_uri = '/api/groups' self.base_groups_uri = '/api/server/groups'
self.test_organization_name = str(uuid.uuid4()) self.test_organization_name = str(uuid.uuid4())
self.test_organization_display_name = 'Test Org' self.test_organization_display_name = 'Test Org'
self.test_organization_contact_name = 'John Org' self.test_organization_contact_name = 'John Org'
...@@ -97,7 +97,7 @@ class OrganizationsApiTests(ModuleStoreTestCase): ...@@ -97,7 +97,7 @@ class OrganizationsApiTests(ModuleStoreTestCase):
'first_name': 'John{}'.format(i), 'first_name': 'John{}'.format(i),
'last_name': 'Doe{}'.format(i) 'last_name': 'Doe{}'.format(i)
} }
response = self.do_post(self.test_users_uri, data) response = self.do_post(self.base_users_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
users.append(response.data['id']) users.append(response.data['id'])
...@@ -109,12 +109,12 @@ class OrganizationsApiTests(ModuleStoreTestCase): ...@@ -109,12 +109,12 @@ class OrganizationsApiTests(ModuleStoreTestCase):
'contact_phone': self.test_organization_contact_phone, 'contact_phone': self.test_organization_contact_phone,
'users': users 'users': users
} }
response = self.do_post(self.test_organizations_uri, data) response = self.do_post(self.base_organizations_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
self.assertGreater(response.data['id'], 0) self.assertGreater(response.data['id'], 0)
confirm_uri = '{}{}{}/'.format( confirm_uri = '{}{}{}/'.format(
self.test_server_prefix, self.test_server_prefix,
self.test_organizations_uri, self.base_organizations_uri,
str(response.data['id']) str(response.data['id'])
) )
self.assertEqual(response.data['url'], confirm_uri) self.assertEqual(response.data['url'], confirm_uri)
...@@ -137,9 +137,9 @@ class OrganizationsApiTests(ModuleStoreTestCase): ...@@ -137,9 +137,9 @@ class OrganizationsApiTests(ModuleStoreTestCase):
'contact_email': self.test_organization_contact_email, 'contact_email': self.test_organization_contact_email,
'contact_phone': self.test_organization_contact_phone 'contact_phone': self.test_organization_contact_phone
} }
response = self.do_post(self.test_organizations_uri, data) response = self.do_post(self.base_organizations_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
test_uri = '{}{}/'.format(self.test_organizations_uri, str(response.data['id'])) test_uri = '{}{}/'.format(self.base_organizations_uri, str(response.data['id']))
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
confirm_uri = self.test_server_prefix + test_uri confirm_uri = self.test_server_prefix + test_uri
...@@ -156,15 +156,15 @@ class OrganizationsApiTests(ModuleStoreTestCase): ...@@ -156,15 +156,15 @@ class OrganizationsApiTests(ModuleStoreTestCase):
self.assertIsNotNone(response.data['modified']) self.assertIsNotNone(response.data['modified'])
def test_organizations_detail_get_undefined(self): def test_organizations_detail_get_undefined(self):
test_uri = '/api/organizations/123456789/' test_uri = '{}/123456789/'.format(self.base_organizations_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_organizations_detail_delete(self): def test_organizations_detail_delete(self):
data = {'name': self.test_organization_name} data = {'name': self.test_organization_name}
response = self.do_post(self.test_organizations_uri, data) response = self.do_post(self.base_organizations_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
test_uri = '{}{}/'.format(self.test_organizations_uri, str(response.data['id'])) test_uri = '{}{}/'.format(self.base_organizations_uri, str(response.data['id']))
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
response = self.do_delete(test_uri) response = self.do_delete(test_uri)
...@@ -180,7 +180,7 @@ class OrganizationsApiTests(ModuleStoreTestCase): ...@@ -180,7 +180,7 @@ class OrganizationsApiTests(ModuleStoreTestCase):
'contact_email': 'testatme.com', 'contact_email': 'testatme.com',
'contact_phone': self.test_organization_contact_phone 'contact_phone': self.test_organization_contact_phone
} }
response = self.do_post(self.test_organizations_uri, data) response = self.do_post(self.base_organizations_uri, data)
self.assertEqual(response.status_code, 400) self.assertEqual(response.status_code, 400)
def test_organizations_list_post_with_groups(self): def test_organizations_list_post_with_groups(self):
...@@ -200,7 +200,7 @@ class OrganizationsApiTests(ModuleStoreTestCase): ...@@ -200,7 +200,7 @@ class OrganizationsApiTests(ModuleStoreTestCase):
'display_name': self.test_organization_display_name, 'display_name': self.test_organization_display_name,
'groups': groups 'groups': groups
} }
response = self.do_post(self.test_organizations_uri, data) response = self.do_post(self.base_organizations_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
self.assertEqual(len(response.data['groups']), len(groups)) self.assertEqual(len(response.data['groups']), len(groups))
...@@ -212,9 +212,9 @@ class OrganizationsApiTests(ModuleStoreTestCase): ...@@ -212,9 +212,9 @@ class OrganizationsApiTests(ModuleStoreTestCase):
'contact_email': self.test_organization_contact_email, 'contact_email': self.test_organization_contact_email,
'contact_phone': self.test_organization_contact_phone 'contact_phone': self.test_organization_contact_phone
} }
response = self.do_post(self.test_organizations_uri, data) response = self.do_post(self.base_organizations_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
test_uri = '{}{}/'.format(self.test_organizations_uri, str(response.data['id'])) test_uri = '{}{}/'.format(self.base_organizations_uri, str(response.data['id']))
users_uri = '{}users/'.format(test_uri) users_uri = '{}users/'.format(test_uri)
data = {"id": self.test_user.id} data = {"id": self.test_user.id}
response = self.do_post(users_uri, data) response = self.do_post(users_uri, data)
...@@ -231,9 +231,9 @@ class OrganizationsApiTests(ModuleStoreTestCase): ...@@ -231,9 +231,9 @@ class OrganizationsApiTests(ModuleStoreTestCase):
'contact_email': self.test_organization_contact_email, 'contact_email': self.test_organization_contact_email,
'contact_phone': self.test_organization_contact_phone 'contact_phone': self.test_organization_contact_phone
} }
response = self.do_post(self.test_organizations_uri, data) response = self.do_post(self.base_organizations_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
test_uri = '{}{}/'.format(self.test_organizations_uri, str(response.data['id'])) test_uri = '{}{}/'.format(self.base_organizations_uri, str(response.data['id']))
users_uri = '{}users/'.format(test_uri) users_uri = '{}users/'.format(test_uri)
data = {"id": 123456} data = {"id": 123456}
response = self.do_post(users_uri, data) response = self.do_post(users_uri, data)
...@@ -247,9 +247,9 @@ class OrganizationsApiTests(ModuleStoreTestCase): ...@@ -247,9 +247,9 @@ class OrganizationsApiTests(ModuleStoreTestCase):
'contact_email': self.test_organization_contact_email, 'contact_email': self.test_organization_contact_email,
'contact_phone': self.test_organization_contact_phone 'contact_phone': self.test_organization_contact_phone
} }
response = self.do_post(self.test_organizations_uri, data) response = self.do_post(self.base_organizations_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
test_uri = '{}{}/'.format(self.test_organizations_uri, str(response.data['id'])) test_uri = '{}{}/'.format(self.base_organizations_uri, str(response.data['id']))
users_uri = '{}users/'.format(test_uri) users_uri = '{}users/'.format(test_uri)
data = {"id": self.test_user.id} data = {"id": self.test_user.id}
response = self.do_post(users_uri, data) response = self.do_post(users_uri, data)
...@@ -271,9 +271,9 @@ class OrganizationsApiTests(ModuleStoreTestCase): ...@@ -271,9 +271,9 @@ class OrganizationsApiTests(ModuleStoreTestCase):
'contact_email': self.test_organization_contact_email, 'contact_email': self.test_organization_contact_email,
'contact_phone': self.test_organization_contact_phone 'contact_phone': self.test_organization_contact_phone
} }
response = self.do_post(self.test_organizations_uri, data) response = self.do_post(self.base_organizations_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
test_uri = '{}{}/'.format(self.test_organizations_uri, str(response.data['id'])) test_uri = '{}{}/'.format(self.base_organizations_uri, str(response.data['id']))
users_uri = '{}users/'.format(test_uri) users_uri = '{}users/'.format(test_uri)
data = {"id": self.test_user.id} data = {"id": self.test_user.id}
response = self.do_post(users_uri, data) response = self.do_post(users_uri, data)
......
...@@ -37,7 +37,7 @@ class SessionApiRateLimitingProtectionTest(TestCase): ...@@ -37,7 +37,7 @@ class SessionApiRateLimitingProtectionTest(TestCase):
# Create the test client # Create the test client
self.client = Client() self.client = Client()
cache.clear() cache.clear()
self.session_url = '/api/sessions' self.session_url = '/api/server/sessions'
def test_login_ratelimiting_protection(self): def test_login_ratelimiting_protection(self):
""" Try (and fail) login user 30 times on invalid password """ """ Try (and fail) login user 30 times on invalid password """
......
...@@ -38,8 +38,8 @@ class SessionApiSecurityTest(TestCase): ...@@ -38,8 +38,8 @@ class SessionApiSecurityTest(TestCase):
# Create the test client # Create the test client
self.client = Client() self.client = Client()
cache.clear() cache.clear()
self.session_url = '/api/sessions' self.session_url = '/api/server/sessions'
self.user_url = '/api/users' self.user_url = '/api/server/users'
@override_settings(MAX_FAILED_LOGIN_ATTEMPTS_ALLOWED=10) @override_settings(MAX_FAILED_LOGIN_ATTEMPTS_ALLOWED=10)
def test_login_ratelimited_success(self): def test_login_ratelimited_success(self):
......
...@@ -33,8 +33,8 @@ class SessionsApiTests(TestCase): ...@@ -33,8 +33,8 @@ class SessionsApiTests(TestCase):
self.test_username = str(uuid.uuid4()) self.test_username = str(uuid.uuid4())
self.test_password = str(uuid.uuid4()) self.test_password = str(uuid.uuid4())
self.test_email = str(uuid.uuid4()) + '@test.org' self.test_email = str(uuid.uuid4()) + '@test.org'
self.base_users_uri = '/api/users' self.base_users_uri = '/api/server/users'
self.base_sessions_uri = '/api/sessions' self.base_sessions_uri = '/api/server/sessions'
self.client = SecureClient() self.client = SecureClient()
cache.clear() cache.clear()
......
...@@ -26,7 +26,7 @@ class SystemApiTests(TestCase): ...@@ -26,7 +26,7 @@ class SystemApiTests(TestCase):
""" Test suite for base API views """ """ Test suite for base API views """
def setUp(self): def setUp(self):
self.test_server_prefix = "https://testserver/api/" self.test_server_prefix = "https://testserver/api/server/"
self.test_username = str(uuid.uuid4()) self.test_username = str(uuid.uuid4())
self.test_password = str(uuid.uuid4()) self.test_password = str(uuid.uuid4())
self.test_email = str(uuid.uuid4()) + '@test.org' self.test_email = str(uuid.uuid4()) + '@test.org'
......
...@@ -20,7 +20,7 @@ class PermissionsTests(TestCase): ...@@ -20,7 +20,7 @@ class PermissionsTests(TestCase):
self.username = self.username[3:-1] # username is a 32-character field self.username = self.username[3:-1] # username is a 32-character field
self.test_password = str(uuid.uuid4()) self.test_password = str(uuid.uuid4())
self.test_email = str(uuid.uuid4()) + '@test.org' self.test_email = str(uuid.uuid4()) + '@test.org'
self.test_uri = '/api/users' self.test_uri = '/api/server/users'
self.data = {'email': self.test_email, 'username': self.test_username, 'password': self.test_password} self.data = {'email': self.test_email, 'username': self.test_username, 'password': self.test_password}
self.headers = { self.headers = {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
......
...@@ -27,16 +27,16 @@ urlpatterns = patterns( ...@@ -27,16 +27,16 @@ urlpatterns = patterns(
url(r'^courses/*', include('api_manager.courses.urls')), url(r'^courses/*', include('api_manager.courses.urls')),
) )
router = SimpleRouter() server_api_router = SimpleRouter()
router.register(r'organizations', OrganizationsViewSet) server_api_router.register(r'organizations', OrganizationsViewSet)
# Project-related ViewSets # Project-related ViewSets
router.register(r'projects', project_views.ProjectsViewSet) server_api_router.register(r'projects', project_views.ProjectsViewSet)
router.register(r'workgroups', project_views.WorkgroupsViewSet) server_api_router.register(r'workgroups', project_views.WorkgroupsViewSet)
router.register(r'submissions', project_views.WorkgroupSubmissionsViewSet) server_api_router.register(r'submissions', project_views.WorkgroupSubmissionsViewSet)
router.register(r'workgroup_reviews', project_views.WorkgroupReviewsViewSet) server_api_router.register(r'workgroup_reviews', project_views.WorkgroupReviewsViewSet)
router.register(r'submission_reviews', project_views.WorkgroupSubmissionReviewsViewSet) server_api_router.register(r'submission_reviews', project_views.WorkgroupSubmissionReviewsViewSet)
router.register(r'peer_reviews', project_views.WorkgroupPeerReviewsViewSet) server_api_router.register(r'peer_reviews', project_views.WorkgroupPeerReviewsViewSet)
router.register(r'groups', project_views.GroupViewSet) server_api_router.register(r'groups', project_views.GroupViewSet)
router.register(r'users', project_views.UserViewSet) server_api_router.register(r'users', project_views.UserViewSet)
urlpatterns += router.urls urlpatterns += server_api_router.urls
...@@ -30,8 +30,8 @@ class UserPasswordResetTest(TestCase): ...@@ -30,8 +30,8 @@ class UserPasswordResetTest(TestCase):
""" """
setup the api urls setup the api urls
""" """
self.session_url = '/api/sessions' self.session_url = '/api/server/sessions'
self.user_url = '/api/users' self.user_url = '/api/server/users'
cache.clear() cache.clear()
@override_settings(ADVANCED_SECURITY_CONFIG={'MIN_DAYS_FOR_STUDENT_ACCOUNTS_PASSWORD_RESETS': 5}) @override_settings(ADVANCED_SECURITY_CONFIG={'MIN_DAYS_FOR_STUDENT_ACCOUNTS_PASSWORD_RESETS': 5})
......
...@@ -57,7 +57,12 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -57,7 +57,12 @@ class UsersApiTests(ModuleStoreTestCase):
self.test_first_name = str(uuid.uuid4()) self.test_first_name = str(uuid.uuid4())
self.test_last_name = str(uuid.uuid4()) self.test_last_name = str(uuid.uuid4())
self.test_city = str(uuid.uuid4()) self.test_city = str(uuid.uuid4())
self.org_base_uri = '/api/organizations/' self.courses_base_uri = '/api/server/courses'
self.groups_base_uri = '/api/server/groups'
self.org_base_uri = '/api/server/organizations/'
self.workgroups_base_uri = '/api/server/workgroups/'
self.users_base_uri = '/api/server/users'
self.sessions_base_uri = '/api/server/sessions'
self.test_bogus_course_id = 'foo/bar/baz' self.test_bogus_course_id = 'foo/bar/baz'
self.test_bogus_content_id = 'i4x://foo/bar/baz/Chapter1' self.test_bogus_content_id = 'i4x://foo/bar/baz/Chapter1'
...@@ -142,7 +147,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -142,7 +147,7 @@ class UsersApiTests(ModuleStoreTestCase):
def _create_test_user(self): def _create_test_user(self):
"""Helper method to create a new test user""" """Helper method to create a new test user"""
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -151,7 +156,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -151,7 +156,7 @@ class UsersApiTests(ModuleStoreTestCase):
return user_id return user_id
def test_user_list_get(self): def test_user_list_get(self):
test_uri = '/api/users' test_uri = self.users_base_uri
users = [] users = []
# create a 25 new users # create a 25 new users
for i in xrange(1, 26): for i in xrange(1, 26):
...@@ -216,7 +221,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -216,7 +221,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(len(response.data['results']), 0) self.assertEqual(len(response.data['results']), 0)
def test_user_list_get_with_org_filter(self): def test_user_list_get_with_org_filter(self):
test_uri = '/api/users' test_uri = self.users_base_uri
users = [] users = []
# create a 7 new users # create a 7 new users
for i in xrange(1, 8): for i in xrange(1, 8):
...@@ -254,7 +259,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -254,7 +259,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertGreaterEqual(len(response.data['results']), 4) self.assertGreaterEqual(len(response.data['results']), 4)
def test_user_list_post(self): def test_user_list_post(self):
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -271,7 +276,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -271,7 +276,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertIsNotNone(response.data['created']) self.assertIsNotNone(response.data['created'])
def test_user_list_post_inactive(self): def test_user_list_post_inactive(self):
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = { data = {
'email': self.test_email, 'username': local_username, 'password': self.test_password, 'email': self.test_email, 'username': local_username, 'password': self.test_password,
...@@ -281,7 +286,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -281,7 +286,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['is_active'], False) self.assertEqual(response.data['is_active'], False)
def test_user_list_post_duplicate(self): def test_user_list_post_duplicate(self):
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -292,7 +297,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -292,7 +297,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['field_conflict'], 'username or email') self.assertEqual(response.data['field_conflict'], 'username or email')
def test_user_detail_get(self): def test_user_detail_get(self):
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -311,12 +316,12 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -311,12 +316,12 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(len(response.data['resources']), 2) self.assertEqual(len(response.data['resources']), 2)
def test_user_detail_get_undefined(self): def test_user_detail_get_undefined(self):
test_uri = '/api/users/123456789' test_uri = '{}/123456789'.format(self.users_base_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_detail_post(self): def test_user_detail_post(self):
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, data = {'email': self.test_email,
'username': local_username, 'password': self.test_password, 'username': local_username, 'password': self.test_password,
...@@ -325,7 +330,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -325,7 +330,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
test_uri = test_uri + '/' + str(response.data['id']) test_uri = test_uri + '/' + str(response.data['id'])
auth_data = {'username': local_username, 'password': self.test_password} auth_data = {'username': local_username, 'password': self.test_password}
self.do_post('/api/sessions', auth_data) self.do_post(self.sessions_base_uri, auth_data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
data = {'is_active': False, 'is_staff': True} data = {'is_active': False, 'is_staff': True}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
...@@ -348,7 +353,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -348,7 +353,7 @@ class UsersApiTests(ModuleStoreTestCase):
Must return bad request against username, Already exist! Must return bad request against username, Already exist!
""" """
lst_username = [] lst_username = []
test_uri = '/api/users' test_uri = self.users_base_uri
for i in xrange(2): for i in xrange(2):
local_username = self.test_username + str(i) local_username = self.test_username + str(i)
lst_username.append(local_username) lst_username.append(local_username)
...@@ -375,7 +380,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -375,7 +380,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['message'], message) self.assertEqual(response.data['message'], message)
def test_user_detail_post_invalid_password(self): def test_user_detail_post_invalid_password(self):
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, data = {'email': self.test_email,
'username': local_username, 'password': self.test_password, 'username': local_username, 'password': self.test_password,
...@@ -392,7 +397,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -392,7 +397,7 @@ class UsersApiTests(ModuleStoreTestCase):
Create a user, then add the user profile Create a user, then add the user profile
Must be added Must be added
""" """
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = { data = {
'email': self.test_email, 'username': local_username, 'password': self.test_password, 'first_name': self.test_first_name, 'email': self.test_email, 'username': local_username, 'password': self.test_password, 'first_name': self.test_first_name,
...@@ -420,7 +425,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -420,7 +425,7 @@ class UsersApiTests(ModuleStoreTestCase):
Profile Must be added with year_of_birth will be none Profile Must be added with year_of_birth will be none
and avatar_url None and avatar_url None
""" """
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = { data = {
'email': self.test_email, 'username': local_username, 'password': self.test_password, 'first_name': self.test_first_name, 'email': self.test_email, 'username': local_username, 'password': self.test_password, 'first_name': self.test_first_name,
...@@ -434,17 +439,17 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -434,17 +439,17 @@ class UsersApiTests(ModuleStoreTestCase):
self.is_user_profile_created_updated(response, data) self.is_user_profile_created_updated(response, data)
def test_user_detail_post_invalid_user(self): def test_user_detail_post_invalid_user(self):
test_uri = '/api/users/123124124' test_uri = '{}/123124124'.format(self.users_base_uri)
data = {'is_active': False} data = {'is_active': False}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_groups_list_post(self): def test_user_groups_list_post(self):
test_uri = '/api/groups' test_uri = self.groups_base_uri
data = {'name': 'Alpha Group', 'type': 'test'} data = {'name': 'Alpha Group', 'type': 'test'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
group_id = response.data['id'] group_id = response.data['id']
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -463,11 +468,11 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -463,11 +468,11 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['user_id'], str(user_id)) self.assertEqual(response.data['user_id'], str(user_id))
def test_user_groups_list_post_duplicate(self): def test_user_groups_list_post_duplicate(self):
test_uri = '/api/groups' test_uri = self.groups_base_uri
data = {'name': 'Alpha Group', 'type': 'test'} data = {'name': 'Alpha Group', 'type': 'test'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
group_id = response.data['id'] group_id = response.data['id']
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -482,22 +487,22 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -482,22 +487,22 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 409) self.assertEqual(response.status_code, 409)
def test_user_groups_list_post_invalid_user(self): def test_user_groups_list_post_invalid_user(self):
test_uri = '/api/groups' test_uri = self.groups_base_uri
data = {'name': 'Alpha Group', 'type': 'test'} data = {'name': 'Alpha Group', 'type': 'test'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
group_id = response.data['id'] group_id = response.data['id']
test_uri = '/api/users/897698769/groups' test_uri = '{}/897698769/groups'.format(self.users_base_uri)
data = {'group_id': group_id} data = {'group_id': group_id}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_groups_list_get(self): def test_user_groups_list_get(self):
test_uri = '/api/groups' test_uri = self.groups_base_uri
group_name = 'Alpha Group' group_name = 'Alpha Group'
data = {'name': group_name, 'type': 'test'} data = {'name': group_name, 'type': 'test'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
group_id = response.data['id'] group_id = response.data['id']
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -515,7 +520,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -515,7 +520,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['groups'][0]['name'], str(group_name)) self.assertEqual(response.data['groups'][0]['name'], str(group_name))
def test_user_groups_list_get_with_query_params(self): def test_user_groups_list_get_with_query_params(self):
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = { data = {
'email': self.test_email, 'username': local_username, 'password': self.test_password, 'email': self.test_email, 'username': local_username, 'password': self.test_password,
...@@ -526,7 +531,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -526,7 +531,7 @@ class UsersApiTests(ModuleStoreTestCase):
test_uri = '{}/{}'.format(test_uri, str(user_id)) test_uri = '{}/{}'.format(test_uri, str(user_id))
fail_user_id_group_uri = '{}/{}/groups'.format(test_uri, '22') fail_user_id_group_uri = '{}/{}/groups'.format(test_uri, '22')
group_url = '/api/groups' group_url = self.groups_base_uri
group_name = 'Alpha Group' group_name = 'Alpha Group'
data = {'name': group_name, 'type': 'Engineer'} data = {'name': group_name, 'type': 'Engineer'}
response = self.do_post(group_url, data) response = self.do_post(group_url, data)
...@@ -562,16 +567,16 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -562,16 +567,16 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(len(response.data['groups']), 0) self.assertEqual(len(response.data['groups']), 0)
def test_user_groups_list_get_invalid_user(self): def test_user_groups_list_get_invalid_user(self):
test_uri = '/api/users/123124/groups' test_uri = '{}/123124/groups'.format(self.users_base_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_groups_detail_get(self): def test_user_groups_detail_get(self):
test_uri = '/api/groups' test_uri = self.groups_base_uri
data = {'name': 'Alpha Group', 'type': 'test'} data = {'name': 'Alpha Group', 'type': 'test'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
group_id = response.data['id'] group_id = response.data['id']
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -590,11 +595,11 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -590,11 +595,11 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['user_id'], user_id) self.assertEqual(response.data['user_id'], user_id)
def test_user_groups_detail_delete(self): def test_user_groups_detail_delete(self):
test_uri = '/api/groups' test_uri = self.groups_base_uri
data = {'name': 'Alpha Group', 'type': 'test'} data = {'name': 'Alpha Group', 'type': 'test'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
group_id = response.data['id'] group_id = response.data['id']
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -614,27 +619,27 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -614,27 +619,27 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_groups_detail_get_invalid_user(self): def test_user_groups_detail_get_invalid_user(self):
test_uri = '/api/users/123124/groups/12321' test_uri = '{}/123124/groups/12321'.format(self.users_base_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_groups_detail_get_undefined(self): def test_user_groups_detail_get_undefined(self):
test_uri = '/api/groups' test_uri = self.groups_base_uri
data = {'name': 'Alpha Group', 'type': 'test'} data = {'name': 'Alpha Group', 'type': 'test'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
group_id = response.data['id'] group_id = response.data['id']
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
user_id = response.data['id'] user_id = response.data['id']
test_uri = '/api/users/' + str(user_id) + '/groups/' + str(group_id) test_uri = '{}/{}/groups/{}'.format(self.users_base_uri, user_id, group_id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_courses_list_post(self): def test_user_courses_list_post(self):
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -651,7 +656,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -651,7 +656,7 @@ class UsersApiTests(ModuleStoreTestCase):
def test_user_courses_list_post_undefined_user(self): def test_user_courses_list_post_undefined_user(self):
course = CourseFactory.create() course = CourseFactory.create()
test_uri = '/api/users' test_uri = self.users_base_uri
user_id = '234234' user_id = '234234'
test_uri = '{}/{}/courses'.format(test_uri, str(user_id)) test_uri = '{}/{}/courses'.format(test_uri, str(user_id))
data = {'course_id': unicode(course.id)} data = {'course_id': unicode(course.id)}
...@@ -659,7 +664,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -659,7 +664,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_courses_list_post_undefined_course(self): def test_user_courses_list_post_undefined_course(self):
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -674,7 +679,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -674,7 +679,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_courses_list_get(self): def test_user_courses_list_get(self):
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -705,7 +710,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -705,7 +710,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(datetime.strftime(response.data[1]['end'], '%Y-%m-%d %H:%M:%S'), datetime.strftime(self.course.end, '%Y-%m-%d %H:%M:%S')) self.assertEqual(datetime.strftime(response.data[1]['end'], '%Y-%m-%d %H:%M:%S'), datetime.strftime(self.course.end, '%Y-%m-%d %H:%M:%S'))
def test_user_courses_list_get_undefined_user(self): def test_user_courses_list_get_undefined_user(self):
test_uri = '/api/users/2134234/courses' test_uri = '{}/2134234/courses'.format(self.users_base_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
...@@ -761,7 +766,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -761,7 +766,7 @@ class UsersApiTests(ModuleStoreTestCase):
display_name="Vertical 3" display_name="Vertical 3"
) )
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -806,7 +811,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -806,7 +811,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['position_tree']['vertical']['id'], unicode(vertical3.scope_ids.usage_id)) self.assertEqual(response.data['position_tree']['vertical']['id'], unicode(vertical3.scope_ids.usage_id))
def test_user_courses_detail_post_invalid_course(self): def test_user_courses_detail_post_invalid_course(self):
test_uri = '/api/users/{}/courses/{}'.format(self.user.id, self.test_bogus_course_id) test_uri = '{}/{}/courses/{}'.format(self.users_base_uri, self.user.id, self.test_bogus_course_id)
response = self.do_post(test_uri, data={}) response = self.do_post(test_uri, data={})
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
...@@ -821,7 +826,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -821,7 +826,7 @@ class UsersApiTests(ModuleStoreTestCase):
) )
user_id = 2342334 user_id = 2342334
course_id = 'asd/fa/9sd8fasdf' course_id = 'asd/fa/9sd8fasdf'
test_uri = '/api/users/{}/courses/{}'.format(str(user_id), course_id) test_uri = '{}/{}/courses/{}'.format(self.users_base_uri, user_id, course_id)
position_data = { position_data = {
'position': { 'position': {
'parent_content_id': course_id, 'parent_content_id': course_id,
...@@ -841,7 +846,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -841,7 +846,7 @@ class UsersApiTests(ModuleStoreTestCase):
data=test_data, data=test_data,
display_name="Chapter 1" display_name="Chapter 1"
) )
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -863,7 +868,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -863,7 +868,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['position'], unicode(chapter1.scope_ids.usage_id)) self.assertEqual(response.data['position'], unicode(chapter1.scope_ids.usage_id))
def test_user_courses_detail_post_position_invalid_course(self): def test_user_courses_detail_post_position_invalid_course(self):
test_uri = '/api/users/{}/courses'.format(self.user.id) test_uri = '{}/{}/courses'.format(self.users_base_uri, self.user.id)
data = {'course_id': unicode(self.course.id)} data = {'course_id': unicode(self.course.id)}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
test_uri = test_uri + '/' + unicode(self.course.id) test_uri = test_uri + '/' + unicode(self.course.id)
...@@ -886,7 +891,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -886,7 +891,7 @@ class UsersApiTests(ModuleStoreTestCase):
data=test_data, data=test_data,
display_name="Overview" display_name="Overview"
) )
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -917,30 +922,30 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -917,30 +922,30 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['position_tree']['chapter']['id'], unicode(chapter1.scope_ids.usage_id)) self.assertEqual(response.data['position_tree']['chapter']['id'], unicode(chapter1.scope_ids.usage_id))
def test_user_courses_detail_get_invalid_course(self): def test_user_courses_detail_get_invalid_course(self):
test_uri = '/api/users/{}/courses/{}'.format(self.user.id, self.test_bogus_course_id) test_uri = '{}/{}/courses/{}'.format(self.users_base_uri, self.user.id, self.test_bogus_course_id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_courses_detail_get_undefined_user(self): def test_user_courses_detail_get_undefined_user(self):
test_uri = '/api/users/2134234/courses/a8df7/asv/d98' test_uri = '{}/2134234/courses/a8df7/asv/d98'.format(self.users_base_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_courses_detail_get_undefined_enrollment(self): def test_user_courses_detail_get_undefined_enrollment(self):
course = CourseFactory.create() course = CourseFactory.create()
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
user_id = response.data['id'] user_id = response.data['id']
test_uri = '/api/users/' + str(user_id) + '/courses/' + str(course.id) test_uri = '{}/{}/courses/{}'.format(self.users_base_uri, user_id, course.id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_courses_detail_delete(self): def test_user_courses_detail_delete(self):
course = CourseFactory.create() course = CourseFactory.create()
test_uri = '/api/users' test_uri = self.users_base_uri
local_username = self.test_username + str(randint(11, 99)) local_username = self.test_username + str(randint(11, 99))
data = {'email': self.test_email, 'username': local_username, 'password': data = {'email': self.test_email, 'username': local_username, 'password':
self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name} self.test_password, 'first_name': self.test_first_name, 'last_name': self.test_last_name}
...@@ -970,31 +975,28 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -970,31 +975,28 @@ class UsersApiTests(ModuleStoreTestCase):
def test_user_courses_detail_delete_undefined_user(self): def test_user_courses_detail_delete_undefined_user(self):
course = CourseFactory.create() course = CourseFactory.create()
user_id = '2134234' user_id = '2134234'
test_uri = '/api/users/{}/courses/{}'.format( test_uri = '{}/{}/courses/{}'.format(self.users_base_uri, user_id, course.id)
str(user_id), str(course.id))
response = self.do_delete(test_uri) response = self.do_delete(test_uri)
self.assertEqual(response.status_code, 204) self.assertEqual(response.status_code, 204)
def test_user_courses_detail_delete_undefined_course(self): def test_user_courses_detail_delete_undefined_course(self):
test_uri = '/api/users/{}/courses/{}'.format(str(self.user.id), self.test_bogus_course_id) test_uri = '{}/{}/courses/{}'.format(self.users_base_uri, self.user.id, self.test_bogus_course_id)
response = self.do_delete(test_uri) response = self.do_delete(test_uri)
self.assertEqual(response.status_code, 204) self.assertEqual(response.status_code, 204)
def test_user_course_grades_course_not_found(self): def test_user_course_grades_course_not_found(self):
test_uri = '/api/users/{}/courses/{}/grades'.format( test_uri = '{}/{}/courses/slashes:some+unknown+course/grades'.format(self.users_base_uri, self.user.id)
self.user.id, 'slashes:some+unknown+course')
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_course_grades_user_not_found(self): def test_user_course_grades_user_not_found(self):
course = CourseFactory.create() course = CourseFactory.create()
test_uri = '/api/users/{}/courses/{}/grades'.format( test_uri = '{}/99999999/courses/{}/grades'.format(self.users_base_uri, course.id)
'9999999', course.id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_preferences_user_list_get_not_found(self): def test_user_preferences_user_list_get_not_found(self):
test_uri = '/api/users/{}/preferences'.format('999999') test_uri = '{}/{}/preferences'.format(self.users_base_uri, '999999')
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
...@@ -1002,20 +1004,20 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1002,20 +1004,20 @@ class UsersApiTests(ModuleStoreTestCase):
# By default newly created users will have one initial preference settings: # By default newly created users will have one initial preference settings:
# 'pref-lang' = 'en' # 'pref-lang' = 'en'
user_id = self._create_test_user() user_id = self._create_test_user()
test_uri = '/api/users/{}/preferences'.format(user_id) test_uri = '{}/{}/preferences'.format(self.users_base_uri, user_id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 1) self.assertEqual(len(response.data), 1)
self.assertEqual(response.data['pref-lang'], 'en') self.assertEqual(response.data['pref-lang'], 'en')
def test_user_preferences_list_post_user_not_found(self): def test_user_preferences_list_post_user_not_found(self):
test_uri = '/api/users/{}/preferences'.format('999999') test_uri = '{}/{}/preferences'.format(self.users_base_uri, '999999')
response = self.do_post(test_uri, {"foo": "bar"}) response = self.do_post(test_uri, {"foo": "bar"})
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_preferences_list_post_bad_request(self): def test_user_preferences_list_post_bad_request(self):
user_id = self._create_test_user() user_id = self._create_test_user()
test_uri = '/api/users/{}/preferences'.format(user_id) test_uri = '{}/{}/preferences'.format(self.users_base_uri, user_id)
response = self.do_post(test_uri, {}) response = self.do_post(test_uri, {})
self.assertEqual(response.status_code, 400) self.assertEqual(response.status_code, 400)
# also test with a non-simple key/value set of strings # also test with a non-simple key/value set of strings
...@@ -1030,7 +1032,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1030,7 +1032,7 @@ class UsersApiTests(ModuleStoreTestCase):
def test_user_preferences_list_post(self): def test_user_preferences_list_post(self):
user_id = self._create_test_user() user_id = self._create_test_user()
test_uri = '/api/users/{}/preferences'.format(user_id) test_uri = '{}/{}/preferences'.format(self.users_base_uri, user_id)
response = self.do_post(test_uri, {"foo": "bar"}) response = self.do_post(test_uri, {"foo": "bar"})
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
response = self.do_get(test_uri) response = self.do_get(test_uri)
...@@ -1041,7 +1043,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1041,7 +1043,7 @@ class UsersApiTests(ModuleStoreTestCase):
def test_user_preferences_list_update(self): def test_user_preferences_list_update(self):
user_id = self._create_test_user() user_id = self._create_test_user()
test_uri = '/api/users/{}/preferences'.format(user_id) test_uri = '{}/{}/preferences'.format(self.users_base_uri, user_id)
response = self.do_post(test_uri, {"foo": "bar"}) response = self.do_post(test_uri, {"foo": "bar"})
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
response = self.do_post(test_uri, {"foo": "updated"}) response = self.do_post(test_uri, {"foo": "updated"})
...@@ -1054,7 +1056,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1054,7 +1056,7 @@ class UsersApiTests(ModuleStoreTestCase):
def test_user_preferences_detail_get(self): def test_user_preferences_detail_get(self):
user_id = self._create_test_user() user_id = self._create_test_user()
test_uri = '/api/users/{}/preferences'.format(user_id) test_uri = '{}/{}/preferences'.format(self.users_base_uri, user_id)
response = self.do_post(test_uri, {"foo": "bar"}) response = self.do_post(test_uri, {"foo": "bar"})
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
test_uri = '{}/{}'.format(test_uri, 'foo') test_uri = '{}/{}'.format(test_uri, 'foo')
...@@ -1063,13 +1065,13 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1063,13 +1065,13 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['foo'], 'bar') self.assertEqual(response.data['foo'], 'bar')
def test_user_preferences_detail_get_invalid_user(self): def test_user_preferences_detail_get_invalid_user(self):
test_uri = '/api/users/12345/preferences/foo' test_uri = '{}/12345/preferences/foo'.format(self.users_base_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_preferences_detail_delete(self): def test_user_preferences_detail_delete(self):
user_id = self._create_test_user() user_id = self._create_test_user()
test_uri = '/api/users/{}/preferences'.format(user_id) test_uri = '{}/{}/preferences'.format(self.users_base_uri, user_id)
response = self.do_post(test_uri, {"foo": "bar"}) response = self.do_post(test_uri, {"foo": "bar"})
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
test_uri = '{}/{}'.format(test_uri, 'foo') test_uri = '{}/{}'.format(test_uri, 'foo')
...@@ -1081,7 +1083,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1081,7 +1083,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_preferences_detail_delete_invalid_user(self): def test_user_preferences_detail_delete_invalid_user(self):
test_uri = '/api/users/12345/preferences/foo' test_uri = '{}/12345/preferences/foo'.format(self.users_base_uri)
response = self.do_delete(test_uri) response = self.do_delete(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
...@@ -1142,8 +1144,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1142,8 +1144,7 @@ class UsersApiTests(ModuleStoreTestCase):
module_type='mentoring' module_type='mentoring'
) )
test_uri = '/api/users/{}/courses/{}/grades'.format( test_uri = '{}/{}/courses/{}/grades'.format(self.users_base_uri, user_id, unicode(course.id))
user_id, unicode(course.id))
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
...@@ -1199,23 +1200,23 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1199,23 +1200,23 @@ class UsersApiTests(ModuleStoreTestCase):
response = self.do_post(self.org_base_uri, data) response = self.do_post(self.org_base_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
test_uri = '/api/users/{}/organizations/'.format(user_id) test_uri = '{}/{}/organizations/'.format(self.users_base_uri, user_id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.data['count'], 6) self.assertEqual(response.data['count'], 6)
self.assertEqual(len(response.data['results']), 6) self.assertEqual(len(response.data['results']), 6)
self.assertEqual(response.data['num_pages'], 1) self.assertEqual(response.data['num_pages'], 1)
# test with anonymous user id # test with anonymous user id
test_uri = '/api/users/{}/organizations/'.format(anonymous_id) test_uri = '{}/{}/organizations/'.format(self.users_base_uri, anonymous_id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.data['count'], 6) self.assertEqual(response.data['count'], 6)
# test with invalid user # test with invalid user
response = self.do_get('/api/users/4356340/organizations/') response = self.do_get('{}/4356340/organizations/'.format(self.users_base_uri))
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_workgroups_list(self): def test_user_workgroups_list(self):
test_workgroups_uri = '/api/workgroups/' test_workgroups_uri = self.workgroups_base_uri
user_id = self.user.id user_id = self.user.id
# create anonymous user # create anonymous user
anonymous_id = anonymous_id_for_user(self.user, self.course.id) anonymous_id = anonymous_id_for_user(self.user, self.course.id)
...@@ -1236,7 +1237,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1236,7 +1237,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
# test with anonymous user id # test with anonymous user id
test_uri = '/api/users/{}/workgroups/?page_size=10'.format(anonymous_id) test_uri = '{}/{}/workgroups/?page_size=10'.format(self.users_base_uri, anonymous_id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.data['count'], 11) self.assertEqual(response.data['count'], 11)
self.assertEqual(len(response.data['results']), 10) self.assertEqual(len(response.data['results']), 10)
...@@ -1244,7 +1245,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1244,7 +1245,7 @@ class UsersApiTests(ModuleStoreTestCase):
# test with course_id filter and integer user id # test with course_id filter and integer user id
course_id = {'course_id': unicode(self.course.id)} course_id = {'course_id': unicode(self.course.id)}
response = self.do_get('/api/users/{}/workgroups/?{}'.format(user_id, urlencode(course_id))) response = self.do_get('{}/{}/workgroups/?{}'.format(self.users_base_uri, user_id, urlencode(course_id)))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 7) self.assertEqual(response.data['count'], 7)
self.assertEqual(len(response.data['results']), 7) self.assertEqual(len(response.data['results']), 7)
...@@ -1252,12 +1253,12 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1252,12 +1253,12 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertIsNotNone(response.data['results'][0]['project']) self.assertIsNotNone(response.data['results'][0]['project'])
# test with invalid user # test with invalid user
response = self.do_get('/api/users/4356340/workgroups/') response = self.do_get('{}/4356340/workgroups/'.format(self.users_base_uri))
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
# test with valid user but has no workgroup # test with valid user but has no workgroup
another_user_id = self._create_test_user() another_user_id = self._create_test_user()
response = self.do_get('/api/users/{}/workgroups/'.format(another_user_id)) response = self.do_get('{}/{}/workgroups/'.format(self.users_base_uri, another_user_id))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 0) self.assertEqual(response.data['count'], 0)
self.assertEqual(len(response.data['results']), 0) self.assertEqual(len(response.data['results']), 0)
...@@ -1265,7 +1266,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1265,7 +1266,7 @@ class UsersApiTests(ModuleStoreTestCase):
def test_user_completions_list(self): def test_user_completions_list(self):
user_id = self.user.id user_id = self.user.id
another_user_id = UserFactory().id another_user_id = UserFactory().id
completion_uri = '/api/courses/{}/completions/'.format(unicode(self.course.id)) completion_uri = '{}/{}/completions/'.format(self.courses_base_uri, unicode(self.course.id))
for i in xrange(1, 26): for i in xrange(1, 26):
if i > 12: if i > 12:
...@@ -1284,7 +1285,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1284,7 +1285,7 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
# Get course module completion by user # Get course module completion by user
completion_list_uri = '/api/users/{}/courses/{}/completions/?page_size=6'.format(user_id, unicode(self.course.id)) completion_list_uri = '{}/{}/courses/{}/completions/?page_size=6'.format(self.users_base_uri, user_id, unicode(self.course.id))
response = self.do_get(completion_list_uri) response = self.do_get(completion_list_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 12) self.assertEqual(response.data['count'], 12)
...@@ -1294,14 +1295,15 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1294,14 +1295,15 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['num_pages'], 2) self.assertEqual(response.data['num_pages'], 2)
# Get course module completion by other user # Get course module completion by other user
completion_list_uri = '/api/users/{}/courses/{}/completions/'.format(another_user_id, unicode(self.course.id)) completion_list_uri = '{}/{}/courses/{}/completions/'.format(self.users_base_uri, another_user_id, unicode(self.course.id))
response = self.do_get(completion_list_uri) response = self.do_get(completion_list_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 13) self.assertEqual(response.data['count'], 13)
# Get course module completion by other user and course module id (content_id) # Get course module completion by other user and course module id (content_id)
content_id = {'content_id': unicode(local_content.scope_ids.usage_id)} content_id = {'content_id': unicode(local_content.scope_ids.usage_id)}
completion_list_uri = '/api/users/{}/courses/{}/completions/?{}'.format( completion_list_uri = '{}/{}/courses/{}/completions/?{}'.format(
self.users_base_uri,
course_user_id, course_user_id,
unicode(self.course.id), unicode(self.course.id),
urlencode(content_id) urlencode(content_id)
...@@ -1311,12 +1313,12 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1311,12 +1313,12 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['count'], 1) self.assertEqual(response.data['count'], 1)
# Get course module completion by bogus user # Get course module completion by bogus user
completion_list_uri = '/api/users/{}/courses/{}/completions/'.format('34323422', unicode(self.course.id)) completion_list_uri = '{}/{}/courses/{}/completions/'.format(self.users_base_uri, '34323422', unicode(self.course.id))
response = self.do_get(completion_list_uri) response = self.do_get(completion_list_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_user_count_by_city(self): def test_user_count_by_city(self):
test_uri = '/api/users' test_uri = self.users_base_uri
# create a 25 new users # create a 25 new users
for i in xrange(1, 26): for i in xrange(1, 26):
...@@ -1342,26 +1344,26 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1342,26 +1344,26 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.is_user_profile_created_updated(response, data) self.is_user_profile_created_updated(response, data)
response = self.do_get('/api/users/metrics/cities/') response = self.do_get('{}/metrics/cities/'.format(self.users_base_uri))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data['results']), 4) self.assertEqual(len(response.data['results']), 4)
self.assertEqual(response.data['results'][0]['city'], 'San Francisco') self.assertEqual(response.data['results'][0]['city'], 'San Francisco')
self.assertEqual(response.data['results'][0]['count'], 9) self.assertEqual(response.data['results'][0]['count'], 9)
# filter counts by city # filter counts by city
response = self.do_get('/api/users/metrics/cities/?city=new york city') response = self.do_get('{}/metrics/cities/?city=new york city'.format(self.users_base_uri))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data['results']), 1) self.assertEqual(len(response.data['results']), 1)
self.assertEqual(response.data['results'][0]['city'], 'New York City') self.assertEqual(response.data['results'][0]['city'], 'New York City')
self.assertEqual(response.data['results'][0]['count'], 6) self.assertEqual(response.data['results'][0]['count'], 6)
def test_users_social_metrics_get_service_unavailable(self): def test_users_social_metrics_get_service_unavailable(self):
test_uri = '/api/users/{}/courses/{}/metrics/social/'.format(self.user.id, self.course.id) test_uri = '{}/{}/courses/{}/metrics/social/'.format(self.users_base_uri, self.user.id, self.course.id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 500) self.assertEqual(response.status_code, 500)
def test_users_social_metrics_get_invalid_user(self): def test_users_social_metrics_get_invalid_user(self):
test_uri = '/api/users/{}/courses/{}/metrics/social/'.format(12345, self.course.id) test_uri = '{}/12345/courses/{}/metrics/social/'.format(self.users_base_uri, self.course.id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
...@@ -1379,7 +1381,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1379,7 +1381,7 @@ class UsersApiTests(ModuleStoreTestCase):
end=datetime(2015, 1, 16, 14, 30) end=datetime(2015, 1, 16, 14, 30)
) )
allow_access(course3, self.user, 'staff') allow_access(course3, self.user, 'staff')
test_uri = '/api/users/{}/roles/'.format(self.user.id) test_uri = '{}/{}/roles/'.format(self.users_base_uri, self.user.id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 3) self.assertEqual(response.data['count'], 3)
...@@ -1404,19 +1406,19 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1404,19 +1406,19 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['count'], 0) self.assertEqual(response.data['count'], 0)
def test_users_roles_list_get_invalid_user(self): def test_users_roles_list_get_invalid_user(self):
test_uri = '/api/users/23423/roles/' test_uri = '{}/23423/roles/'.format(self.users_base_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_users_roles_list_get_invalid_course(self): def test_users_roles_list_get_invalid_course(self):
test_uri = '/api/users/{}/roles/'.format(self.user.id) test_uri = '{}/{}/roles/'.format(self.users_base_uri, self.user.id)
course_id = {'course_id': '{}'.format(unicode(self.test_bogus_course_id))} course_id = {'course_id': '{}'.format(unicode(self.test_bogus_course_id))}
test_uri = '{}?{}'.format(test_uri, urlencode(course_id)) test_uri = '{}?{}'.format(test_uri, urlencode(course_id))
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_users_roles_list_post(self): def test_users_roles_list_post(self):
test_uri = '/api/users/{}/roles/'.format(self.user.id) test_uri = '{}/{}/roles/'.format(self.users_base_uri, self.user.id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 0) self.assertEqual(response.data['count'], 0)
...@@ -1434,19 +1436,19 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1434,19 +1436,19 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertTrue(has_role) self.assertTrue(has_role)
def test_users_roles_list_post_invalid_user(self): def test_users_roles_list_post_invalid_user(self):
test_uri = '/api/users/2131/roles/' test_uri = '{}/2131/roles/'.format(self.users_base_uri)
data = {'course_id': unicode(self.course.id), 'role': 'instructor'} data = {'course_id': unicode(self.course.id), 'role': 'instructor'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_users_roles_list_post_invalid_course(self): def test_users_roles_list_post_invalid_course(self):
test_uri = '/api/users/{}/roles/'.format(self.user.id) test_uri = '{}/{}/roles/'.format(self.users_base_uri, self.user.id)
data = {'course_id': self.test_bogus_course_id, 'role': 'instructor'} data = {'course_id': self.test_bogus_course_id, 'role': 'instructor'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 400) self.assertEqual(response.status_code, 400)
def test_users_roles_list_post_invalid_role(self): def test_users_roles_list_post_invalid_role(self):
test_uri = '/api/users/{}/roles/'.format(self.user.id) test_uri = '{}/{}/roles/'.format(self.users_base_uri, self.user.id)
data = {'course_id': unicode(self.course.id), 'role': 'invalid_role'} data = {'course_id': unicode(self.course.id), 'role': 'invalid_role'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 400) self.assertEqual(response.status_code, 400)
...@@ -1470,7 +1472,7 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1470,7 +1472,7 @@ class UsersApiTests(ModuleStoreTestCase):
name=FORUM_ROLE_MODERATOR, name=FORUM_ROLE_MODERATOR,
course_id=course3.id) course_id=course3.id)
test_uri = '/api/users/{}/roles/'.format(self.user.id) test_uri = '{}/{}/roles/'.format(self.users_base_uri, self.user.id)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 0) self.assertEqual(response.data['count'], 0)
...@@ -1501,13 +1503,13 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1501,13 +1503,13 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(role['role'], 'staff') self.assertEqual(role['role'], 'staff')
def test_users_roles_list_put_invalid_user(self): def test_users_roles_list_put_invalid_user(self):
test_uri = '/api/users/2131/roles/' test_uri = '{}/2131/roles/'.format(self.users_base_uri)
data = [{'course_id': unicode(self.course.id), 'role': 'instructor'}] data = [{'course_id': unicode(self.course.id), 'role': 'instructor'}]
response = self.do_put(test_uri, data) response = self.do_put(test_uri, data)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_users_roles_list_put_invalid_course(self): def test_users_roles_list_put_invalid_course(self):
test_uri = '/api/users/{}/roles/'.format(self.user.id) test_uri = '{}/{}/roles/'.format(self.users_base_uri, self.user.id)
data = {'course_id': unicode(self.course.id), 'role': 'instructor'} data = {'course_id': unicode(self.course.id), 'role': 'instructor'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
...@@ -1522,13 +1524,13 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1522,13 +1524,13 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['results'][0]['course_id'], unicode(self.course.id)) self.assertEqual(response.data['results'][0]['course_id'], unicode(self.course.id))
def test_users_roles_list_put_invalid_roles(self): def test_users_roles_list_put_invalid_roles(self):
test_uri = '/api/users/{}/roles/'.format(self.user.id) test_uri = '{}/{}/roles/'.format(self.users_base_uri, self.user.id)
data = [] data = []
response = self.do_put(test_uri, data) response = self.do_put(test_uri, data)
self.assertEqual(response.status_code, 400) self.assertEqual(response.status_code, 400)
def test_users_roles_courses_detail_delete(self): def test_users_roles_courses_detail_delete(self):
test_uri = '/api/users/{}/roles/'.format(self.user.id) test_uri = '{}/{}/roles/'.format(self.users_base_uri, self.user.id)
data = {'course_id': unicode(self.course.id), 'role': 'instructor'} data = {'course_id': unicode(self.course.id), 'role': 'instructor'}
response = self.do_post(test_uri, data) response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
...@@ -1552,19 +1554,19 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -1552,19 +1554,19 @@ class UsersApiTests(ModuleStoreTestCase):
pass pass
def test_users_roles_courses_detail_delete_invalid_course(self): def test_users_roles_courses_detail_delete_invalid_course(self):
test_uri = '/api/users/{}/roles/'.format(self.user.id) test_uri = '{}/{}/roles/'.format(self.users_base_uri, self.user.id)
delete_uri = '{}instructor/courses/{}'.format(test_uri, self.test_bogus_course_id) delete_uri = '{}instructor/courses/{}'.format(test_uri, self.test_bogus_course_id)
response = self.do_delete(delete_uri) response = self.do_delete(delete_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_users_roles_courses_detail_delete_invalid_user(self): def test_users_roles_courses_detail_delete_invalid_user(self):
test_uri = '/api/users/124134/roles/' test_uri = '{}/124134/roles/'.format(self.users_base_uri)
delete_uri = '{}instructor/courses/{}'.format(test_uri, unicode(self.course.id)) delete_uri = '{}instructor/courses/{}'.format(test_uri, unicode(self.course.id))
response = self.do_delete(delete_uri) response = self.do_delete(delete_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_users_roles_courses_detail_delete_invalid_role(self): def test_users_roles_courses_detail_delete_invalid_role(self):
test_uri = '/api/users/{}/roles/'.format(self.user.id) test_uri = '{}/{}/roles/'.format(self.users_base_uri, self.user.id)
delete_uri = '{}invalid_role/courses/{}'.format(test_uri, unicode(self.course.id)) delete_uri = '{}invalid_role/courses/{}'.format(test_uri, unicode(self.course.id))
response = self.do_delete(delete_uri) response = self.do_delete(delete_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
"""
One-time data migration script -- shoulen't need to run it again
"""
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand
from django.test import RequestFactory
from api_manager.courseware_access import get_course, get_course_child
from opaque_keys import InvalidKeyError
from project.models import Project, WorkgroupReview, WorkgroupSubmissionReview
class Command(BaseCommand):
"""
Migrates legacy course/content identifiers across several models to the new format
"""
def handle(self, *args, **options):
request_factory = RequestFactory()
request = request_factory.get('/')
request.user = User(email='migration@edx.org', username='migration', password='migration', is_active=True)
projects = Project.objects.all()
for project in projects:
course_descriptor, course_key, course_content = get_course(request, request.user, project.course_id)
project.course_id = unicode(course_key)
try:
project.content_id = course_key.make_usage_key_from_deprecated_string(project.content_id)
except InvalidKeyError:
pass # If the key conversion fails it was either a new-style key or junk data
project.save()
workgroup_reviews = WorkgroupReview.objects.all()
for wr in workgroup_reviews:
course_id = wr.workgroup.project.course_id
course_descriptor, course_key, course_content = get_course(request, request.user, course_id)
try:
wr.content_id = course_key.make_usage_key_from_deprecated_string(wr.content_id)
except InvalidKeyError:
pass # If the key conversion fails it was either a new-style key or junk data
wr.save()
workgroup_submission_reviews = WorkgroupSubmissionReview.objects.all()
for wsr in workgroup_submission_reviews:
course_id = wsr.submission.workgroup.project.course_id
course_descriptor, course_key, course_content = get_course(request, request.user, course_id)
try:
wsr.content_id = course_key.make_usage_key_from_deprecated_string(wsr.content_id)
except InvalidKeyError:
pass # If the key conversion fails it was either a new-style key or junk data
wsr.save()
"""
Run these tests @ Devstack:
rake fasttest_lms[common/djangoapps/api_manager/management/commands/tests/test_migrate_orgdata.py]
"""
from datetime import datetime
import uuid
from django.contrib.auth.models import Group, User
from django.test import TestCase
from django.test.utils import override_settings
from api_manager.management.commands import migrate_courseids
from courseware.tests.modulestore_config import TEST_DATA_MIXED_MODULESTORE
from projects.models import Project, Workgroup, WorkgroupReview, WorkgroupSubmission, WorkgroupSubmissionReview
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
from django.db import connection
@override_settings(MODULESTORE=TEST_DATA_MIXED_MODULESTORE)
class MigrateCourseIdsTests(TestCase):
"""
Test suite for data migration script
"""
def setUp(self):
self.course = CourseFactory.create(
start=datetime(2014, 6, 16, 14, 30),
end=datetime(2015, 1, 16)
)
self.test_data = '<html>{}</html>'.format(str(uuid.uuid4()))
self.chapter = ItemFactory.create(
category="chapter",
parent_location=self.course.location,
data=self.test_data,
due=datetime(2014, 5, 16, 14, 30),
display_name="Overview"
)
self.old_style_course_id = self.course.id.to_deprecated_string()
self.new_style_course_id = unicode(self.course.id)
self.old_style_content_id = self.chapter.location.to_deprecated_string()
self.new_style_content_id = unicode(self.chapter.location)
self.course2 = CourseFactory.create(
org='TEST',
start=datetime(2014, 6, 16, 14, 30),
end=datetime(2015, 1, 16)
)
self.chapter2 = ItemFactory.create(
category="chapter",
parent_location=self.course2.location,
data=self.test_data,
due=datetime(2014, 5, 16, 14, 30),
display_name="Overview"
)
self.new_style_course_id2 = unicode(self.course2.id)
self.new_style_content_id2 = unicode(self.chapter2.location)
def test_migrate_courseids(self):
"""
Test the data migration
"""
# Set up the data to be migrated
user = User.objects.create(email='testuser@edx.org', username='testuser', password='testpassword', is_active=True)
project = Project.objects.create(course_id=self.old_style_course_id, content_id=self.old_style_content_id)
workgroup = Workgroup.objects.create(name='Test Workgroup', project=project)
workgroup_review = WorkgroupReview.objects.create(workgroup=workgroup, content_id=self.old_style_content_id)
workgroup_submission = WorkgroupSubmission.objects.create(workgroup=workgroup, user=user)
workgroup_submission_review = WorkgroupSubmissionReview.objects.create(submission=workgroup_submission, content_id=self.old_style_content_id)
user2 = User.objects.create(email='testuser2@edx.org', username='testuser2', password='testpassword2', is_active=True)
project2 = Project.objects.create(course_id=self.new_style_course_id2, content_id=self.new_style_content_id2)
workgroup2 = Workgroup.objects.create(name='Test Workgroup2', project=project2)
workgroup_review2 = WorkgroupReview.objects.create(workgroup=workgroup2, content_id=self.new_style_content_id2)
workgroup_submission2 = WorkgroupSubmission.objects.create(workgroup=workgroup2, user=user2)
workgroup_submission_review2 = WorkgroupSubmissionReview.objects.create(submission=workgroup_submission2, content_id=self.new_style_content_id2)
# Run the data migration
migrate_courseids.Command().handle()
# Confirm that the data has been properly migrated
updated_project = Project.objects.get(id=project.id)
self.assertEqual(updated_project.course_id, self.new_style_course_id)
self.assertEqual(updated_project.content_id, self.new_style_content_id)
updated_project = Project.objects.get(id=project2.id)
self.assertEqual(updated_project.course_id, self.new_style_course_id2)
self.assertEqual(updated_project.content_id, self.new_style_content_id2)
print "Project Data Migration Passed"
updated_workgroup_review = WorkgroupReview.objects.get(id=workgroup_review.id)
self.assertEqual(updated_workgroup_review.content_id, self.new_style_content_id)
updated_workgroup_review = WorkgroupReview.objects.get(id=workgroup_review2.id)
self.assertEqual(updated_workgroup_review.content_id, self.new_style_content_id2)
print "Workgroup Review Data Migration Passed"
updated_workgroup_submission_review = WorkgroupSubmissionReview.objects.get(id=workgroup_submission_review.id)
self.assertEqual(updated_workgroup_submission_review.content_id, self.new_style_content_id)
updated_workgroup_submission_review = WorkgroupSubmissionReview.objects.get(id=workgroup_submission_review2.id)
self.assertEqual(updated_workgroup_submission_review.content_id, self.new_style_content_id2)
print "Workgroup Submission Review Data Migration Passed"
...@@ -37,10 +37,10 @@ class PeerReviewsApiTests(ModuleStoreTestCase): ...@@ -37,10 +37,10 @@ class PeerReviewsApiTests(ModuleStoreTestCase):
def setUp(self): def setUp(self):
self.test_server_prefix = 'https://testserver' self.test_server_prefix = 'https://testserver'
self.test_users_uri = '/api/users/' self.test_users_uri = '/api/server/users/'
self.test_workgroups_uri = '/api/workgroups/' self.test_workgroups_uri = '/api/server/workgroups/'
self.test_projects_uri = '/api/projects/' self.test_projects_uri = '/api/server/projects/'
self.test_peer_reviews_uri = '/api/peer_reviews/' self.test_peer_reviews_uri = '/api/server/peer_reviews/'
self.course = CourseFactory.create() self.course = CourseFactory.create()
self.test_data = '<html>{}</html>'.format(str(uuid.uuid4())) self.test_data = '<html>{}</html>'.format(str(uuid.uuid4()))
...@@ -181,7 +181,7 @@ class PeerReviewsApiTests(ModuleStoreTestCase): ...@@ -181,7 +181,7 @@ class PeerReviewsApiTests(ModuleStoreTestCase):
self.assertIsNotNone(response.data['modified']) self.assertIsNotNone(response.data['modified'])
def test_peer_reviews_detail_get_undefined(self): def test_peer_reviews_detail_get_undefined(self):
test_uri = '/api/peer_reviews/123456789/' test_uri = '{}/123456789/'.format(self.test_peer_reviews_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
......
...@@ -34,8 +34,8 @@ class ProjectsApiTests(TestCase): ...@@ -34,8 +34,8 @@ class ProjectsApiTests(TestCase):
def setUp(self): def setUp(self):
self.test_server_prefix = 'https://testserver' self.test_server_prefix = 'https://testserver'
self.test_projects_uri = '/api/projects/' self.test_projects_uri = '/api/server/projects/'
self.test_organizations_uri = '/api/organizations/' self.test_organizations_uri = '/api/server/organizations/'
self.test_project_name = str(uuid.uuid4()) self.test_project_name = str(uuid.uuid4())
self.test_course_id = 'edx/demo/course' self.test_course_id = 'edx/demo/course'
...@@ -155,7 +155,7 @@ class ProjectsApiTests(TestCase): ...@@ -155,7 +155,7 @@ class ProjectsApiTests(TestCase):
self.assertEqual(response.status_code, 400) self.assertEqual(response.status_code, 400)
def test_projects_detail_get_undefined(self): def test_projects_detail_get_undefined(self):
test_uri = '/api/projects/123456789/' test_uri = '{}/123456789/'.format(self.test_projects_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
......
...@@ -37,10 +37,10 @@ class SubmissionReviewsApiTests(ModuleStoreTestCase): ...@@ -37,10 +37,10 @@ class SubmissionReviewsApiTests(ModuleStoreTestCase):
def setUp(self): def setUp(self):
self.test_server_prefix = 'https://testserver' self.test_server_prefix = 'https://testserver'
self.test_users_uri = '/api/users/' self.test_users_uri = '/api/server/users/'
self.test_workgroups_uri = '/api/workgroups/' self.test_workgroups_uri = '/api/server/workgroups/'
self.test_projects_uri = '/api/projects/' self.test_projects_uri = '/api/server/projects/'
self.test_submission_reviews_uri = '/api/submission_reviews/' self.test_submission_reviews_uri = '/api/server/submission_reviews/'
self.course = CourseFactory.create() self.course = CourseFactory.create()
self.test_data = '<html>{}</html>'.format(str(uuid.uuid4())) self.test_data = '<html>{}</html>'.format(str(uuid.uuid4()))
...@@ -174,7 +174,7 @@ class SubmissionReviewsApiTests(ModuleStoreTestCase): ...@@ -174,7 +174,7 @@ class SubmissionReviewsApiTests(ModuleStoreTestCase):
self.assertIsNotNone(response.data['modified']) self.assertIsNotNone(response.data['modified'])
def test_submission_reviews_detail_get_undefined(self): def test_submission_reviews_detail_get_undefined(self):
test_uri = '/api/submission_reviews/123456789/' test_uri = '{}123456789/'.format(self.test_submission_reviews_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
......
...@@ -38,10 +38,10 @@ class WorkgroupReviewsApiTests(ModuleStoreTestCase): ...@@ -38,10 +38,10 @@ class WorkgroupReviewsApiTests(ModuleStoreTestCase):
def setUp(self): def setUp(self):
super(WorkgroupReviewsApiTests, self).setUp() super(WorkgroupReviewsApiTests, self).setUp()
self.test_server_prefix = 'https://testserver' self.test_server_prefix = 'https://testserver'
self.test_users_uri = '/api/users/' self.test_users_uri = '/api/server/users/'
self.test_workgroups_uri = '/api/workgroups/' self.test_workgroups_uri = '/api/server/workgroups/'
self.test_projects_uri = '/api/projects/' self.test_projects_uri = '/api/server/projects/'
self.test_workgroup_reviews_uri = '/api/workgroup_reviews/' self.test_workgroup_reviews_uri = '/api/server/workgroup_reviews/'
self.course = CourseFactory.create() self.course = CourseFactory.create()
self.test_data = '<html>{}</html>'.format(str(uuid.uuid4())) self.test_data = '<html>{}</html>'.format(str(uuid.uuid4()))
...@@ -174,7 +174,7 @@ class WorkgroupReviewsApiTests(ModuleStoreTestCase): ...@@ -174,7 +174,7 @@ class WorkgroupReviewsApiTests(ModuleStoreTestCase):
self.assertIsNotNone(response.data['modified']) self.assertIsNotNone(response.data['modified'])
def test_workgroup_reviews_detail_get_undefined(self): def test_workgroup_reviews_detail_get_undefined(self):
test_uri = '/api/workgroup_reviews/123456789/' test_uri = '{}123456789/'.format(self.test_workgroup_reviews_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
......
...@@ -34,10 +34,10 @@ class SubmissionsApiTests(TestCase): ...@@ -34,10 +34,10 @@ class SubmissionsApiTests(TestCase):
def setUp(self): def setUp(self):
self.test_server_prefix = 'https://testserver' self.test_server_prefix = 'https://testserver'
self.test_users_uri = '/api/users/' self.test_users_uri = '/api/server/users/'
self.test_workgroups_uri = '/api/workgroups/' self.test_workgroups_uri = '/api/server/workgroups/'
self.test_projects_uri = '/api/projects/' self.test_projects_uri = '/api/server/projects/'
self.test_submissions_uri = '/api/submissions/' self.test_submissions_uri = '/api/server/submissions/'
self.test_course_id = 'edx/demo/course' self.test_course_id = 'edx/demo/course'
self.test_bogus_course_id = 'foo/bar/baz' self.test_bogus_course_id = 'foo/bar/baz'
...@@ -182,7 +182,7 @@ class SubmissionsApiTests(TestCase): ...@@ -182,7 +182,7 @@ class SubmissionsApiTests(TestCase):
self.assertIsNotNone(response.data['modified']) self.assertIsNotNone(response.data['modified'])
def test_submissions_detail_get_undefined(self): def test_submissions_detail_get_undefined(self):
test_uri = '/api/submissions/123456789/' test_uri = '{}123456789/'.format(self.test_submissions_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
......
...@@ -47,7 +47,11 @@ class WorkgroupsApiTests(ModuleStoreTestCase): ...@@ -47,7 +47,11 @@ class WorkgroupsApiTests(ModuleStoreTestCase):
def setUp(self): def setUp(self):
super(WorkgroupsApiTests, self).setUp() super(WorkgroupsApiTests, self).setUp()
self.test_server_prefix = 'https://testserver' self.test_server_prefix = 'https://testserver'
self.test_workgroups_uri = '/api/workgroups/' self.test_workgroups_uri = '/api/server/workgroups/'
self.test_submissions_uri = '/api/server/submissions/'
self.test_peer_reviews_uri = '/api/server/peer_reviews/'
self.test_workgroup_reviews_uri = '/api/server/workgroup_reviews/'
self.test_courses_uri = '/api/server/courses'
self.test_bogus_course_id = 'foo/bar/baz' self.test_bogus_course_id = 'foo/bar/baz'
self.test_bogus_course_content_id = "i4x://foo/bar/baz" self.test_bogus_course_content_id = "i4x://foo/bar/baz"
self.test_group_id = '1' self.test_group_id = '1'
...@@ -383,7 +387,7 @@ class WorkgroupsApiTests(ModuleStoreTestCase): ...@@ -383,7 +387,7 @@ class WorkgroupsApiTests(ModuleStoreTestCase):
'question': 'Test question?', 'question': 'Test question?',
'answer': 'Test answer!' 'answer': 'Test answer!'
} }
response = self.do_post('/api/peer_reviews/', pr_data) response = self.do_post(self.test_peer_reviews_uri, pr_data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
pr_id = response.data['id'] pr_id = response.data['id']
test_uri = '{}{}/'.format(self.test_workgroups_uri, workgroup_id) test_uri = '{}{}/'.format(self.test_workgroups_uri, workgroup_id)
...@@ -407,7 +411,7 @@ class WorkgroupsApiTests(ModuleStoreTestCase): ...@@ -407,7 +411,7 @@ class WorkgroupsApiTests(ModuleStoreTestCase):
'question': 'Test question?', 'question': 'Test question?',
'answer': 'Test answer!' 'answer': 'Test answer!'
} }
response = self.do_post('/api/workgroup_reviews/', wr_data) response = self.do_post(self.test_workgroup_reviews_uri, wr_data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
wr_id = response.data['id'] wr_id = response.data['id']
test_uri = '{}{}/'.format(self.test_workgroups_uri, workgroup_id) test_uri = '{}{}/'.format(self.test_workgroups_uri, workgroup_id)
...@@ -432,7 +436,7 @@ class WorkgroupsApiTests(ModuleStoreTestCase): ...@@ -432,7 +436,7 @@ class WorkgroupsApiTests(ModuleStoreTestCase):
'document_url': 'https://s3.amazonaws.com/bucketname/filename.pdf', 'document_url': 'https://s3.amazonaws.com/bucketname/filename.pdf',
'document_mime_type': 'application/pdf' 'document_mime_type': 'application/pdf'
} }
response = self.do_post('/api/submissions/', data) response = self.do_post(self.test_submissions_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
submission_id = response.data['id'] submission_id = response.data['id']
test_uri = '{}{}/'.format(self.test_workgroups_uri, workgroup_id) test_uri = '{}{}/'.format(self.test_workgroups_uri, workgroup_id)
...@@ -469,7 +473,7 @@ class WorkgroupsApiTests(ModuleStoreTestCase): ...@@ -469,7 +473,7 @@ class WorkgroupsApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
# Confirm the grades for the users # Confirm the grades for the users
course_grades_uri = '/api/courses/{}/grades'.format(self.test_course_id) course_grades_uri = '{}/{}/grades'.format(self.test_courses_uri, self.test_course_id)
response = self.do_get(course_grades_uri) response = self.do_get(course_grades_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertGreater(len(response.data['grades']), 0) self.assertGreater(len(response.data['grades']), 0)
...@@ -615,7 +619,7 @@ class WorkgroupsApiTests(ModuleStoreTestCase): ...@@ -615,7 +619,7 @@ class WorkgroupsApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 400) self.assertEqual(response.status_code, 400)
def test_workgroups_detail_get_undefined(self): def test_workgroups_detail_get_undefined(self):
test_uri = '/api/workgroups/123456789/' test_uri = '{}123456789/'.format(self.test_workgroups_uri)
response = self.do_get(test_uri) response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
......
...@@ -125,7 +125,7 @@ if settings.FEATURES["ENABLE_MOBILE_REST_API"]: ...@@ -125,7 +125,7 @@ if settings.FEATURES["ENABLE_MOBILE_REST_API"]:
# OPEN EDX API # OPEN EDX API
if settings.FEATURES["API"]: if settings.FEATURES["API"]:
urlpatterns += ( urlpatterns += (
url(r'^api/', include('api_manager.urls')), url(r'^api/server/', include('api_manager.urls')),
) )
# if settings.FEATURES.get("MULTIPLE_ENROLLMENT_ROLES"): # if settings.FEATURES.get("MULTIPLE_ENROLLMENT_ROLES"):
......
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