Use django-webtest for hanging tests instead of TestCase

This commit is contained in:
Basraah 2017-10-02 00:06:06 +10:00
parent 01d34b54eb
commit d7cb1a2fab
2 changed files with 23 additions and 44 deletions

View File

@ -1,13 +1,11 @@
from unittest import mock
from django.test import TestCase
from django_webtest import WebTest
from django import urls
from django.contrib.auth.models import Group, Permission
from allianceauth.tests.auth_utils import AuthUtils
class PermissionsToolViewsTestCase(TestCase):
class PermissionsToolViewsTestCase(WebTest):
def setUp(self):
self.member = AuthUtils.create_member('auth_member')
self.member.email = 'auth_member@example.com'
@ -36,8 +34,8 @@ class PermissionsToolViewsTestCase(TestCase):
AuthUtils.connect_signals()
def test_menu_item(self):
self.client.force_login(self.member)
response = self.client.get(urls.reverse('permissions_tool:overview'))
self.app.set_user(self.member)
response = self.app.get(urls.reverse('permissions_tool:overview'))
response_content = response.content.decode('utf-8')
@ -45,9 +43,9 @@ class PermissionsToolViewsTestCase(TestCase):
'<i class="fa fa-key fa-id-card"></i> Permissions Audit</a></li>', response_content)
def test_permissions_overview(self):
self.client.force_login(self.member)
self.app.set_user(self.member)
response = self.client.get(urls.reverse('permissions_tool:overview'))
response = self.app.get(urls.reverse('permissions_tool:overview'))
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed('permissions_tool/overview.html')
@ -71,9 +69,9 @@ class PermissionsToolViewsTestCase(TestCase):
def test_permissions_overview_perms(self):
# Ensure permission effectively denys access
self.client.force_login(self.no_perm_user)
self.app.set_user(self.no_perm_user)
response = self.client.get(urls.reverse('permissions_tool:overview'))
response = self.app.get(urls.reverse('permissions_tool:overview'))
self.assertEqual(response.status_code, 302)
@ -99,9 +97,9 @@ class PermissionsToolViewsTestCase(TestCase):
def test_permissions_audit_perms(self):
# Ensure permission effectively denys access
self.client.force_login(self.no_perm_user)
self.app.set_user(self.no_perm_user)
response = self.client.get(urls.reverse('permissions_tool:audit',
response = self.app.get(urls.reverse('permissions_tool:audit',
kwargs={
'app_label': self.permission.content_type.app_label,
'model': self.permission.content_type.model,

View File

@ -1,3 +1,8 @@
import json
import urllib
import datetime
import requests_mock
from django_webtest import WebTest
from unittest import mock
from django.test import TestCase, RequestFactory
@ -10,9 +15,8 @@ from .auth_hooks import DiscordService
from .models import DiscordUser
from .tasks import DiscordTasks
from .manager import DiscordOAuthManager
from . import manager
import requests_mock
import datetime
MODULE_PATH = 'allianceauth.services.modules.discord'
DEFAULT_AUTH_GROUP = 'Member'
@ -138,26 +142,26 @@ class DiscordHooksTestCase(TestCase):
# TODO: Test update nicknames
class DiscordViewsTestCase(TestCase):
class DiscordViewsTestCase(WebTest):
def setUp(self):
self.member = AuthUtils.create_member('auth_member')
add_permissions()
def login(self):
self.client.force_login(self.member)
self.app.set_user(self.member)
@mock.patch(MODULE_PATH + '.views.DiscordOAuthManager')
def test_activate(self, manager):
self.login()
manager.generate_oauth_redirect_url.return_value = '/example.com/oauth/'
response = self.client.get('/discord/activate/', follow=False)
response = self.app.get('/discord/activate/', auto_follow=False)
self.assertRedirects(response, expected_url='/example.com/oauth/', target_status_code=404)
@mock.patch(MODULE_PATH + '.tasks.DiscordOAuthManager')
def test_callback(self, manager):
self.login()
manager.add_user.return_value = '1234'
response = self.client.get('/discord/callback/', data={'code': '1234'})
response = self.app.get('/discord/callback/', params={'code': '1234'})
self.member = User.objects.get(pk=self.member.pk)
@ -172,7 +176,7 @@ class DiscordViewsTestCase(TestCase):
DiscordUser.objects.create(user=self.member, uid='12345')
manager.delete_user.return_value = True
response = self.client.get('/discord/reset/')
response = self.app.get('/discord/reset/')
self.assertRedirects(response, expected_url='/discord/activate/', target_status_code=302)
@ -182,7 +186,7 @@ class DiscordViewsTestCase(TestCase):
DiscordUser.objects.create(user=self.member, uid='12345')
manager.delete_user.return_value = True
response = self.client.get('/discord/deactivate/')
response = self.app.get('/discord/deactivate/')
self.assertTrue(manager.delete_user.called)
self.assertRedirects(response, expected_url='/services/', target_status_code=200)
@ -201,7 +205,6 @@ class DiscordManagerTestCase(TestCase):
self.assertEqual(group_name, 'GroupName_Test')
def test_generate_Bot_add_url(self):
from . import manager
bot_add_url = DiscordOAuthManager.generate_bot_add_url()
auth_url = manager.AUTH_URL
@ -209,23 +212,15 @@ class DiscordManagerTestCase(TestCase):
self.assertEqual(bot_add_url, real_bot_add_url)
def test_generate_oauth_redirect_url(self):
from . import manager
import urllib
import sys
oauth_url = DiscordOAuthManager.generate_oauth_redirect_url()
self.assertIn(manager.AUTH_URL, oauth_url)
self.assertIn('+'.join(manager.SCOPES), oauth_url)
self.assertIn(settings.DISCORD_APP_ID, oauth_url)
if sys.version_info[0] < 3:
# Py2
self.assertIn(urllib.quote_plus(settings.DISCORD_CALLBACK_URL), oauth_url)
else: # Py3
self.assertIn(urllib.parse.quote_plus(settings.DISCORD_CALLBACK_URL), oauth_url)
self.assertIn(urllib.parse.quote_plus(settings.DISCORD_CALLBACK_URL), oauth_url)
@mock.patch(MODULE_PATH + '.manager.OAuth2Session')
def test__process_callback_code(self, oauth):
from . import manager
instance = oauth.return_value
instance.fetch_token.return_value = {'access_token': 'mywonderfultoken'}
@ -245,9 +240,6 @@ class DiscordManagerTestCase(TestCase):
@mock.patch(MODULE_PATH + '.manager.DiscordOAuthManager._process_callback_code')
@requests_mock.Mocker()
def test_add_user(self, oauth_token, m):
from . import manager
import json
# Arrange
oauth_token.return_value = {'access_token': 'accesstoken'}
@ -272,9 +264,6 @@ class DiscordManagerTestCase(TestCase):
@requests_mock.Mocker()
def test_delete_user(self, m):
from . import manager
import json
# Arrange
headers = {'accept': 'application/json', 'authorization': 'Bot ' + settings.DISCORD_BOT_TOKEN}
@ -321,7 +310,6 @@ class DiscordManagerTestCase(TestCase):
@requests_mock.Mocker()
def test_update_nickname(self, m):
from . import manager
# Arrange
headers = {'content-type': 'application/json', 'authorization': 'Bot ' + settings.DISCORD_BOT_TOKEN}
@ -339,9 +327,6 @@ class DiscordManagerTestCase(TestCase):
@mock.patch(MODULE_PATH + '.manager.DiscordOAuthManager._get_groups')
@requests_mock.Mocker()
def test_update_groups(self, group_cache, m):
from . import manager
import json
# Arrange
groups = ['Member', 'Blue', 'Special Group']
@ -373,8 +358,6 @@ class DiscordManagerTestCase(TestCase):
@mock.patch(MODULE_PATH + '.manager.DiscordOAuthManager._get_groups')
@requests_mock.Mocker()
def test_update_groups_backoff(self, group_cache, djcache, m):
from . import manager
# Arrange
groups = ['Member']
group_cache.return_value = [{'id': 111, 'name': 'Member'}]
@ -408,8 +391,6 @@ class DiscordManagerTestCase(TestCase):
@mock.patch(MODULE_PATH + '.manager.DiscordOAuthManager._get_groups')
@requests_mock.Mocker()
def test_update_groups_global_backoff(self, group_cache, djcache, m):
from . import manager
# Arrange
groups = ['Member']
group_cache.return_value = [{'id': 111, 'name': 'Member'}]