Commit e246eab9 by Matt Drayer

Merge pull request #32 from edx-solutions/mattdrayer/api-reorg

Application reorganization
parents 61b163ae 4cb08139
......@@ -56,7 +56,6 @@ TEST_COURSE_OVERVIEW_CONTENT = dedent("""
<div class="teacher-image">
<img src="/images/pl-faculty.png" align="left" style="margin:0 20 px 0" alt="Course Staff Image #1">
</div>
<h3>Staff Member #1</h3>
<p>Biography of instructor/staff member #1</p>
</article>
......@@ -65,10 +64,17 @@ TEST_COURSE_OVERVIEW_CONTENT = dedent("""
<div class="teacher-image">
<img src="/images/pl-faculty.png" align="left" style="margin:0 20 px 0" alt="Course Staff Image #2">
</div>
<h3>Staff Member #2</h3>
<p>Biography of instructor/staff member #2</p>
</article>
<article class="author">
<div class="author-image">
<img src="/images/pl-author.png" align="left" style="margin:0 20 px 0" alt="Author Name">
</div>
<h3>Author Name</h3>
<p>Biography of Author Name</p>
</article>
</section>
<section class="faq">
......
......@@ -411,14 +411,19 @@ class CoursesApiTests(TestCase):
self.assertIsNotNone(self._find_item_by_class(sections, 'faq'))
course_staff = self._find_item_by_class(sections, 'course-staff')
teachers = course_staff['articles']
self.assertEqual(len(teachers), 2)
self.assertEqual(teachers[0]['name'], "Staff Member #1")
self.assertEqual(teachers[0]['image_src'], "/images/pl-faculty.png")
self.assertIn("<p>Biography of instructor/staff member #1</p>", teachers[0]['bio'])
self.assertEqual(teachers[1]['name'], "Staff Member #2")
self.assertEqual(teachers[1]['image_src'], "/images/pl-faculty.png")
self.assertIn("<p>Biography of instructor/staff member #2</p>", teachers[1]['bio'])
staff = course_staff['articles']
self.assertEqual(len(staff), 3)
self.assertEqual(staff[0]['class'], "teacher")
self.assertEqual(staff[0]['name'], "Staff Member #1")
self.assertEqual(staff[0]['image_src'], "/images/pl-faculty.png")
self.assertIn("<p>Biography of instructor/staff member #1</p>", staff[0]['bio'])
self.assertEqual(staff[1]['class'], "teacher")
self.assertEqual(staff[1]['name'], "Staff Member #2")
self.assertEqual(staff[1]['image_src'], "/images/pl-faculty.png")
self.assertIn("<p>Biography of instructor/staff member #2</p>", staff[1]['bio'])
self.assertEqual(staff[2]['class'], "author")
body = staff[2]['body']
self.assertGreater(len(body), 0)
about = self._find_item_by_class(sections, 'about')
self.assertGreater(len(about['body']), 0)
......@@ -558,7 +563,7 @@ class CoursesApiTests(TestCase):
response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404)
def test_courses_users_list_get(self):
def test_courses_users_list_get_no_students(self):
test_uri = self.base_courses_uri + '/' + self.test_course_id + '/users'
response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200)
......
......@@ -6,7 +6,7 @@ from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns
from api_manager import courses_views
from api_manager.courses import views as courses_views
urlpatterns = patterns('',
url(r'/*$^', courses_views.CoursesList.as_view()),
......
......@@ -333,7 +333,7 @@ class GroupsApiTests(TestCase):
def test_group_users_list_get_invalid_group(self):
test_uri = self.base_groups_uri + '/1231241/users'
response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404)
self.assertEqual(response.status_code, 404)
def test_group_users_detail_get(self):
local_username = self.test_username + str(randint(11, 99))
......@@ -749,12 +749,22 @@ class GroupsApiTests(TestCase):
response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 409)
def test_group_courses_list_post_invalid_resources(self):
def test_group_courses_list_post_invalid_group(self):
test_uri = self.base_groups_uri + '/1239878976/courses'
data = {'course_id': "98723896"}
response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 404)
def test_group_courses_list_post_invalid_course(self):
data = {'name': self.test_group_name}
response = self.do_post(self.base_groups_uri, data)
self.assertEqual(response.status_code, 201)
group_id = response.data['id']
test_uri = response.data['uri'] + '/courses'
data = {'course_id': "987/23/896"}
response = self.do_post(test_uri, data)
self.assertEqual(response.status_code, 404)
def test_group_courses_list_get(self):
data = {'name': self.test_group_name}
response = self.do_post(self.base_groups_uri, data)
......@@ -777,7 +787,7 @@ class GroupsApiTests(TestCase):
def test_group_courses_list_get_invalid_group(self):
test_uri = self.base_groups_uri + '/1231241/courses'
response = self.do_get(test_uri)
self.assertEqual(response.status_code, 404)
self.assertEqual(response.status_code, 404)
def test_group_courses_detail_get(self):
data = {'name': self.test_group_name}
......
......@@ -3,7 +3,7 @@ from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns
from api_manager import groups_views
from api_manager.groups import views as groups_views
urlpatterns = patterns('',
url(r'/*$^', groups_views.GroupsList.as_view()),
......
......@@ -74,19 +74,13 @@ class SessionApiRateLimitingProtectionTest(TestCase):
Post the login info
"""
post_params, extra = {'username': username, 'password': password}, {}
if kwargs.get('email'):
post_params['email'] = kwargs.get('email')
if kwargs.get('first_name'):
post_params['first_name'] = kwargs.get('first_name')
if kwargs.get('last_name'):
post_params['last_name'] = kwargs.get('last_name')
headers = {'X-Edx-Api-Key': TEST_API_KEY, 'Content-Type': 'application/json'}
if kwargs.get('secure', False):
extra['wsgi.url_scheme'] = 'https'
return self.client.post(url, post_params, headers=headers, **extra)
def _assert_response(self, response, status=200, success=None, message=None):
def _assert_response(self, response, status=200, message=None):
"""
Assert that the response had status 200 and returned a valid
JSON-parseable dict.
......@@ -98,15 +92,7 @@ class SessionApiRateLimitingProtectionTest(TestCase):
value for 'message' in the JSON dict.
"""
self.assertEqual(response.status_code, status)
try:
response_dict = json.loads(response.content)
except ValueError:
self.fail("Could not parse response content as JSON: %s"
% str(response.content))
if success is not None:
self.assertEqual(response_dict['success'], success)
response_dict = json.loads(response.content)
if message is not None:
msg = ("'%s' did not contain '%s'" %
......
......@@ -170,7 +170,7 @@ class SessionApiSecurityTest(TestCase):
response, mock_audit_log = self._do_request(self.user_url, str(uuid.uuid4()), 'Test.Me64!',
email='test@edx.org', first_name='John',
last_name='Doe', secure=True,
patched_audit_log='api_manager.users_views.AUDIT_LOG')
patched_audit_log='api_manager.users.views.AUDIT_LOG')
self._assert_response(response, status=201)
self._assert_audit_log(mock_audit_log, 'info', [u'API::New account created with user-id'])
self._assert_not_in_audit_log(mock_audit_log, 'info', [u'test@edx.org'])
......@@ -223,7 +223,7 @@ class SessionApiSecurityTest(TestCase):
Make Post/Delete/Get requests with params
"""
post_params, extra, = {'username': username, 'password': password}, {}
patched_audit_log = 'api_manager.sessions_views.AUDIT_LOG'
patched_audit_log = 'api_manager.sessions.views.AUDIT_LOG'
request_method = kwargs.get('request_method', 'POST')
if kwargs.get('email'):
post_params['email'] = kwargs.get('email')
......@@ -243,12 +243,9 @@ class SessionApiSecurityTest(TestCase):
result = self.client.post(url, post_params, headers=headers, **extra)
elif request_method == 'DELETE':
result = self.client.delete(url, post_params, headers=headers, **extra)
else:
result = self.client.get(url, post_params, headers=headers, **extra)
return result, mock_audit_log
def _assert_response(self, response, status=200, success=None, message=None):
def _assert_response(self, response, status=200, message=None):
"""
Assert that the response had status 200 and returned a valid
JSON-parseable dict.
......@@ -265,14 +262,7 @@ class SessionApiSecurityTest(TestCase):
if response.status_code == 204:
return
try:
response_dict = json.loads(response.content)
except ValueError:
self.fail("Could not parse response content as JSON: %s"
% str(response.content))
if success is not None:
self.assertEqual(response_dict['success'], success)
response_dict = json.loads(response.content)
if message is not None:
msg = ("'%s' did not contain '%s'" %
......
......@@ -3,7 +3,7 @@ from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns
from api_manager import sessions_views
from api_manager.sessions import views as sessions_views
urlpatterns = patterns('',
url(r'/*$^', sessions_views.SessionsList.as_view()),
......
......@@ -19,7 +19,7 @@ from rest_framework.views import APIView
from util.bad_request_rate_limiter import BadRequestRateLimiter
from api_manager.permissions import ApiKeyHeaderPermission
from api_manager.serializers import UserSerializer
from api_manager.users.serializers import UserSerializer
from student.models import LoginFailures
AUDIT_LOG = logging.getLogger("audit")
......@@ -143,5 +143,3 @@ class SessionsDetail(APIView):
AUDIT_LOG.info(u"API::User session terminated for user-id - {0}".format(user_id))
session.flush()
return Response(response_data, status=status.HTTP_204_NO_CONTENT)
return Response(response_data, status=status.HTTP_204_NO_CONTENT)
......@@ -10,13 +10,13 @@
from django.conf.urls import include, patterns, url
from api_manager import system_views
from api_manager.system import views as system_views
urlpatterns = patterns('',
url(r'^$', system_views.ApiDetail.as_view()),
url(r'^system$', system_views.SystemDetail.as_view()),
url(r'^users/*', include('api_manager.users_urls')),
url(r'^groups/*', include('api_manager.groups_urls')),
url(r'^sessions/*', include('api_manager.sessions_urls')),
url(r'^courses/*', include('api_manager.courses_urls')),
url(r'^users/*', include('api_manager.users.urls')),
url(r'^groups/*', include('api_manager.groups.urls')),
url(r'^sessions/*', include('api_manager.sessions.urls')),
url(r'^courses/*', include('api_manager.courses.urls')),
)
......@@ -3,7 +3,7 @@ from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns
from api_manager import users_views
from api_manager.users import views as users_views
urlpatterns = patterns('',
url(r'/*$^', users_views.UsersList.as_view()),
......
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