Mercurial > public > sg101
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') + ])