stats page first implementation
This commit is contained in:
@@ -1,3 +1,61 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.core.cache import cache
|
||||
from django.test import TestCase
|
||||
from django.urls import reverse
|
||||
|
||||
# Create your tests here.
|
||||
|
||||
class ServerStatsTests(TestCase):
|
||||
def setUp(self):
|
||||
User = get_user_model()
|
||||
self.staff = User.objects.create_user(
|
||||
username='Boss', password='pw', is_staff=True,
|
||||
)
|
||||
self.normal = User.objects.create_user(username='NormalUser', password='pw')
|
||||
cache.clear()
|
||||
|
||||
def _authorized(self, user=None):
|
||||
session = self.client.session
|
||||
session['authorized'] = True
|
||||
session.save()
|
||||
if user is not None:
|
||||
self.client.force_login(user)
|
||||
return session
|
||||
|
||||
def test_staff_api_returns_snapshot(self):
|
||||
self._authorized(self.staff)
|
||||
resp = self.client.get(reverse('landing:server_stats_api'))
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
data = resp.json()
|
||||
for key in ('app', 'system', 'content', 'recent', 'generated_at'):
|
||||
self.assertIn(key, data)
|
||||
self.assertIn('users', data['content'])
|
||||
self.assertIn('versions', data['recent'])
|
||||
|
||||
def test_api_payload_cached(self):
|
||||
self._authorized(self.staff)
|
||||
first = self.client.get(reverse('landing:server_stats_api')).json()
|
||||
second = self.client.get(reverse('landing:server_stats_api')).json()
|
||||
self.assertEqual(first['generated_at'], second['generated_at'])
|
||||
|
||||
def test_non_staff_api_forbidden(self):
|
||||
self._authorized(self.normal)
|
||||
resp = self.client.get(reverse('landing:server_stats_api'))
|
||||
self.assertEqual(resp.status_code, 403)
|
||||
self.assertEqual(resp.json()['detail'], 'Only staff can view server stats.')
|
||||
|
||||
def test_page_is_staff_shell(self):
|
||||
self._authorized(self.staff)
|
||||
resp = self.client.get(reverse('landing:server_stats'))
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertContains(resp, 'stats-updated')
|
||||
self.assertContains(resp, '/api/stats/')
|
||||
|
||||
def test_page_forbidden_for_non_staff(self):
|
||||
self._authorized(self.normal)
|
||||
resp = self.client.get(reverse('landing:server_stats'))
|
||||
self.assertEqual(resp.status_code, 403)
|
||||
|
||||
def test_anonymous_redirects_to_login(self):
|
||||
self._authorized()
|
||||
resp = self.client.get(reverse('landing:server_stats'))
|
||||
self.assertEqual(resp.status_code, 302)
|
||||
|
||||
Reference in New Issue
Block a user