mirror of
https://github.com/evennia/evennia.git
synced 2026-03-26 17:56:32 +01:00
Adds unit tests for views.
This commit is contained in:
parent
68dfaf5429
commit
4b3e9bc87e
1 changed files with 167 additions and 0 deletions
167
evennia/web/website/tests.py
Normal file
167
evennia/web/website/tests.py
Normal file
|
|
@ -0,0 +1,167 @@
|
|||
from django.conf import settings
|
||||
from django.utils.text import slugify
|
||||
from django.test import Client
|
||||
from django.urls import reverse
|
||||
from evennia.utils.test_resources import EvenniaTest
|
||||
|
||||
class EvenniaWebTest(EvenniaTest):
|
||||
|
||||
# Use the same classes the views are expecting
|
||||
account_typeclass = settings.BASE_ACCOUNT_TYPECLASS
|
||||
object_typeclass = settings.BASE_OBJECT_TYPECLASS
|
||||
character_typeclass = settings.BASE_CHARACTER_TYPECLASS
|
||||
exit_typeclass = settings.BASE_EXIT_TYPECLASS
|
||||
room_typeclass = settings.BASE_ROOM_TYPECLASS
|
||||
script_typeclass = settings.BASE_SCRIPT_TYPECLASS
|
||||
|
||||
# Default named url
|
||||
url_name = 'index'
|
||||
|
||||
# Response to expect for unauthenticated requests
|
||||
unauthenticated_response = 200
|
||||
|
||||
# Response to expect for authenticated requests
|
||||
authenticated_response = 200
|
||||
|
||||
def setUp(self):
|
||||
super(EvenniaWebTest, self).setUp()
|
||||
|
||||
# Add chars to account rosters
|
||||
self.account.db._playable_characters = [self.char1]
|
||||
self.account2.db._playable_characters = [self.char2]
|
||||
|
||||
for account in (self.account, self.account2):
|
||||
# Demote accounts to Player permissions
|
||||
account.permissions.add('Player')
|
||||
account.permissions.remove('Developer')
|
||||
|
||||
# Grant permissions to chars
|
||||
for char in account.db._playable_characters:
|
||||
char.locks.add('edit:id(%s) or perm(Admin)' % account.pk)
|
||||
char.locks.add('delete:id(%s) or perm(Admin)' % account.pk)
|
||||
char.locks.add('view:all()')
|
||||
|
||||
def test_valid_chars(self):
|
||||
"Make sure account has playable characters"
|
||||
self.assertTrue(self.char1 in self.account.db._playable_characters)
|
||||
self.assertTrue(self.char2 in self.account2.db._playable_characters)
|
||||
|
||||
def get_kwargs(self):
|
||||
return {}
|
||||
|
||||
def test_get(self):
|
||||
# Try accessing page while not logged in
|
||||
response = self.client.get(reverse(self.url_name, kwargs=self.get_kwargs()))
|
||||
self.assertEqual(response.status_code, self.unauthenticated_response)
|
||||
|
||||
def login(self):
|
||||
return self.client.login(username='TestAccount', password='testpassword')
|
||||
|
||||
def test_get_authenticated(self):
|
||||
logged_in = self.login()
|
||||
self.assertTrue(logged_in, 'Account failed to log in!')
|
||||
|
||||
# Try accessing page while logged in
|
||||
response = self.client.get(reverse(self.url_name, kwargs=self.get_kwargs()), follow=True)
|
||||
|
||||
self.assertEqual(response.status_code, self.authenticated_response)
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
class AdminTest(EvenniaWebTest):
|
||||
url_name = 'django_admin'
|
||||
unauthenticated_response = 302
|
||||
|
||||
class IndexTest(EvenniaWebTest):
|
||||
url_name = 'index'
|
||||
|
||||
class RegisterTest(EvenniaWebTest):
|
||||
url_name = 'register'
|
||||
unauthenticated_response = 302
|
||||
|
||||
class LoginTest(EvenniaWebTest):
|
||||
url_name = 'login'
|
||||
|
||||
class LogoutTest(EvenniaWebTest):
|
||||
url_name = 'logout'
|
||||
|
||||
class PasswordResetTest(EvenniaWebTest):
|
||||
url_name = 'password_change'
|
||||
unauthenticated_response = 302
|
||||
|
||||
class WebclientTest(EvenniaWebTest):
|
||||
url_name = 'webclient:index'
|
||||
|
||||
class CharacterCreateView(EvenniaWebTest):
|
||||
url_name = 'character-create'
|
||||
unauthenticated_response = 302
|
||||
|
||||
class CharacterManageView(EvenniaWebTest):
|
||||
url_name = 'character-manage'
|
||||
unauthenticated_response = 302
|
||||
|
||||
class CharacterUpdateView(EvenniaWebTest):
|
||||
url_name = 'character-update'
|
||||
unauthenticated_response = 302
|
||||
|
||||
def get_kwargs(self):
|
||||
return {
|
||||
'pk': self.char1.pk,
|
||||
'slug': slugify(self.char1.name)
|
||||
}
|
||||
|
||||
def test_valid_access(self):
|
||||
"Account1 should be able to update Account1:Char1"
|
||||
# Login account
|
||||
self.login()
|
||||
|
||||
# Try to access update page for char1
|
||||
response = self.client.get(reverse(self.url_name, kwargs=self.get_kwargs()), follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_invalid_access(self):
|
||||
"Account1 should not be able to update Account2:Char2"
|
||||
# Login account
|
||||
self.login()
|
||||
|
||||
# Try to access update page for char2
|
||||
kwargs = {
|
||||
'pk': self.char2.pk,
|
||||
'slug': slugify(self.char2.name)
|
||||
}
|
||||
response = self.client.get(reverse(self.url_name, kwargs=kwargs), follow=True)
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
class CharacterDeleteView(EvenniaWebTest):
|
||||
url_name = 'character-delete'
|
||||
unauthenticated_response = 302
|
||||
|
||||
def get_kwargs(self):
|
||||
return {
|
||||
'pk': self.char1.pk,
|
||||
'slug': slugify(self.char1.name)
|
||||
}
|
||||
|
||||
def test_valid_access(self):
|
||||
"Account1 should be able to delete Account1:Char1"
|
||||
# Login account
|
||||
self.login()
|
||||
|
||||
# Try to access delete page for char1
|
||||
response = self.client.get(reverse(self.url_name, kwargs=self.get_kwargs()), follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_invalid_access(self):
|
||||
"Account1 should not be able to delete Account2:Char2"
|
||||
# Login account
|
||||
self.login()
|
||||
|
||||
# Try to access delete page for char2
|
||||
kwargs = {
|
||||
'pk': self.char2.pk,
|
||||
'slug': slugify(self.char2.name)
|
||||
}
|
||||
response = self.client.get(reverse(self.url_name, kwargs=kwargs), follow=True)
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue