mirror of
https://github.com/evennia/evennia.git
synced 2026-04-03 14:37:17 +02:00
167 lines
No EOL
5.5 KiB
Python
167 lines
No EOL
5.5 KiB
Python
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)
|
|
|