Switch to side-by-side view

--- 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')