Mercurial > public > sg101
changeset 1237:f2f94d58b03b modernize
Add unit tests for core middleware.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sun, 08 Jun 2025 15:14:11 -0500 |
parents | df3473a1ee8c |
children | db7a0f69e29a |
files | core/tests/test_middleware.py |
diffstat | 1 files changed, 136 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/tests/test_middleware.py Sun Jun 08 15:14:11 2025 -0500 @@ -0,0 +1,136 @@ +from django.conf import settings +from django.contrib.auth.models import AnonymousUser, User +from django.test import TestCase, RequestFactory +from mock import patch, Mock + +from core.middleware import InactiveUserMiddleware, WhosOnline + + +class InactiveUserMiddlewareTestCase(TestCase): + def setUp(self): + factory = RequestFactory() + self.request = factory.get('/contact') + self.user = User.objects.create_user(username='pjmoto', + email='pjmoto@pjmoto.com', + password='secret') + self.middleware = InactiveUserMiddleware() + + @patch('core.middleware.logout') + def test_does_nothing_for_unauthed_user(self, mock_logout): + self.request.user = AnonymousUser() + self.middleware.process_view(self.request, lambda x: None, None, None) + mock_logout.assert_not_called() + + @patch('core.middleware.logout') + def test_does_nothing_for_active_user(self, mock_logout): + self.user.is_active = True + self.request.user = self.user + self.middleware.process_view(self.request, lambda x: None, None, None) + mock_logout.assert_not_called() + + @patch('core.middleware.logout') + def test_logs_out_inactive_user(self, mock_logout): + self.user.is_active = False + self.request.user = self.user + self.middleware.process_view(self.request, lambda x: None, None, None) + mock_logout.assert_called_once_with(self.request) + + +class WhosOnlineMiddlewareTestCase(TestCase): + def setUp(self): + self.factory = RequestFactory() + self.request = self.factory.get('/contact') + self.user = User.objects.create_user(username='pjmoto', + email='pjmoto@pjmoto.com', + password='secret') + self.middleware = WhosOnline() + self.response = Mock() + + @patch('core.middleware.report_visitor') + @patch('core.middleware.report_user') + def test_does_nothing_when_no_user(self, mock_report_user, + mock_report_visitor): + result = self.middleware.process_response(self.request, self.response) + self.assertEqual(result, self.response) + self.response.assert_not_called() + mock_report_visitor.assert_not_called() + mock_report_user.assert_not_called() + + @patch('core.middleware.report_visitor') + @patch('core.middleware.report_user') + def test_does_nothing_when_ajax(self, mock_report_user, + mock_report_visitor): + ajax_request = self.factory.get('/', HTTP_X_REQUESTED_WITH='XMLHttpRequest') + ajax_request.user = self.user + result = self.middleware.process_response(ajax_request, self.response) + self.assertEqual(result, self.response) + self.response.assert_not_called() + mock_report_visitor.assert_not_called() + mock_report_user.assert_not_called() + + @patch('core.middleware.report_visitor') + @patch('core.middleware.report_user') + def test_does_nothing_when_user_has_cookie(self, mock_report_user, + mock_report_visitor): + self.request.user = self.user + self.request.COOKIES['sg101_online'] = 1 + result = self.middleware.process_response(self.request, self.response) + self.assertEqual(result, self.response) + self.response.assert_not_called() + mock_report_visitor.assert_not_called() + mock_report_user.assert_not_called() + + @patch('core.middleware.report_visitor') + @patch('core.middleware.report_user') + def test_reports_user(self, mock_report_user, mock_report_visitor): + self.request.user = self.user + result = self.middleware.process_response(self.request, self.response) + self.assertEqual(result, self.response) + self.response.set_cookie.assert_called_once_with( + 'sg101_online', '1', max_age=300) + mock_report_visitor.assert_not_called() + mock_report_user.assert_called_once_with('pjmoto') + + @patch('core.middleware.report_visitor') + @patch('core.middleware.report_user') + def test_does_nothing_when_visitor_no_cookies(self, mock_report_user, + mock_report_visitor): + self.request.user = AnonymousUser() + result = self.middleware.process_response(self.request, self.response) + self.assertEqual(result, self.response) + self.response.assert_not_called() + mock_report_visitor.assert_not_called() + mock_report_user.assert_not_called() + + @patch('core.middleware.report_visitor') + @patch('core.middleware.report_user') + def test_does_nothing_when_visitor_with_online_cookie( + self, mock_report_user, mock_report_visitor): + self.request.user = AnonymousUser() + self.request.COOKIES = { + settings.CSRF_COOKIE_NAME: 'deadbeef', + 'sg101_online': '1', + } + result = self.middleware.process_response(self.request, self.response) + self.assertEqual(result, self.response) + self.response.assert_not_called() + mock_report_visitor.assert_not_called() + mock_report_user.assert_not_called() + + @patch('core.middleware.get_ip') + @patch('core.middleware.report_visitor') + @patch('core.middleware.report_user') + def test_reports_visitor(self, mock_report_user, mock_report_visitor, + mock_get_ip): + self.request.user = AnonymousUser() + self.request.COOKIES = { + settings.CSRF_COOKIE_NAME: 'deadbeef', + } + mock_get_ip.return_value = '127.0.0.1' + result = self.middleware.process_response(self.request, self.response) + self.assertEqual(result, self.response) + self.response.set_cookie.assert_called_once('sg101_online', '1', + max_age=300) + mock_report_visitor.assert_called_once_with('127.0.0.1') + mock_report_user.assert_not_called() + mock_get_ip.assert_called_once_with(self.request)