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):
|
def test_throttle(self):
|
||||||
"Confirm throttle activates on too many failures."
|
"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')
|
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!')
|
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 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,
|
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)
|
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):
|
class TestDummyrunnerSettings(TestCase):
|
||||||
|
|
@ -100,6 +104,8 @@ class TestMemPlot(TestCase):
|
||||||
@patch.object(memplot, "open", new_callable=mock_open, create=True)
|
@patch.object(memplot, "open", new_callable=mock_open, create=True)
|
||||||
@patch.object(memplot, "time")
|
@patch.object(memplot, "time")
|
||||||
def test_memplot(self, mock_time, mocked_open, mocked_os, mocked_idmapper):
|
def test_memplot(self, mock_time, mocked_open, mocked_os, mocked_idmapper):
|
||||||
|
if isinstance(memplot, Mock):
|
||||||
|
return
|
||||||
from evennia.utils.create import create_script
|
from evennia.utils.create import create_script
|
||||||
mocked_idmapper.cache_size.return_value = (9, 5000)
|
mocked_idmapper.cache_size.return_value = (9, 5000)
|
||||||
mock_time.time = Mock(return_value=6000.0)
|
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
|
from evennia.utils.test_resources import EvenniaTest
|
||||||
|
|
||||||
class EvenniaWebTest(EvenniaTest):
|
class EvenniaWebTest(EvenniaTest):
|
||||||
|
|
||||||
# Use the same classes the views are expecting
|
# Use the same classes the views are expecting
|
||||||
account_typeclass = settings.BASE_ACCOUNT_TYPECLASS
|
account_typeclass = settings.BASE_ACCOUNT_TYPECLASS
|
||||||
object_typeclass = settings.BASE_OBJECT_TYPECLASS
|
object_typeclass = settings.BASE_OBJECT_TYPECLASS
|
||||||
|
|
@ -15,62 +15,62 @@ class EvenniaWebTest(EvenniaTest):
|
||||||
room_typeclass = settings.BASE_ROOM_TYPECLASS
|
room_typeclass = settings.BASE_ROOM_TYPECLASS
|
||||||
script_typeclass = settings.BASE_SCRIPT_TYPECLASS
|
script_typeclass = settings.BASE_SCRIPT_TYPECLASS
|
||||||
channel_typeclass = settings.BASE_CHANNEL_TYPECLASS
|
channel_typeclass = settings.BASE_CHANNEL_TYPECLASS
|
||||||
|
|
||||||
# Default named url
|
# Default named url
|
||||||
url_name = 'index'
|
url_name = 'index'
|
||||||
|
|
||||||
# Response to expect for unauthenticated requests
|
# Response to expect for unauthenticated requests
|
||||||
unauthenticated_response = 200
|
unauthenticated_response = 200
|
||||||
|
|
||||||
# Response to expect for authenticated requests
|
# Response to expect for authenticated requests
|
||||||
authenticated_response = 200
|
authenticated_response = 200
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(EvenniaWebTest, self).setUp()
|
super(EvenniaWebTest, self).setUp()
|
||||||
|
|
||||||
# Add chars to account rosters
|
# Add chars to account rosters
|
||||||
self.account.db._playable_characters = [self.char1]
|
self.account.db._playable_characters = [self.char1]
|
||||||
self.account2.db._playable_characters = [self.char2]
|
self.account2.db._playable_characters = [self.char2]
|
||||||
|
|
||||||
for account in (self.account, self.account2):
|
for account in (self.account, self.account2):
|
||||||
# Demote accounts to Player permissions
|
# Demote accounts to Player permissions
|
||||||
account.permissions.add('Player')
|
account.permissions.add('Player')
|
||||||
account.permissions.remove('Developer')
|
account.permissions.remove('Developer')
|
||||||
|
|
||||||
# Grant permissions to chars
|
# Grant permissions to chars
|
||||||
for char in account.db._playable_characters:
|
for char in account.db._playable_characters:
|
||||||
char.locks.add('edit:id(%s) or perm(Admin)' % account.pk)
|
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('delete:id(%s) or perm(Admin)' % account.pk)
|
||||||
char.locks.add('view:all()')
|
char.locks.add('view:all()')
|
||||||
|
|
||||||
def test_valid_chars(self):
|
def test_valid_chars(self):
|
||||||
"Make sure account has playable characters"
|
"Make sure account has playable characters"
|
||||||
self.assertTrue(self.char1 in self.account.db._playable_characters)
|
self.assertTrue(self.char1 in self.account.db._playable_characters)
|
||||||
self.assertTrue(self.char2 in self.account2.db._playable_characters)
|
self.assertTrue(self.char2 in self.account2.db._playable_characters)
|
||||||
|
|
||||||
def get_kwargs(self):
|
def get_kwargs(self):
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
def test_get(self):
|
def test_get(self):
|
||||||
# Try accessing page while not logged in
|
# Try accessing page while not logged in
|
||||||
response = self.client.get(reverse(self.url_name, kwargs=self.get_kwargs()))
|
response = self.client.get(reverse(self.url_name, kwargs=self.get_kwargs()))
|
||||||
self.assertEqual(response.status_code, self.unauthenticated_response)
|
self.assertEqual(response.status_code, self.unauthenticated_response)
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
return self.client.login(username='TestAccount', password='testpassword')
|
return self.client.login(username='TestAccount', password='testpassword')
|
||||||
|
|
||||||
def test_get_authenticated(self):
|
def test_get_authenticated(self):
|
||||||
logged_in = self.login()
|
logged_in = self.login()
|
||||||
self.assertTrue(logged_in, 'Account failed to log in!')
|
self.assertTrue(logged_in, 'Account failed to log in!')
|
||||||
|
|
||||||
# Try accessing page while logged in
|
# Try accessing page while logged in
|
||||||
response = self.client.get(reverse(self.url_name, kwargs=self.get_kwargs()), follow=True)
|
response = self.client.get(reverse(self.url_name, kwargs=self.get_kwargs()), follow=True)
|
||||||
|
|
||||||
self.assertEqual(response.status_code, self.authenticated_response)
|
self.assertEqual(response.status_code, self.authenticated_response)
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
class AdminTest(EvenniaWebTest):
|
class AdminTest(EvenniaWebTest):
|
||||||
url_name = 'django_admin'
|
url_name = 'django_admin'
|
||||||
unauthenticated_response = 302
|
unauthenticated_response = 302
|
||||||
|
|
@ -83,60 +83,60 @@ class RegisterTest(EvenniaWebTest):
|
||||||
|
|
||||||
class LoginTest(EvenniaWebTest):
|
class LoginTest(EvenniaWebTest):
|
||||||
url_name = 'login'
|
url_name = 'login'
|
||||||
|
|
||||||
class LogoutTest(EvenniaWebTest):
|
class LogoutTest(EvenniaWebTest):
|
||||||
url_name = 'logout'
|
url_name = 'logout'
|
||||||
|
|
||||||
class PasswordResetTest(EvenniaWebTest):
|
class PasswordResetTest(EvenniaWebTest):
|
||||||
url_name = 'password_change'
|
url_name = 'password_change'
|
||||||
unauthenticated_response = 302
|
unauthenticated_response = 302
|
||||||
|
|
||||||
class WebclientTest(EvenniaWebTest):
|
class WebclientTest(EvenniaWebTest):
|
||||||
url_name = 'webclient:index'
|
url_name = 'webclient:index'
|
||||||
|
|
||||||
@override_settings(WEBCLIENT_ENABLED=True)
|
@override_settings(WEBCLIENT_ENABLED=True)
|
||||||
def test_get(self):
|
def test_get(self):
|
||||||
self.authenticated_response = 200
|
self.authenticated_response = 200
|
||||||
self.unauthenticated_response = 200
|
self.unauthenticated_response = 200
|
||||||
super(WebclientTest, self).test_get()
|
super(WebclientTest, self).test_get()
|
||||||
|
|
||||||
@override_settings(WEBCLIENT_ENABLED=False)
|
@override_settings(WEBCLIENT_ENABLED=False)
|
||||||
def test_get_disabled(self):
|
def test_get_disabled(self):
|
||||||
self.authenticated_response = 404
|
self.authenticated_response = 404
|
||||||
self.unauthenticated_response = 404
|
self.unauthenticated_response = 404
|
||||||
super(WebclientTest, self).test_get()
|
super(WebclientTest, self).test_get()
|
||||||
|
|
||||||
class ChannelListTest(EvenniaWebTest):
|
class ChannelListTest(EvenniaWebTest):
|
||||||
url_name = 'channels'
|
url_name = 'channels'
|
||||||
|
|
||||||
class ChannelDetailTest(EvenniaWebTest):
|
class ChannelDetailTest(EvenniaWebTest):
|
||||||
url_name = 'channel-detail'
|
url_name = 'channel-detail'
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(ChannelDetailTest, self).setUp()
|
super(ChannelDetailTest, self).setUp()
|
||||||
|
|
||||||
klass = class_from_module(self.channel_typeclass)
|
klass = class_from_module(self.channel_typeclass)
|
||||||
|
|
||||||
# Create a channel
|
# Create a channel
|
||||||
klass.create('demo')
|
klass.create('demo')
|
||||||
|
|
||||||
def get_kwargs(self):
|
def get_kwargs(self):
|
||||||
return {
|
return {
|
||||||
'slug': slugify('demo')
|
'slug': slugify('demo')
|
||||||
}
|
}
|
||||||
|
|
||||||
class CharacterCreateView(EvenniaWebTest):
|
class CharacterCreateView(EvenniaWebTest):
|
||||||
url_name = 'character-create'
|
url_name = 'character-create'
|
||||||
unauthenticated_response = 302
|
unauthenticated_response = 302
|
||||||
|
|
||||||
@override_settings(MULTISESSION_MODE=0)
|
@override_settings(MULTISESSION_MODE=0)
|
||||||
def test_valid_access_multisession_0(self):
|
def test_valid_access_multisession_0(self):
|
||||||
"Account1 with no characters should be able to create a new one"
|
"Account1 with no characters should be able to create a new one"
|
||||||
self.account.db._playable_characters = []
|
self.account.db._playable_characters = []
|
||||||
|
|
||||||
# Login account
|
# Login account
|
||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
# Post data for a new character
|
# Post data for a new character
|
||||||
data = {
|
data = {
|
||||||
'db_key': 'gannon',
|
'db_key': 'gannon',
|
||||||
|
|
@ -145,17 +145,17 @@ class CharacterCreateView(EvenniaWebTest):
|
||||||
|
|
||||||
response = self.client.post(reverse(self.url_name), data=data, follow=True)
|
response = self.client.post(reverse(self.url_name), data=data, follow=True)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
# Make sure the character was actually created
|
# 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)
|
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(MULTISESSION_MODE=2)
|
||||||
@override_settings(MAX_NR_CHARACTERS=10)
|
@override_settings(MAX_NR_CHARACTERS=10)
|
||||||
def test_valid_access_multisession_2(self):
|
def test_valid_access_multisession_2(self):
|
||||||
"Account1 should be able to create a new character"
|
"Account1 should be able to create a new character"
|
||||||
# Login account
|
# Login account
|
||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
# Post data for a new character
|
# Post data for a new character
|
||||||
data = {
|
data = {
|
||||||
'db_key': 'gannon',
|
'db_key': 'gannon',
|
||||||
|
|
@ -164,25 +164,25 @@ class CharacterCreateView(EvenniaWebTest):
|
||||||
|
|
||||||
response = self.client.post(reverse(self.url_name), data=data, follow=True)
|
response = self.client.post(reverse(self.url_name), data=data, follow=True)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
# Make sure the character was actually created
|
# 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)
|
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):
|
class CharacterPuppetView(EvenniaWebTest):
|
||||||
url_name = 'character-puppet'
|
url_name = 'character-puppet'
|
||||||
unauthenticated_response = 302
|
unauthenticated_response = 302
|
||||||
|
|
||||||
def get_kwargs(self):
|
def get_kwargs(self):
|
||||||
return {
|
return {
|
||||||
'pk': self.char1.pk,
|
'pk': self.char1.pk,
|
||||||
'slug': slugify(self.char1.name)
|
'slug': slugify(self.char1.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
def test_invalid_access(self):
|
def test_invalid_access(self):
|
||||||
"Account1 should not be able to puppet Account2:Char2"
|
"Account1 should not be able to puppet Account2:Char2"
|
||||||
# Login account
|
# Login account
|
||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
# Try to access puppet page for char2
|
# Try to access puppet page for char2
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'pk': self.char2.pk,
|
'pk': self.char2.pk,
|
||||||
|
|
@ -190,7 +190,7 @@ class CharacterPuppetView(EvenniaWebTest):
|
||||||
}
|
}
|
||||||
response = self.client.get(reverse(self.url_name, kwargs=kwargs), follow=True)
|
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)
|
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):
|
class CharacterListView(EvenniaWebTest):
|
||||||
url_name = 'characters'
|
url_name = 'characters'
|
||||||
unauthenticated_response = 302
|
unauthenticated_response = 302
|
||||||
|
|
@ -198,39 +198,39 @@ class CharacterListView(EvenniaWebTest):
|
||||||
class CharacterManageView(EvenniaWebTest):
|
class CharacterManageView(EvenniaWebTest):
|
||||||
url_name = 'character-manage'
|
url_name = 'character-manage'
|
||||||
unauthenticated_response = 302
|
unauthenticated_response = 302
|
||||||
|
|
||||||
class CharacterUpdateView(EvenniaWebTest):
|
class CharacterUpdateView(EvenniaWebTest):
|
||||||
url_name = 'character-update'
|
url_name = 'character-update'
|
||||||
unauthenticated_response = 302
|
unauthenticated_response = 302
|
||||||
|
|
||||||
def get_kwargs(self):
|
def get_kwargs(self):
|
||||||
return {
|
return {
|
||||||
'pk': self.char1.pk,
|
'pk': self.char1.pk,
|
||||||
'slug': slugify(self.char1.name)
|
'slug': slugify(self.char1.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
def test_valid_access(self):
|
def test_valid_access(self):
|
||||||
"Account1 should be able to update Account1:Char1"
|
"Account1 should be able to update Account1:Char1"
|
||||||
# Login account
|
# Login account
|
||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
# Try to access update page for char1
|
# Try to access update page for char1
|
||||||
response = self.client.get(reverse(self.url_name, kwargs=self.get_kwargs()), follow=True)
|
response = self.client.get(reverse(self.url_name, kwargs=self.get_kwargs()), follow=True)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
# Try to update char1 desc
|
# Try to update char1 desc
|
||||||
data = {'db_key': self.char1.db_key, 'desc': "Just a regular type of dude."}
|
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)
|
response = self.client.post(reverse(self.url_name, kwargs=self.get_kwargs()), data=data, follow=True)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
# Make sure the change was made successfully
|
# Make sure the change was made successfully
|
||||||
self.assertEqual(self.char1.db.desc, data['desc'])
|
self.assertEqual(self.char1.db.desc, data['desc'])
|
||||||
|
|
||||||
def test_invalid_access(self):
|
def test_invalid_access(self):
|
||||||
"Account1 should not be able to update Account2:Char2"
|
"Account1 should not be able to update Account2:Char2"
|
||||||
# Login account
|
# Login account
|
||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
# Try to access update page for char2
|
# Try to access update page for char2
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'pk': self.char2.pk,
|
'pk': self.char2.pk,
|
||||||
|
|
@ -238,39 +238,40 @@ class CharacterUpdateView(EvenniaWebTest):
|
||||||
}
|
}
|
||||||
response = self.client.get(reverse(self.url_name, kwargs=kwargs), follow=True)
|
response = self.client.get(reverse(self.url_name, kwargs=kwargs), follow=True)
|
||||||
self.assertEqual(response.status_code, 403)
|
self.assertEqual(response.status_code, 403)
|
||||||
|
|
||||||
class CharacterDeleteView(EvenniaWebTest):
|
class CharacterDeleteView(EvenniaWebTest):
|
||||||
url_name = 'character-delete'
|
url_name = 'character-delete'
|
||||||
unauthenticated_response = 302
|
unauthenticated_response = 302
|
||||||
|
|
||||||
def get_kwargs(self):
|
def get_kwargs(self):
|
||||||
return {
|
return {
|
||||||
'pk': self.char1.pk,
|
'pk': self.char1.pk,
|
||||||
'slug': slugify(self.char1.name)
|
'slug': slugify(self.char1.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
def test_valid_access(self):
|
def test_valid_access(self):
|
||||||
"Account1 should be able to delete Account1:Char1"
|
"Account1 should be able to delete Account1:Char1"
|
||||||
# Login account
|
# Login account
|
||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
# Try to access delete page for char1
|
# Try to access delete page for char1
|
||||||
response = self.client.get(reverse(self.url_name, kwargs=self.get_kwargs()), follow=True)
|
response = self.client.get(reverse(self.url_name, kwargs=self.get_kwargs()), follow=True)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
# Proceed with deleting it
|
# Proceed with deleting it
|
||||||
data = {'value': 'yes'}
|
data = {'value': 'yes'}
|
||||||
response = self.client.post(reverse(self.url_name, kwargs=self.get_kwargs()), data=data, follow=True)
|
response = self.client.post(reverse(self.url_name, kwargs=self.get_kwargs()), data=data, follow=True)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
# Make sure it deleted
|
# 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):
|
def test_invalid_access(self):
|
||||||
"Account1 should not be able to delete Account2:Char2"
|
"Account1 should not be able to delete Account2:Char2"
|
||||||
# Login account
|
# Login account
|
||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
# Try to access delete page for char2
|
# Try to access delete page for char2
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'pk': self.char2.pk,
|
'pk': self.char2.pk,
|
||||||
|
|
@ -278,4 +279,3 @@ class CharacterDeleteView(EvenniaWebTest):
|
||||||
}
|
}
|
||||||
response = self.client.get(reverse(self.url_name, kwargs=kwargs), follow=True)
|
response = self.client.get(reverse(self.url_name, kwargs=kwargs), follow=True)
|
||||||
self.assertEqual(response.status_code, 403)
|
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