changeset 1213:5e898f91fe36 modernize tip

Add more unit tests for accounts app.
author Brian Neal <bgneal@gmail.com>
date Sun, 09 Feb 2025 14:31:35 -0600
parents d18db8bfe17a
children
files accounts/tests/test_stats.py accounts/tests/test_utils.py
diffstat 2 files changed, 149 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/accounts/tests/test_stats.py	Sun Feb 09 14:31:35 2025 -0600
@@ -0,0 +1,89 @@
+"""
+Tests for accounts' stats module.
+
+"""
+from django.contrib.auth.models import User
+from django.test import TestCase
+from mock import call, patch, Mock
+
+import accounts.stats
+
+
+class AccountStatsTestCase(TestCase):
+    fixtures = ['accounts.json']
+
+    @patch('accounts.tasks.user_stats_task')
+    def test_on_user_save_created(self, task_mock):
+        user = User.objects.get(pk=1)
+        kwargs = {
+            'created': True,
+            'instance': user,
+        }
+        mock_sender = Mock()
+        accounts.stats.on_user_save(mock_sender, **kwargs)
+        self.assertEqual(task_mock.mock_calls, [
+            call.delay(1),
+        ])
+
+    @patch('accounts.tasks.user_stats_task')
+    def test_on_user_save_updated(self, task_mock):
+        user = User.objects.get(pk=1)
+        kwargs = {
+            'created': False,
+            'instance': user,
+        }
+        mock_sender = Mock()
+        accounts.stats.on_user_save(mock_sender, **kwargs)
+        self.assertEqual(task_mock.mock_calls, [])
+
+    @patch('accounts.stats.get_redis_connection')
+    def test_update_user_status(self, connection_mock):
+        redis_mock = Mock()
+        connection_mock.return_value = redis_mock
+        redis_mock.incr.return_value = 1
+        accounts.stats.update_user_stats(1)
+        self.assertEqual(redis_mock.mock_calls, [
+            call.incr('accounts:user_count'),
+            call.set('accounts:user_count', 1),
+            call.pipeline(),
+            call.pipeline().lpush('accounts:new_users', u'Gremmie'),
+            call.pipeline().ltrim('accounts:new_users', 0, 9),
+            call.pipeline().execute(),
+        ])
+
+    @patch('accounts.stats.get_redis_connection')
+    def test_get_user_count(self, connection_mock):
+        redis_mock = Mock()
+        connection_mock.return_value = redis_mock
+        redis_mock.get.return_value = 42
+        result = accounts.stats.get_user_count()
+        self.assertEqual(result, 42)
+        self.assertEqual(redis_mock.mock_calls, [
+            call.get('accounts:user_count'),
+        ])
+
+    @patch('accounts.stats.get_redis_connection')
+    def test_get_new_users(self, connection_mock):
+        redis_mock = Mock()
+        connection_mock.return_value = redis_mock
+        redis_mock.lrange.return_value = ['Gremmie', 'pjmoto']
+        result = accounts.stats.get_new_users()
+        self.assertEqual(result, ['Gremmie', 'pjmoto'])
+        self.assertEqual(redis_mock.mock_calls, [
+            call.lrange('accounts:new_users', 0, -1),
+        ])
+
+    @patch('accounts.stats.get_redis_connection')
+    def test_get_new_users(self, connection_mock):
+        redis_mock = Mock()
+        connection_mock.return_value = redis_mock
+        redis_mock.get.return_value = 42
+        redis_mock.lrange.return_value = ['Gremmie', 'pjmoto']
+
+        result = accounts.stats.get_user_stats()
+
+        self.assertEqual(result, (42, ['Gremmie', 'pjmoto']))
+        self.assertEqual(redis_mock.mock_calls, [
+            call.get('accounts:user_count'),
+            call.lrange('accounts:new_users', 0, -1),
+        ])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/accounts/tests/test_utils.py	Sun Feb 09 14:31:35 2025 -0600
@@ -0,0 +1,60 @@
+"""
+Tests for accounts.utils module.
+
+"""
+from datetime import datetime, timedelta
+
+from django.contrib.auth.models import User
+from django.test import TestCase
+from mock import call, patch, Mock
+
+from accounts.models import PendingUser
+from accounts.utils import create_new_user
+
+
+class AccountUtilsTestCase(TestCase):
+    fixtures = ['accounts.json']
+
+    def setUp(self):
+        self.pending_user = PendingUser(username='pjmoto',
+            email='pjmoto@example.com', password='password')
+        self.pending_user.save()
+
+    def assert_new_user(self):
+        pjmoto = User.objects.get(username='pjmoto')
+        self.assertEqual(pjmoto.username, 'pjmoto')
+        self.assertEqual(pjmoto.first_name, '')
+        self.assertEqual(pjmoto.last_name, '')
+        self.assertEqual(pjmoto.email, 'pjmoto@example.com')
+        self.assertFalse(pjmoto.is_staff)
+        self.assertTrue(pjmoto.is_active)
+        self.assertFalse(pjmoto.is_superuser)
+
+        now = datetime.now()
+        delta = timedelta(days=0, seconds=5)
+        self.assertTrue(now - pjmoto.last_login < delta)
+        self.assertTrue(now - pjmoto.date_joined < delta)
+
+        self.assertEqual(PendingUser.objects.count(), 0)
+
+    @patch('accounts.utils.logger')
+    def test_create_new_user_admin_activation(self, logger_mock):
+        create_new_user(self.pending_user, admin_activation=True)
+
+        self.assert_new_user()
+
+        self.assertEqual(logger_mock.mock_calls, [
+            call.info('Accounts registration confirmed by ADMIN for pjmoto')
+        ])
+
+    @patch('accounts.utils.logger')
+    def test_create_new_user_user_activation(self, logger_mock):
+        create_new_user(self.pending_user, ip='127.0.0.1',
+                        admin_activation=False)
+
+        self.assert_new_user()
+
+        self.assertEqual(logger_mock.mock_calls, [
+            call.info('Accounts registration confirmed by USER for pjmoto from '
+                      '127.0.0.1')
+        ])