From ef4220ee431de87e04f5c08753f8fcd2f8ae9a3b Mon Sep 17 00:00:00 2001 From: David Baumgold Date: Mon, 5 Aug 2013 16:54:56 -0400 Subject: [PATCH] Add unit tests to exercise common_exceptions_400 decorator --- lms/djangoapps/instructor/tests/test_api.py | 61 ++++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/lms/djangoapps/instructor/tests/test_api.py b/lms/djangoapps/instructor/tests/test_api.py index d8bea4e4c7..d546805a5e 100644 --- a/lms/djangoapps/instructor/tests/test_api.py +++ b/lms/djangoapps/instructor/tests/test_api.py @@ -1,7 +1,7 @@ """ Unit tests for instructor.api methods. """ - +import unittest import json from urllib import quote from django.test import TestCase @@ -9,6 +9,7 @@ from nose.tools import raises from mock import Mock from django.test.utils import override_settings from django.core.urlresolvers import reverse +from django.http import HttpRequest, HttpResponse from django.contrib.auth.models import User from courseware.tests.modulestore_config import TEST_DATA_MONGO_MODULESTORE @@ -21,7 +22,63 @@ from student.models import CourseEnrollment from courseware.models import StudentModule from instructor.access import allow_access -from instructor.views.api import _split_input_list, _msk_from_problem_urlname +from instructor.views.api import ( + _split_input_list, _msk_from_problem_urlname, common_exceptions_400) +from instructor_task.api_helper import AlreadyRunningError + + +@common_exceptions_400 +def view_success(request): + "A dummy view for testing that returns a simple HTTP response" + return HttpResponse('success') + + +@common_exceptions_400 +def view_user_doesnotexist(request): + "A dummy view that raises a User.DoesNotExist exception" + raise User.DoesNotExist() + + +@common_exceptions_400 +def view_alreadyrunningerror(request): + "A dummy view that raises an AlreadyRunningError exception" + raise AlreadyRunningError() + + +class TestCommonExceptions400(unittest.TestCase): + def setUp(self): + self.request = Mock(spec=HttpRequest) + self.request.META = {} + + def test_happy_path(self): + resp = view_success(self.request) + self.assertEqual(resp.status_code, 200) + + def test_user_doesnotexist(self): + self.request.is_ajax.return_value = False + resp = view_user_doesnotexist(self.request) + self.assertEqual(resp.status_code, 400) + self.assertIn("User does not exist", resp.content) + + def test_user_doesnotexist_ajax(self): + self.request.is_ajax.return_value = True + resp = view_user_doesnotexist(self.request) + self.assertEqual(resp.status_code, 400) + result = json.loads(resp.content) + self.assertIn("User does not exist", result["error"]) + + def test_alreadyrunningerror(self): + self.request.is_ajax.return_value = False + resp = view_alreadyrunningerror(self.request) + self.assertEqual(resp.status_code, 400) + self.assertIn("Task is already running", resp.content) + + def test_alreadyrunningerror_ajax(self): + self.request.is_ajax.return_value = True + resp = view_alreadyrunningerror(self.request) + self.assertEqual(resp.status_code, 400) + result = json.loads(resp.content) + self.assertIn("Task is already running", result["error"]) @override_settings(MODULESTORE=TEST_DATA_MONGO_MODULESTORE)