annotate accounts/tests/test_stats.py @ 1213:5e898f91fe36 modernize

Add more unit tests for accounts app.
author Brian Neal <bgneal@gmail.com>
date Sun, 09 Feb 2025 14:31:35 -0600
parents
children
rev   line source
bgneal@1213 1 """
bgneal@1213 2 Tests for accounts' stats module.
bgneal@1213 3
bgneal@1213 4 """
bgneal@1213 5 from django.contrib.auth.models import User
bgneal@1213 6 from django.test import TestCase
bgneal@1213 7 from mock import call, patch, Mock
bgneal@1213 8
bgneal@1213 9 import accounts.stats
bgneal@1213 10
bgneal@1213 11
bgneal@1213 12 class AccountStatsTestCase(TestCase):
bgneal@1213 13 fixtures = ['accounts.json']
bgneal@1213 14
bgneal@1213 15 @patch('accounts.tasks.user_stats_task')
bgneal@1213 16 def test_on_user_save_created(self, task_mock):
bgneal@1213 17 user = User.objects.get(pk=1)
bgneal@1213 18 kwargs = {
bgneal@1213 19 'created': True,
bgneal@1213 20 'instance': user,
bgneal@1213 21 }
bgneal@1213 22 mock_sender = Mock()
bgneal@1213 23 accounts.stats.on_user_save(mock_sender, **kwargs)
bgneal@1213 24 self.assertEqual(task_mock.mock_calls, [
bgneal@1213 25 call.delay(1),
bgneal@1213 26 ])
bgneal@1213 27
bgneal@1213 28 @patch('accounts.tasks.user_stats_task')
bgneal@1213 29 def test_on_user_save_updated(self, task_mock):
bgneal@1213 30 user = User.objects.get(pk=1)
bgneal@1213 31 kwargs = {
bgneal@1213 32 'created': False,
bgneal@1213 33 'instance': user,
bgneal@1213 34 }
bgneal@1213 35 mock_sender = Mock()
bgneal@1213 36 accounts.stats.on_user_save(mock_sender, **kwargs)
bgneal@1213 37 self.assertEqual(task_mock.mock_calls, [])
bgneal@1213 38
bgneal@1213 39 @patch('accounts.stats.get_redis_connection')
bgneal@1213 40 def test_update_user_status(self, connection_mock):
bgneal@1213 41 redis_mock = Mock()
bgneal@1213 42 connection_mock.return_value = redis_mock
bgneal@1213 43 redis_mock.incr.return_value = 1
bgneal@1213 44 accounts.stats.update_user_stats(1)
bgneal@1213 45 self.assertEqual(redis_mock.mock_calls, [
bgneal@1213 46 call.incr('accounts:user_count'),
bgneal@1213 47 call.set('accounts:user_count', 1),
bgneal@1213 48 call.pipeline(),
bgneal@1213 49 call.pipeline().lpush('accounts:new_users', u'Gremmie'),
bgneal@1213 50 call.pipeline().ltrim('accounts:new_users', 0, 9),
bgneal@1213 51 call.pipeline().execute(),
bgneal@1213 52 ])
bgneal@1213 53
bgneal@1213 54 @patch('accounts.stats.get_redis_connection')
bgneal@1213 55 def test_get_user_count(self, connection_mock):
bgneal@1213 56 redis_mock = Mock()
bgneal@1213 57 connection_mock.return_value = redis_mock
bgneal@1213 58 redis_mock.get.return_value = 42
bgneal@1213 59 result = accounts.stats.get_user_count()
bgneal@1213 60 self.assertEqual(result, 42)
bgneal@1213 61 self.assertEqual(redis_mock.mock_calls, [
bgneal@1213 62 call.get('accounts:user_count'),
bgneal@1213 63 ])
bgneal@1213 64
bgneal@1213 65 @patch('accounts.stats.get_redis_connection')
bgneal@1213 66 def test_get_new_users(self, connection_mock):
bgneal@1213 67 redis_mock = Mock()
bgneal@1213 68 connection_mock.return_value = redis_mock
bgneal@1213 69 redis_mock.lrange.return_value = ['Gremmie', 'pjmoto']
bgneal@1213 70 result = accounts.stats.get_new_users()
bgneal@1213 71 self.assertEqual(result, ['Gremmie', 'pjmoto'])
bgneal@1213 72 self.assertEqual(redis_mock.mock_calls, [
bgneal@1213 73 call.lrange('accounts:new_users', 0, -1),
bgneal@1213 74 ])
bgneal@1213 75
bgneal@1213 76 @patch('accounts.stats.get_redis_connection')
bgneal@1213 77 def test_get_new_users(self, connection_mock):
bgneal@1213 78 redis_mock = Mock()
bgneal@1213 79 connection_mock.return_value = redis_mock
bgneal@1213 80 redis_mock.get.return_value = 42
bgneal@1213 81 redis_mock.lrange.return_value = ['Gremmie', 'pjmoto']
bgneal@1213 82
bgneal@1213 83 result = accounts.stats.get_user_stats()
bgneal@1213 84
bgneal@1213 85 self.assertEqual(result, (42, ['Gremmie', 'pjmoto']))
bgneal@1213 86 self.assertEqual(redis_mock.mock_calls, [
bgneal@1213 87 call.get('accounts:user_count'),
bgneal@1213 88 call.lrange('accounts:new_users', 0, -1),
bgneal@1213 89 ])