diff --git a/ucamlookup/tests.py b/ucamlookup/tests.py index 29ecb4dc7119d5a49af1be13706d8c9d40b5bc65..44a0f2ecb5b86342b0c694bc84409da1f22462dd 100644 --- a/ucamlookup/tests.py +++ b/ucamlookup/tests.py @@ -2,9 +2,11 @@ import json import sys from django.contrib.auth.models import User from django.core.exceptions import ValidationError +from mock import patch, Mock + try: from django.core.urlresolvers import reverse -except Exception: +except ImportError: from django.urls import reverse from django.test import TestCase, override_settings from ucamlookup.models import LookupGroup @@ -13,12 +15,12 @@ from ucamlookup.utils import user_in_groups, get_users_from_query, return_visibl validate_crsid_list, validate_groupid_list, get_connection -class UcamLookupTests(TestCase): +class UcamLookupOptionsTests(TestCase): @override_settings(UCAMLOOKUP_HOST="mock_host", UCAMLOOKUP_PORT=80, UCAMLOOKUP_URL_BASE="/mock", UCAMLOOKUP_CHECK_CERTS=False, UCAMLOOKUP_USERNAME="mock_username", UCAMLOOKUP_PASSWORD="mock_password") - def test_optional_settins(self): + def test_optional_settings(self): conn = get_connection() self.assertEqual(conn.host, "mock_host") self.assertEqual(conn.port, 80) @@ -27,6 +29,76 @@ class UcamLookupTests(TestCase): self.assertEqual(conn.username, "mock_username") self.assertEqual(conn.password, "mock_password") + +class UcamLookupTests(TestCase): + + def setUp(self): + # fixture for group 101888 + mock_101888 = Mock(groupid='101888', title='CS Information Systems team') + # fixture for institution UIS + mock_uis = Mock(instid='UIS') + mock_uis.name = 'University Information Services' + # fixture for institution CL + mock_cl = Mock(instid='CL') + mock_cl.name = 'Department of Computer Science and Technology' + + # patch the lookup get_connection() + self.patcher = patch('ucamlookup.utils.get_connection') + mock_get_connection = self.patcher.start() + + # a mock result returned by invoke_method() + mock_result = Mock(error=None) + + def side_effect(_, path, path_params, __, ___): + """ + Side effect method that mocks the lookup connection's invoke_method() and returns a + mock result. + """ + try: + path = path % path_params + except KeyError: + pass + + if path == 'api/v1/person/crsid/amc203': + mock_result.person.visibleName = 'Dr Abraham Martin' + elif path == 'api/v1/person/crsid/jw35': + mock_result.person.visibleName = 'John Warbrick' + elif path == 'api/v1/person/crsid/test0001': + mock_result.person.visibleName = 'Test User 1' + elif path == 'api/v1/person/crsid/amc20311': + mock_result.person = None + elif path == 'api/v1/group/101888': + mock_result.group.title = 'CS Information Systems team' + elif path == 'api/v1/group/101923': + mock_result.group.title = 'UIS Finance team' + elif path == 'api/v1/group/203840928304982': + mock_result.group = None + elif path == 'api/v1/person/search': + mock_result.people = [ + Mock(visibleName='Dr Abraham Martin', **{'identifier.value': 'amc203'}) + ] + elif path == 'api/v1/person/crsid/test0001/insts': + mock_result.institutions = [] + elif path == 'api/v1/person/crsid/amc203/insts': + mock_result.institutions = [mock_cl] + elif path == 'api/v1/inst/all-insts': + mock_result.institutions = [mock_uis, mock_cl] + elif path == 'api/v1/inst/UIS': + mock_result.institution.name = mock_uis.name + elif path == 'api/v1/group/search': + mock_result.groups = [mock_101888] + elif path == 'api/v1/person/crsid/amc203/groups': + mock_result.groups = [mock_101888] + else: + self.fail("%s hasn't been mocked" % path) + return mock_result + + # mock connection returned by get_connectgion() + mock_connection = Mock() + mock_connection.invoke_method.side_effect = side_effect + + mock_get_connection.return_value = mock_connection + def test_add_name_to_user_and_add_title_to_group(self): with self.assertRaises(User.DoesNotExist): User.objects.get(username="amc203") @@ -93,8 +165,15 @@ class UcamLookupTests(TestCase): def test_get_institutions_with_user(self): amc203 = User.objects.create_user(username="amc203") results = get_institutions(user=amc203) + self.assertEquals(("CL", "Department of Computer Science and Technology"), results[0]) self.assertIn(("UIS", "University Information Services"), results) + def test_get_institutions_with_non_existant_user(self): + all_institutions = get_institutions() + test0001 = User.objects.create_user(username="test0001") + results = get_institutions(user=test0001) + self.assertEqual(all_institutions, results) + def test_get_institution_name_by_id(self): result = get_institution_name_by_id(institution_id="UIS") self.assertEqual("University Information Services", result) @@ -104,11 +183,6 @@ class UcamLookupTests(TestCase): result = get_institution_name_by_id(institution_id="UIS", all_institutions=all_institutions) self.assertEqual("University Information Services", result) - test_user = User.objects.create_user(username="test0001") - results = get_institutions(user=test_user) - - self.assertEqual(all_institutions, results) - def test_views_without_login(self): response = self.client.get(reverse('ucamlookup_find_people'), {'query': 'amc203', 'searchId_u': '1'}) self.assertEqual(response.status_code, 302) @@ -190,3 +264,6 @@ class UcamLookupTests(TestCase): with self.assertRaises(ValidationError): validate_groupid_list(["kaskvdkam20e9mciasmdimadf"]) + + def tearDown(self): + self.patcher.stop()