mirror of
https://github.com/evennia/evennia.git
synced 2026-04-01 05:27:17 +02:00
Work to merge develop and resolve unit tests
This commit is contained in:
parent
981119b640
commit
585cca90ae
4 changed files with 339 additions and 333 deletions
|
|
@ -115,7 +115,7 @@ class TestDefaultAccountAuth(EvenniaTest):
|
|||
|
||||
def test_throttle(self):
|
||||
"Confirm throttle activates on too many failures."
|
||||
for x in xrange(20):
|
||||
for x in range(20):
|
||||
obj, errors = DefaultAccount.authenticate(self.account.name, 'xyzzy', ip='12.24.36.48')
|
||||
self.assertFalse(obj, 'Authentication was provided a bogus password; this should NOT have returned an account!')
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,11 @@ from django.test import TestCase
|
|||
from mock import Mock, patch, mock_open
|
||||
from .dummyrunner_settings import (c_creates_button, c_creates_obj, c_digs, c_examines, c_help, c_idles, c_login,
|
||||
c_login_nodig, c_logout, c_looks, c_moves, c_moves_n, c_moves_s, c_socialize)
|
||||
import memplot
|
||||
|
||||
try:
|
||||
import memplot
|
||||
except ImportError:
|
||||
memplot = Mock()
|
||||
|
||||
|
||||
class TestDummyrunnerSettings(TestCase):
|
||||
|
|
@ -100,6 +104,8 @@ class TestMemPlot(TestCase):
|
|||
@patch.object(memplot, "open", new_callable=mock_open, create=True)
|
||||
@patch.object(memplot, "time")
|
||||
def test_memplot(self, mock_time, mocked_open, mocked_os, mocked_idmapper):
|
||||
if isinstance(memplot, Mock):
|
||||
return
|
||||
from evennia.utils.create import create_script
|
||||
mocked_idmapper.cache_size.return_value = (9, 5000)
|
||||
mock_time.time = Mock(return_value=6000.0)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ from evennia.utils import class_from_module
|
|||
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
|
||||
|
|
@ -15,62 +15,62 @@ class EvenniaWebTest(EvenniaTest):
|
|||
room_typeclass = settings.BASE_ROOM_TYPECLASS
|
||||
script_typeclass = settings.BASE_SCRIPT_TYPECLASS
|
||||
channel_typeclass = settings.BASE_CHANNEL_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
|
||||
|
|
@ -83,60 +83,60 @@ class RegisterTest(EvenniaWebTest):
|
|||
|
||||
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'
|
||||
|
||||
|
||||
@override_settings(WEBCLIENT_ENABLED=True)
|
||||
def test_get(self):
|
||||
self.authenticated_response = 200
|
||||
self.unauthenticated_response = 200
|
||||
super(WebclientTest, self).test_get()
|
||||
|
||||
|
||||
@override_settings(WEBCLIENT_ENABLED=False)
|
||||
def test_get_disabled(self):
|
||||
self.authenticated_response = 404
|
||||
self.unauthenticated_response = 404
|
||||
super(WebclientTest, self).test_get()
|
||||
|
||||
|
||||
class ChannelListTest(EvenniaWebTest):
|
||||
url_name = 'channels'
|
||||
|
||||
|
||||
class ChannelDetailTest(EvenniaWebTest):
|
||||
url_name = 'channel-detail'
|
||||
|
||||
|
||||
def setUp(self):
|
||||
super(ChannelDetailTest, self).setUp()
|
||||
|
||||
|
||||
klass = class_from_module(self.channel_typeclass)
|
||||
|
||||
|
||||
# Create a channel
|
||||
klass.create('demo')
|
||||
|
||||
|
||||
def get_kwargs(self):
|
||||
return {
|
||||
'slug': slugify('demo')
|
||||
}
|
||||
|
||||
|
||||
class CharacterCreateView(EvenniaWebTest):
|
||||
url_name = 'character-create'
|
||||
unauthenticated_response = 302
|
||||
|
||||
|
||||
@override_settings(MULTISESSION_MODE=0)
|
||||
def test_valid_access_multisession_0(self):
|
||||
"Account1 with no characters should be able to create a new one"
|
||||
self.account.db._playable_characters = []
|
||||
|
||||
|
||||
# Login account
|
||||
self.login()
|
||||
|
||||
|
||||
# Post data for a new character
|
||||
data = {
|
||||
'db_key': 'gannon',
|
||||
|
|
@ -145,17 +145,17 @@ class CharacterCreateView(EvenniaWebTest):
|
|||
|
||||
response = self.client.post(reverse(self.url_name), data=data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
# Make sure the character was actually created
|
||||
self.assertTrue(len(self.account.db._playable_characters) == 1, 'Account only has the following characters attributed to it: %s' % self.account.db._playable_characters)
|
||||
|
||||
|
||||
@override_settings(MULTISESSION_MODE=2)
|
||||
@override_settings(MAX_NR_CHARACTERS=10)
|
||||
def test_valid_access_multisession_2(self):
|
||||
"Account1 should be able to create a new character"
|
||||
# Login account
|
||||
self.login()
|
||||
|
||||
|
||||
# Post data for a new character
|
||||
data = {
|
||||
'db_key': 'gannon',
|
||||
|
|
@ -164,25 +164,25 @@ class CharacterCreateView(EvenniaWebTest):
|
|||
|
||||
response = self.client.post(reverse(self.url_name), data=data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
# Make sure the character was actually created
|
||||
self.assertTrue(len(self.account.db._playable_characters) > 1, 'Account only has the following characters attributed to it: %s' % self.account.db._playable_characters)
|
||||
|
||||
|
||||
class CharacterPuppetView(EvenniaWebTest):
|
||||
url_name = 'character-puppet'
|
||||
unauthenticated_response = 302
|
||||
|
||||
|
||||
def get_kwargs(self):
|
||||
return {
|
||||
'pk': self.char1.pk,
|
||||
'slug': slugify(self.char1.name)
|
||||
}
|
||||
|
||||
|
||||
def test_invalid_access(self):
|
||||
"Account1 should not be able to puppet Account2:Char2"
|
||||
# Login account
|
||||
self.login()
|
||||
|
||||
|
||||
# Try to access puppet page for char2
|
||||
kwargs = {
|
||||
'pk': self.char2.pk,
|
||||
|
|
@ -190,7 +190,7 @@ class CharacterPuppetView(EvenniaWebTest):
|
|||
}
|
||||
response = self.client.get(reverse(self.url_name, kwargs=kwargs), follow=True)
|
||||
self.assertTrue(response.status_code >= 400, "Invalid access should return a 4xx code-- either obj not found or permission denied! (Returned %s)" % response.status_code)
|
||||
|
||||
|
||||
class CharacterListView(EvenniaWebTest):
|
||||
url_name = 'characters'
|
||||
unauthenticated_response = 302
|
||||
|
|
@ -198,39 +198,39 @@ class CharacterListView(EvenniaWebTest):
|
|||
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)
|
||||
|
||||
|
||||
# Try to update char1 desc
|
||||
data = {'db_key': self.char1.db_key, 'desc': "Just a regular type of dude."}
|
||||
response = self.client.post(reverse(self.url_name, kwargs=self.get_kwargs()), data=data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
# Make sure the change was made successfully
|
||||
self.assertEqual(self.char1.db.desc, data['desc'])
|
||||
|
||||
|
||||
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,
|
||||
|
|
@ -238,39 +238,40 @@ class CharacterUpdateView(EvenniaWebTest):
|
|||
}
|
||||
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)
|
||||
|
||||
|
||||
# Proceed with deleting it
|
||||
data = {'value': 'yes'}
|
||||
response = self.client.post(reverse(self.url_name, kwargs=self.get_kwargs()), data=data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
# Make sure it deleted
|
||||
self.assertFalse(self.char1 in self.account.db._playable_characters, 'Char1 is still in Account playable characters list.')
|
||||
|
||||
self.assertFalse(self.char1 in self.account.db._playable_characters,
|
||||
'Char1 is still in Account playable characters list.')
|
||||
|
||||
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,
|
||||
|
|
@ -278,4 +279,3 @@ class CharacterDeleteView(EvenniaWebTest):
|
|||
}
|
||||
response = self.client.get(reverse(self.url_name, kwargs=kwargs), follow=True)
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue