--- a/Allura/allura/tests/test_commands.py
+++ b/Allura/allura/tests/test_commands.py
@@ -1,12 +1,7 @@
-from os import path, environ
-
import mock
from nose.tools import assert_raises
-
-from tg import config
-from paste.deploy import loadapp
-from paste.script.appinstall import SetupCommand
-from pylons import c, g
+from datadiff.tools import assert_equal
+import pylons
from alluratest.controller import setup_basic_test, setup_global_objects
from allura.command import reactor, script
@@ -14,6 +9,8 @@
test_config = 'test.ini#main'
+
+class EmptyClass(object): pass
def setUp(self):
"""Method called by nose before running each test"""
@@ -40,46 +37,89 @@
ok_id = M.Project.query.get(shortname='test')._id
bad_id = None
malformed_id = 'foo'
- def test_callback(callback, msg):
- msg.data = dict(project_id=malformed_id,
- mount_point='Wiki',
- user_id='badf00d')
- callback(msg.data, msg)
- msg.data = dict(project_id=bad_id,
- mount_point='Wiki',
- user_id='badf00d')
- callback(msg.data, msg)
- msg.data = dict(project_id=ok_id,
- mount_point='Wiki',
- user_id=M.User.anonymous()._id)
- callback(msg.data, msg)
- msg.data = dict(project_id=ok_id,
- mount_point='Wiki')
- callback(msg.data, msg)
- msg.data = dict(project_id=ok_id)
- callback(msg.data, msg)
- msg.data = dict()
- callback(msg.data, msg)
cmd = reactor.ReactorCommand('reactor')
cmd.args = [ test_config ]
cmd.options = mock.Mock()
cmd.options.dry_run = True
cmd.options.proc = 1
configs = cmd.command()
- g.set_project('test')
- g.set_app('wiki')
- # a_callback = cmd.route_audit('Wiki', c.app.__class__.auditor)
- # ac_callback = cmd.route_audit('Wiki', c.app.__class__.class_auditor)
- r_callback = cmd.route_react('Wiki', c.app.__class__.reactor)
- # rc_callback = cmd.route_react('Wiki', c.app.__class__.reactor3)
+ pylons.g.set_project('test')
+ pylons.g.set_app('wiki')
+
+ react_method_vars = EmptyClass()
+ def react_method(routing_key, doc):
+ react_method_vars.routing_key = routing_key
+ react_method_vars.doc = doc
+ react_method_vars.c = EmptyClass()
+ for attr in dir(pylons.c):
+ if not attr.startswith('_'):
+ setattr(react_method_vars.c, attr, getattr(pylons.c, attr))
+ callback = cmd.route_react('Wiki', react_method)
+
msg = mock.Mock()
msg.ack = lambda:None
msg.delivery_info = dict(
routing_key='Wiki.test')
- # test_callback(a_callback, msg)
- # test_callback(ac_callback, msg)
- test_callback(r_callback, msg)
- # test_callback(rc_callback, msg)
+
+ # good message
+ msg.data = dict(project_id=ok_id,
+ mount_point='Wiki',
+ user_id=M.User.query.get(username='test-user')._id)
+ callback(msg.data, msg)
+ assert_equal(react_method_vars.routing_key, 'Wiki.test')
+ assert_equal(react_method_vars.doc, dict(project_id=ok_id, user_id=M.User.query.get(username='test-user')._id, mount_point='Wiki'))
+ assert_equal(react_method_vars.c.user.username, 'test-user')
+ assert_equal(react_method_vars.c.project.name, 'test')
+ assert not hasattr(react_method_vars.c, 'app')
+
+ # missing fields
+ msg.data = dict(mount_point='Wiki')
+ callback(msg.data, msg)
+ assert_equal(react_method_vars.routing_key, 'Wiki.test')
+ assert_equal(react_method_vars.doc, dict(mount_point='Wiki'))
+ assert not hasattr(react_method_vars.c, 'user')
+ assert not hasattr(react_method_vars.c, 'project')
+
+ msg.data = dict(project_id=malformed_id,
+ mount_point='Wiki',
+ user_id=M.User.anonymous()._id)
+ callback(msg.data, msg)
+ assert_equal(react_method_vars.routing_key, 'Wiki.test')
+ assert_equal(react_method_vars.doc, dict(project_id='foo', user_id=M.User.anonymous()._id, mount_point='Wiki'))
+ assert_equal(react_method_vars.c.project, None)
+ assert_equal(react_method_vars.c.user.username, '*anonymous')
+
+ msg.data = dict(project_id=bad_id,
+ mount_point='Wiki',
+ user_id='badf00d')
+ callback(msg.data, msg)
+ assert_equal(react_method_vars.routing_key, 'Wiki.test')
+ assert_equal(react_method_vars.doc, dict(project_id=bad_id, user_id='badf00d', mount_point='Wiki'))
+ assert_equal(react_method_vars.c.project, None)
+ assert not hasattr(react_method_vars.c, 'user')
+
+ msg.data = dict(project_id=ok_id,
+ mount_point='Wiki')
+ callback(msg.data, msg)
+ assert_equal(react_method_vars.routing_key, 'Wiki.test')
+ assert_equal(react_method_vars.doc, dict(project_id=ok_id, mount_point='Wiki'))
+ assert_equal(react_method_vars.c.project.name, 'test')
+ assert not hasattr(react_method_vars.c, 'user')
+
+ msg.data = dict(project_id=ok_id)
+ callback(msg.data, msg)
+ assert_equal(react_method_vars.routing_key, 'Wiki.test')
+ assert_equal(react_method_vars.doc, dict(project_id=ok_id))
+ assert_equal(react_method_vars.c.project.name, 'test')
+ assert not hasattr(react_method_vars.c, 'user')
+
+ msg.data = dict()
+ callback(msg.data, msg)
+ assert_equal(react_method_vars.routing_key, 'Wiki.test')
+ assert_equal(react_method_vars.doc, dict())
+ assert not hasattr(react_method_vars.c, 'user')
+ assert not hasattr(react_method_vars.c, 'project')
+ assert not hasattr(react_method_vars.c, 'app')
def test_send_message():
cmd = reactor.SendMessageCommand('send_message')