Guest User

Untitled

a guest
Nov 1st, 2017
410
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.70 KB | None | 0 0
  1. from mock import Mock
  2. from random import randint
  3. from unittest import TestCase
  4.  
  5. from evennia.accounts.accounts import AccountSessionHandler
  6. from evennia.accounts.accounts import DefaultAccount
  7. from evennia.accounts.accounts import DefaultGuest
  8. from evennia.server.session import Session
  9. from evennia.utils import create
  10.  
  11. from django.conf import settings
  12. from django.test.utils import override_settings
  13.  
  14.  
  15. class TestAccountSessionHandler(TestCase):
  16. "Check AccountSessionHandler class"
  17.  
  18. def setUp(self):
  19. self.account = create.create_account("TestAccount%s" % randint(0, 999999), email="test@test.com", password="testpassword", typeclass=DefaultAccount)
  20. self.handler = AccountSessionHandler(self.account)
  21.  
  22. def test_get(self):
  23. "Check get method"
  24. self.assertEqual(self.handler.get(), [])
  25. self.assertEqual(self.handler.get(100), [])
  26.  
  27. import evennia.server.sessionhandler
  28.  
  29. s1 = Session()
  30. s1.logged_in = True
  31. s1.uid = self.account.uid
  32. evennia.server.sessionhandler.SESSIONS[s1.uid] = s1
  33.  
  34. s2 = Session()
  35. s2.logged_in = True
  36. s2.uid = self.account.uid + 1
  37. evennia.server.sessionhandler.SESSIONS[s2.uid] = s2
  38.  
  39. s3 = Session()
  40. s3.logged_in = False
  41. s3.uid = self.account.uid + 2
  42. evennia.server.sessionhandler.SESSIONS[s3.uid] = s3
  43.  
  44. self.assertEqual(self.handler.get(), [s1])
  45. self.assertEqual(self.handler.get(self.account.uid), [s1])
  46. self.assertEqual(self.handler.get(self.account.uid + 1), [])
  47.  
  48. def test_all(self):
  49. "Check all method"
  50. self.assertEqual(self.handler.get(), self.handler.all())
  51.  
  52. def test_count(self):
  53. "Check count method"
  54. self.assertEqual(self.handler.count(), len(self.handler.get()))
  55.  
  56.  
  57. class TestDefaultAccount(TestCase):
  58. "Check DefaultAccount class"
  59.  
  60. def setUp(self):
  61. self.s1 = Session()
  62. self.s1.sessid = 0
  63.  
  64. def test_puppet_object_no_object(self):
  65. "Check puppet_object method called with no object param"
  66.  
  67. try:
  68. DefaultAccount().puppet_object(self.s1, None)
  69. self.fail("Expected error: 'Object not found'")
  70. except RuntimeError as re:
  71. self.assertEqual("Object not found", re.message)
  72.  
  73. def test_puppet_object_no_session(self):
  74. "Check puppet_object method called with no session param"
  75.  
  76. try:
  77. DefaultAccount().puppet_object(None, Mock())
  78. self.fail("Expected error: 'Session not found'")
  79. except RuntimeError as re:
  80. self.assertEqual("Session not found", re.message)
  81.  
  82. def test_puppet_object_already_puppeting(self):
  83. "Check puppet_object method called, already puppeting this"
  84.  
  85. import evennia.server.sessionhandler
  86.  
  87. account = create.create_account("TestAccount%s" % randint(0, 999999), email="test@test.com", password="testpassword", typeclass=DefaultAccount)
  88. self.s1.uid = account.uid
  89. evennia.server.sessionhandler.SESSIONS[self.s1.uid] = self.s1
  90.  
  91. self.s1.logged_in = True
  92. self.s1.data_out = Mock(return_value=None)
  93.  
  94. obj = Mock()
  95. self.s1.puppet = obj
  96. account.puppet_object(self.s1, obj)
  97. self.s1.data_out.assert_called_with(options=None, text="You are already puppeting this object.")
  98. self.assertIsNone(obj.at_post_puppet.call_args)
  99.  
  100. def test_puppet_object_no_permission(self):
  101. "Check puppet_object method called, no permission"
  102.  
  103. import evennia.server.sessionhandler
  104.  
  105. account = create.create_account("TestAccount%s" % randint(0, 999999), email="test@test.com", password="testpassword", typeclass=DefaultAccount)
  106. self.s1.uid = account.uid
  107. evennia.server.sessionhandler.SESSIONS[self.s1.uid] = self.s1
  108.  
  109. self.s1.puppet = None
  110. self.s1.logged_in = True
  111. self.s1.data_out = Mock(return_value=None)
  112.  
  113. obj = Mock()
  114. obj.access = Mock(return_value=False)
  115.  
  116. account.puppet_object(self.s1, obj)
  117.  
  118. self.assertTrue(self.s1.data_out.call_args[1]['text'].startswith("You don't have permission to puppet"))
  119. self.assertIsNone(obj.at_post_puppet.call_args)
  120.  
  121. def test_puppet_object_joining_other_session(self):
  122. "Check puppet_object method called, joining other session"
  123.  
  124. import evennia.server.sessionhandler
  125.  
  126. account = create.create_account("TestAccount%s" % randint(0, 999999), email="test@test.com", password="testpassword", typeclass=DefaultAccount)
  127. self.s1.uid = account.uid
  128. evennia.server.sessionhandler.SESSIONS[self.s1.uid] = self.s1
  129.  
  130. self.s1.puppet = None
  131. self.s1.logged_in = True
  132. self.s1.data_out = Mock(return_value=None)
  133.  
  134. obj = Mock()
  135. obj.access = Mock(return_value=True)
  136. obj.account = account
  137.  
  138. account.puppet_object(self.s1, obj)
  139. # works because django.conf.settings.MULTISESSION_MODE is not in (1, 3)
  140. self.assertTrue(self.s1.data_out.call_args[1]['text'].endswith("from another of your sessions."))
  141. self.assertTrue(obj.at_post_puppet.call_args[1] == {})
  142.  
  143. def test_puppet_object_already_puppeted(self):
  144. "Check puppet_object method called, already puppeted"
  145.  
  146. import evennia.server.sessionhandler
  147.  
  148. account = create.create_account("TestAccount%s" % randint(0, 999999), email="test@test.com", password="testpassword", typeclass=DefaultAccount)
  149. self.s1.uid = account.uid
  150. evennia.server.sessionhandler.SESSIONS[self.s1.uid] = self.s1
  151.  
  152. self.s1.puppet = None
  153. self.s1.logged_in = True
  154. self.s1.data_out = Mock(return_value=None)
  155.  
  156. obj = Mock()
  157. obj.access = Mock(return_value=True)
  158. obj.account = Mock()
  159. obj.at_post_puppet = Mock()
  160.  
  161. account.puppet_object(self.s1, obj)
  162. self.assertTrue(self.s1.data_out.call_args[1]['text'].endswith("is already puppeted by another Account."))
  163. self.assertIsNone(obj.at_post_puppet.call_args)
  164.  
  165. def test_at_look(self):
  166. "Check at_look method called"
  167.  
  168. import evennia.server.sessionhandler
  169.  
  170. account = create.create_account("TestAccount%s" % randint(0, 999999), email="test@test.com", password="testpassword", typeclass=DefaultAccount)
  171. self.s1.uid = account.uid
  172. evennia.server.sessionhandler.SESSIONS[self.s1.uid] = self.s1
  173.  
  174. self.s1.logged_in = True
  175. self.s1.protocol_key = 'dummy protocol key'
  176. self.s1.address = 'dummy address'
  177.  
  178. account.at_look()
  179.  
  180. def test_at_look_simple_target(self):
  181. "Check at_look method called with simple target"
  182.  
  183. import evennia.server.sessionhandler
  184.  
  185. account = create.create_account("TestAccount%s" % randint(0, 999999), email="test@test.com", password="testpassword", typeclass=DefaultAccount)
  186. self.s1.uid = account.uid
  187. evennia.server.sessionhandler.SESSIONS[self.s1.uid] = self.s1
  188.  
  189. self.s1.logged_in = True
  190. self.s1.protocol_key = 'dummy protocol key'
  191. self.s1.address = 'dummy address'
  192.  
  193. target = Mock()
  194. account.at_look(target)
  195.  
  196. def test_at_look_not_superuser(self):
  197. "Check at_look method called without being superuser"
  198.  
  199. import evennia.server.sessionhandler
  200.  
  201. account = create.create_account("TestAccount%s" % randint(0, 999999), email="test@test.com", password="testpassword", typeclass=DefaultAccount)
  202. self.s1.uid = account.uid
  203. evennia.server.sessionhandler.SESSIONS[self.s1.uid] = self.s1
  204.  
  205. self.s1.logged_in = True
  206. self.s1.protocol_key = 'dummy protocol key'
  207. self.s1.address = 'dummy address'
  208. # self.s1.data_out = Mock(return_value=None)
  209.  
  210. # obj = Mock()
  211. # obj.access = Mock(return_value=True)
  212. # obj.account = Mock()
  213. # obj.at_post_puppet = Mock()
  214.  
  215. # account.puppet_object(self.s1, obj)
  216. # self.assertTrue(self.s1.data_out.call_args[1]['text'].endswith("is already puppeted by another Account."))
  217. # self.assertIsNone(obj.at_post_puppet.call_args)
  218. account.is_superuser = False
  219. character_mock = Mock()
  220.  
  221. character_sessions_mock = Mock()
  222. character_sessions_mock.all = Mock(return_value=['dummy csession'])
  223. character_mock.sessions = character_sessions_mock
  224.  
  225. character_permissions_mock = Mock()
  226. character_permissions_mock.all = Mock(return_value=['dummy permission'])
  227. character_mock.permissions = character_permissions_mock
  228.  
  229. target = [character_mock]
  230. account.at_look(target)
  231.  
  232.  
  233. class TestDefaultGuest(TestCase):
  234. "Check DefaultGuest class"
  235.  
  236. @override_settings(GUEST_ENABLED=True)
  237. def setUp(self):
  238. self.account_name = "TestAccount%s" % randint(0, 999999)
  239. self.guest = create.create_account(self.account_name, email="test@test.com", password="testpassword", typeclass=DefaultGuest)
  240.  
  241. def test_puppet_object_no_object(self):
  242. "Check at_post_login method"
  243.  
  244. self.guest._send_to_connect_channel = Mock(return_value=None)
  245. self.guest.puppet_object = Mock(return_value=None)
  246.  
  247. self.guest.at_post_login()
  248. # self.guest.at_post_disconnect()
  249.  
  250. self.guest._send_to_connect_channel.assert_called_with("|G%s connected|n" % self.account_name)
  251. self.guest.puppet_object.assert_called_with(None, None)
  252.  
  253. @override_settings(GUEST_ENABLED=True)
  254. def test_puppet_object_no_object(self):
  255. "Check at_post_login method"
  256.  
  257. self.guest._send_to_connect_channel = Mock(return_value=None)
  258. self.guest.puppet_object = Mock(return_value=None)
  259.  
  260. db = Mock()
  261. # self.guest.db = db
  262.  
  263. playable_character = Mock()
  264. playable_character.delete = Mock(return_value=None)
  265. self.guest.db._playable_characters = [playable_character]
  266.  
  267. self.guest.at_server_shutdown()
  268.  
  269. playable_character.delete.assert_called()
Add Comment
Please, Sign In to add comment