From d95a06c4322732a0c2a02a9798e1b9cb0202cd66 Mon Sep 17 00:00:00 2001 From: Alisha Mohanty Date: Aug 03 2019 12:34:04 +0000 Subject: Test FASid search functionality using Mocking 1. Add pytest-mock dependency 2. Write tests for fasidCheck for all possible cases --- diff --git a/happinesspackets/messaging/tests/test_mock_fasid.py b/happinesspackets/messaging/tests/test_mock_fasid.py new file mode 100644 index 0000000..a3bc7cc --- /dev/null +++ b/happinesspackets/messaging/tests/test_mock_fasid.py @@ -0,0 +1,69 @@ +import json +from django.test.client import RequestFactory +from ..views import FasidSearchView, AccountSystem +import pytest + + +@pytest.fixture(scope="function") +def call_fasid_check_and_get_response(mocker, mock_response): + factory = RequestFactory() + request = factory.get('/send/search/', {'fasid': 'mockuser'}) + request.session = {} # hack for session middleware + mocker.patch.object(AccountSystem, 'person_by_username', return_value=mock_response) + return FasidSearchView.fasidCheck(request) + + +@pytest.fixture(scope="function") +def call_fasid_check_and_get_server_error(mocker): + factory = RequestFactory() + request = factory.get('/send/search/', {'fasid': 'mockuser'}) + request.session = {} + mocker.patch.object(AccountSystem, 'person_by_username', side_effect=KeyError('human_name')) + return FasidSearchView.fasidCheck(request) + + +@pytest.mark.parametrize("mock_response", [{'privacy': False, 'email': 'mockuser@example.com', 'human_name': 'Mock User'}]) +def test_fasid_check_returns_email_name_and_privacy(call_fasid_check_and_get_response): + + response = call_fasid_check_and_get_response + expected_response = { + 'privacy': False, + 'email': 'mockuser@example.com', + 'name': 'Mock User' + } + + assert response.status_code == 200 + assert json.loads(response.content) == expected_response + + +@pytest.mark.parametrize("mock_response", [{'privacy': True, 'email': 'mockuser@example.com', 'human_name': 'None'}]) +def test_fasid_check_returns_null_in_name_when_user_has_set_privacy_to_true(call_fasid_check_and_get_response): + + response = call_fasid_check_and_get_response + expected_response = { + 'privacy': True, + 'email': 'mockuser@example.com', + 'name': 'None' + } + + assert response.status_code == 200 + assert json.loads(response.content) == expected_response + + +@pytest.mark.parametrize("mock_response", [None]) +def test_fasid_check_returns_404_when_fas_id_does_not_exist(call_fasid_check_and_get_response): + + response = call_fasid_check_and_get_response + expected_response = {'error': 'The FAS username does not exist!'} + + assert response.status_code == 404 + assert json.loads(response.content) == expected_response + + +def test_fasid_check_returns_500_for_an_unhandled_exception(call_fasid_check_and_get_server_error): + + response = call_fasid_check_and_get_server_error + expected_response = {'error': 'Internal Server Error'} + + assert response.status_code == 500 + assert json.loads(response.content) == expected_response diff --git a/happinesspackets/messaging/views.py b/happinesspackets/messaging/views.py index 70d5aa6..e0f71ac 100644 --- a/happinesspackets/messaging/views.py +++ b/happinesspackets/messaging/views.py @@ -263,7 +263,7 @@ class FasidSearchView(): response.status_code = 404 return response if person['privacy']: - logger.warning("The privacy is set to net view the name!") + logger.warning("The privacy is set to not view the name!") user = { 'privacy': person['privacy'], 'email': person['email'], diff --git a/requirements/base.txt b/requirements/base.txt index fc62630..9225aa3 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -59,3 +59,4 @@ django-ckeditor==5.7.0 pytest-django==3.5.0 pytest==4.6.3 pytest-cov==2.7.1 +pytest-mock==1.10.4 \ No newline at end of file