view core/tests/test_middleware.py @ 1239:0ab9866f5da7 modernize tip

Add unittest support for paginator.
author Brian Neal <bgneal@gmail.com>
date Sun, 08 Jun 2025 18:31:09 -0500
parents f2f94d58b03b
children
line wrap: on
line source
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)