zena 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/History.txt +15 -0
  2. data/app/controllers/nodes_controller.rb +13 -8
  3. data/app/models/acl.rb +19 -5
  4. data/app/models/column.rb +2 -0
  5. data/app/models/node.rb +3 -2
  6. data/app/models/site.rb +3 -0
  7. data/app/models/user.rb +1 -1
  8. data/app/views/columns/_add.html.erb +2 -2
  9. data/app/views/columns/_form.html.erb +8 -2
  10. data/app/views/columns/_li.html.erb +4 -1
  11. data/app/views/columns/index.html.erb +2 -2
  12. data/app/views/zafu/default/Node-+adminLayout.zafu +9 -1
  13. data/app/views/zafu/default/Node-admin.zafu +6 -3
  14. data/bricks/acls/lib/bricks/acls.rb +7 -7
  15. data/bricks/acls/zena/test/unit/acl_test.rb +33 -11
  16. data/bricks/math/lib/bricks/math.rb +11 -8
  17. data/bricks/worker/zena/worker +1 -0
  18. data/bricks/zena/zena/migrate/20111101103900_add_comment_to_columns.rb +9 -0
  19. data/config/gems.yml +7 -4
  20. data/lib/bricks.rb +2 -0
  21. data/lib/bricks/helper.rb +18 -0
  22. data/lib/zena.rb +1 -1
  23. data/lib/zena/console.rb +24 -0
  24. data/lib/zena/db_helper/abstract_db.rb +5 -2
  25. data/lib/zena/db_helper/mysql.rb +6 -3
  26. data/lib/zena/info.rb +1 -1
  27. data/lib/zena/init.rb +22 -0
  28. data/lib/zena/use/ajax.rb +1 -1
  29. data/lib/zena/use/forms.rb +6 -2
  30. data/lib/zena/use/i18n.rb +13 -65
  31. data/lib/zena/use/ml_index.rb +15 -0
  32. data/lib/zena/use/query_node.rb +10 -7
  33. data/lib/zena/use/rendering.rb +5 -0
  34. data/lib/zena/use/upload.rb +5 -2
  35. data/lib/zena/use/version_hash.rb +2 -0
  36. data/public/stylesheets/backend.css +6 -3
  37. data/public/stylesheets/zena.css +2 -2
  38. data/test/integration/navigation_test.rb +25 -1
  39. data/test/integration/query_node/basic.yml +6 -1
  40. data/test/integration/query_node/filters.yml +6 -1
  41. data/test/integration/query_node/idx_scope.yml +10 -0
  42. data/test/integration/zafu_compiler/ajax.yml +19 -0
  43. data/test/integration/zafu_compiler/display.yml +4 -0
  44. data/test/integration/zafu_compiler/meta.yml +8 -0
  45. data/test/selenium/Drop/drop1.rsel +6 -10
  46. data/test/selenium/Drop/drop2.rsel +6 -3
  47. data/test/selenium/Drop/drop3.rsel +19 -34
  48. data/test/selenium/Drop/drop4.rsel +25 -33
  49. data/test/sites/zena/columns.yml +4 -3
  50. data/test/unit/bricks_test.rb +24 -0
  51. data/test/unit/column_test.rb +5 -0
  52. data/test/unit/zena/use/ml_index_test.rb +26 -0
  53. data/test/unit/zena/use/version_hash_test.rb +0 -1
  54. data/zena.gemspec +28 -122
  55. metadata +85 -145
@@ -1,7 +1,22 @@
1
+ == 1.1.2 2011-11-09
2
+
3
+ * Minor changes
4
+ * Support sorting by scope index fields.
5
+ * Fixed bug in math brick (using Open4 instead of system with redirections).
6
+ * Added 'change_prop' method in console.
7
+ * Fixed a bug with 404 pages not showing in the correct language.
8
+ * Fixed a bug with properties called 'copy' not working as expected.
9
+ * Added <r:style> tag for dynamic CSS.
10
+ * Added support for 'value' in 'date' input fields.
11
+ * Added comment on property definition.
12
+ * Added 'coalesce' method in queries.
13
+ * Added 'asset_host?' in Acl queries.
14
+
1
15
  == 1.1.1 2011-07-12
2
16
 
3
17
  * Minor changes
4
18
  * Fixed scoped DOM ids in saved template.
19
+ * Cosmetic changes to backend.css (menu on the left).
5
20
 
6
21
  == 1.1.0 2011-07-11
7
22
 
@@ -35,7 +35,7 @@ class NodesController < ApplicationController
35
35
  format.xml { render :xml => @node.to_xml }
36
36
  end
37
37
  elsif base_node = visitor.node_without_secure
38
- if node = visitor.find_node(nil, base_node.zip, nil, {}, :get)
38
+ if node = visitor.find_node(nil, base_node.zip, nil, request)
39
39
  # If the visitor is acl authorized to view his own node,
40
40
  # redirect there.
41
41
  redirect_to zen_path(node)
@@ -132,13 +132,13 @@ class NodesController < ApplicationController
132
132
  # swap (a way to preview content by drag & drop)
133
133
  @node = other
134
134
  elsif params[:change] == 'receiver'
135
- attributes[:copy] = other
135
+ attributes[:_copy] = other
136
136
  @node.update_attributes_with_transformation(attributes)
137
137
  if !@node.errors.empty?
138
138
  @errors = @node.errors
139
139
  end
140
140
  else
141
- attributes[:copy] = @node
141
+ attributes[:_copy] = @node
142
142
  other.update_attributes_with_transformation(attributes)
143
143
  if !other.errors.empty?
144
144
  @errors = other.errors
@@ -223,7 +223,7 @@ class NodesController < ApplicationController
223
223
 
224
224
  begin
225
225
  # Make sure we can load parent (also enables ACL to work for us here).
226
- parent = visitor.find_node(nil, attrs.delete('parent_zip'), nil, {}, :post)
226
+ parent = visitor.find_node(nil, attrs.delete('parent_zip'), nil, request)
227
227
  @node = parent.new_child(attrs, false)
228
228
  @node.save
229
229
  rescue ActiveRecord::RecordNotFound
@@ -542,7 +542,12 @@ class NodesController < ApplicationController
542
542
  if request.env['REQUEST_PATH']
543
543
  # request.env['REQUEST_PATH'] is not set during testing (but this is
544
544
  # a temporary hack anyway)
545
- path = params[:path] = request.env['REQUEST_PATH'].split('/')[2..-1]
545
+ if path = request.env['REQUEST_PATH'].split('/')[2..-1]
546
+ params[:path] = path
547
+ else
548
+ Node.logger.warn("REQUEST_PATH: #{request.env['REQUEST_PATH'].inspect}")
549
+ path = params[:path]
550
+ end
546
551
  end
547
552
  if path.last =~ Zena::Use::Urls::ALLOWED_REGEXP
548
553
  zip = $3
@@ -558,14 +563,14 @@ class NodesController < ApplicationController
558
563
 
559
564
  # We use the visitor to find the node in order to ease implementation
560
565
  # of custom access rules (Acl).
561
- @node = visitor.find_node(path, zip, name, params, request.method)
566
+ @node = visitor.find_node(path, zip, name, request)
562
567
  else
563
568
  # bad url
564
569
  Node.logger.warn "Path #{path.last.inspect} does not match #{Zena::Use::Urls::ALLOWED_REGEXP}"
565
570
  raise ActiveRecord::RecordNotFound
566
571
  end
567
572
  elsif params[:id]
568
- @node = visitor.find_node(nil, params[:id], nil, params, request.method)
573
+ @node = visitor.find_node(nil, params[:id], nil, request)
569
574
  end
570
575
 
571
576
  if params[:link_id]
@@ -592,7 +597,7 @@ class NodesController < ApplicationController
592
597
 
593
598
  case params[:action]
594
599
  when 'index'
595
- # TODO: this should live in I18n (and maybe it is not needed anymore)
600
+ # We need this redirection here to enable document caching in another lang
596
601
  # bad prefix '/so', '/rx' or '/en?lang=fr'
597
602
  if params[:prefix] != prefix
598
603
  set_visitor_lang(params[:prefix])
@@ -15,6 +15,8 @@ class Acl < ActiveRecord::Base
15
15
  include RubyLess
16
16
 
17
17
  safe_method :params => Zena::Use::ZafuSafeDefinitions::ParamsDictionary
18
+ safe_method :asset_host? => Boolean
19
+ safe_method :visitor => User
18
20
 
19
21
  def safe_method_type(signature, receiver = nil)
20
22
  if type = super
@@ -26,8 +28,8 @@ class Acl < ActiveRecord::Base
26
28
  end
27
29
  end
28
30
 
29
- def authorize?(base_node, params)
30
- res = Node.find_by_sql(eval(make_query(base_node, params).to_s))
31
+ def authorize?(base_node, params, request)
32
+ res = Node.find_by_sql(eval(make_query(base_node, params, request).to_s))
31
33
  if res.empty?
32
34
  nil
33
35
  else
@@ -43,6 +45,16 @@ class Acl < ActiveRecord::Base
43
45
  @exec_skin ||= secure(Skin) { Skin.find(exec_skin_id) }
44
46
  end
45
47
 
48
+ # Returns true if we are on the asset host.
49
+ def asset_host?
50
+ @asset_host
51
+ end
52
+
53
+ # Make visitor public so that we can use 'visitor' in queries.
54
+ def visitor
55
+ super
56
+ end
57
+
46
58
  protected
47
59
  def set_defaults
48
60
  self.format = 'html' if format.blank?
@@ -58,12 +70,14 @@ class Acl < ActiveRecord::Base
58
70
  end
59
71
 
60
72
  def validate_acl
61
- make_query(visitor.prototype, {})
73
+ make_query(visitor.prototype)
62
74
  end
63
75
 
64
- def make_query(node, params)
76
+ def make_query(node, params = {}, request = nil)
65
77
  @node = node
66
78
  @params = params
79
+ @asset_host = request ? request.port.to_i == Zena::ASSET_PORT : false
80
+
67
81
  # We add a stupid order clause to avoid the 'order by title' thing.
68
82
  query = Node.build_query(:first, self.query + ' order by id asc',
69
83
  :node_name => '@node',
@@ -84,4 +98,4 @@ class Acl < ActiveRecord::Base
84
98
  errors.add(:query, err.message)
85
99
  nil
86
100
  end
87
- end
101
+ end
@@ -61,9 +61,11 @@ class Column < ActiveRecord::Base
61
61
  end
62
62
 
63
63
  def export
64
+ root = current_site.root_node
64
65
  {
65
66
  'ptype' => ptype,
66
67
  'index' => index,
68
+ 'comment' => root.unparse_assets(comment, root, 'comment')
67
69
  }
68
70
  end
69
71
 
@@ -846,10 +846,10 @@ class Node < ActiveRecord::Base
846
846
  res = {}
847
847
  res['parent_id'] = new_attributes[:_parent_id] if new_attributes[:_parent_id] # real id set inside zena.
848
848
 
849
+ copy_node = new_attributes.delete(:_copy)
849
850
  attributes = new_attributes.stringify_keys
850
851
 
851
- if attributes['copy'] || attributes['copy_id']
852
- copy_node = attributes.delete('copy')
852
+ if copy_node || attributes['copy_id']
853
853
  copy_node ||= Node.find_by_zip(attributes.delete('copy_id'))
854
854
  attributes = copy_node.replace_attributes_in_values(attributes)
855
855
  end
@@ -1009,6 +1009,7 @@ class Node < ActiveRecord::Base
1009
1009
  end
1010
1010
 
1011
1011
  # Parse text and replace ids '!30!' by their pseudo path '!(img/bird)!'
1012
+ # key is used in TextDocument overloaded method.
1012
1013
  def unparse_assets(text, helper, key)
1013
1014
  ZazenParser.new(text,:helper=>helper).render(:translate_ids => :relative_path, :node=>self)
1014
1015
  end
@@ -33,6 +33,9 @@ class Site < ActiveRecord::Base
33
33
  # Should be the same serialization as in Node
34
34
  include Property::Serialization::JSON
35
35
 
36
+ # TODO: can we just use MLIndex in app.rb ?
37
+ include Zena::Use::MLIndex::SiteMethods
38
+
36
39
  @@attributes_for_form = {
37
40
  :bool => %w{authentication http_auth auto_publish},
38
41
  :text => %w{name languages default_lang},
@@ -328,7 +328,7 @@ class User < ActiveRecord::Base
328
328
  end
329
329
  end
330
330
 
331
- def find_node(path, zip, name, params, method)
331
+ def find_node(path, zip, name, request)
332
332
  secure!(Node) do
333
333
  if name =~ /^\d+$/
334
334
  Node.find_by_zip(name)
@@ -1,7 +1,7 @@
1
1
  <tr id='add_column' class='btn_add'>
2
2
  <td class='add'><%= link_to_function _('btn_column_add'), "['add_column', 'add_column_form'].each(Element.toggle); $('column_name').focus();" %></td>
3
- <td class='add_column' colspan='2'></td>
3
+ <td class='add_column' colspan='3'></td>
4
4
  </tr>
5
5
  <tr id='add_column_form' style='display:none;'>
6
6
  <%= render :partial=>'columns/form' %>
7
- </tr>
7
+ </tr>
@@ -5,7 +5,7 @@
5
5
  link_to_function _('btn_x'), "['add_column', 'add_column_form'].each(Element.toggle)"
6
6
  end %>
7
7
  </td>
8
- <td class="add" colspan='2'>
8
+ <td class="add" colspan='3'>
9
9
  <div id='column_errors'><%= error_messages_for(:column, :object => @column) %></div>
10
10
  <% if @column.new_record? %>
11
11
  <%= form_remote_tag(:url => columns_path ) %>
@@ -25,6 +25,12 @@
25
25
  <td><%= text_field('column', 'name', :size=>15 ) %></td>
26
26
  <td><span class='text'><%= select_tag "column[index]", grouped_options_for_select(Column.indices_for_form, @column.index, '') %></span></td>
27
27
  </tr>
28
+ <tr>
29
+ <td class='label'><%= _("comment") %></td>
30
+ <td colspan='3'>
31
+ <%= text_area('column', 'comment', :rows => 2, :cols => 50) %>
32
+ </td>
33
+ </tr>
28
34
  <tr><td colspan='4'><p class='btn_validate'><input type='submit' value='<%= _('validate') %>'/></p></td></tr>
29
35
  </table>
30
36
  </form>
@@ -33,4 +39,4 @@
33
39
  <p class='destroy'><%= _('destroy property') %> <input type='submit' value='<%= _('destroy') %>'></p>
34
40
  </form>
35
41
  <% end -%>
36
- </td>
42
+ </td>
@@ -9,4 +9,7 @@
9
9
  <td class='index'>
10
10
  <%= li.index_name %>
11
11
  </td>
12
- </tr>
12
+ <td class='comment zazen'>
13
+ <%= li.comment ? zazen(li.comment) : '' %>
14
+ </td>
15
+ </tr>
@@ -1,11 +1,11 @@
1
1
  <h2 class='title'><%= _('properties') %></h2>
2
2
 
3
3
  <table id='column_list' class='admin' cellspacing="0">
4
- <tr><th class='nav' colspan='3'><%= will_paginate @columns %></th></tr>
4
+ <tr><th class='nav' colspan='4'><%= will_paginate @columns %></th></tr>
5
5
  <% role_id = nil; @columns.each do |col| -%>
6
6
  <% if col.role_id != role_id; role_id = col.role_id -%>
7
7
  <tr class='<%= col.role.class.to_s.underscore %>'>
8
- <th class='nav sub constant' colspan='3'>
8
+ <th class='nav sub constant' colspan='4'>
9
9
  <span class='kpath'><%= col.role.kpath %></span> <%= col.role.name %>
10
10
  </th>
11
11
  </tr>
@@ -1,6 +1,14 @@
1
1
  <r:include template='$default/Node-admin'>
2
+ <r:with part='logo'>
3
+ <r:root do='link'/>
4
+ </r:with>
5
+ <r:with part='navigation'>
6
+ <ul id='menu' do='admin_links'>
7
+ <li do='each' do='show'>x</li>
8
+ </ul>
9
+ </r:with>
2
10
  <r:with part='content' do='content_for_layout'>
3
- <r:include template='Node' part='title'/>
11
+ <h2 class='title' do='title'/>
4
12
  <div id='related' do='visitor'>
5
13
  <r:to_publish>
6
14
  <h3 class='group' do='trans'>to publish</h3>
@@ -15,16 +15,17 @@
15
15
  <r:uses_datebox/>
16
16
  </head>
17
17
  <body>
18
- <h1 id='logo' do='link'>admin_interface</h1>
18
+ <h1 id='logo'>
19
+ <r:link>admin_interface</r:link>
20
+ </h1>
19
21
  <div id='container'>
20
22
  <div id='navigation'>
21
- <ul id='menu' do='admin_links'>
23
+ <ul id='menu' do='admin_links' list='home'>
22
24
  <li do='each' do='show'>x</li>
23
25
  </ul>
24
26
  </div>
25
27
 
26
28
  <div id='content'>
27
- <h1 id='title'><r:title/> <span class='klass'>(<r:klass/>)</span></h1>
28
29
  <div id='preview'>
29
30
  <h2 class='preview' do='link' do='t'>view_live</h2>
30
31
  <r:Image?>
@@ -38,6 +39,8 @@
38
39
  </r:Image?>
39
40
  </div>
40
41
 
42
+ <h1 id='title'><r:title/> <span class='klass'>(<r:klass/>)</span></h1>
43
+
41
44
  <div id='actions'>
42
45
  <r:if test='can_edit?'>
43
46
  <label do='t("edit #{klass}")'/>
@@ -31,7 +31,7 @@ module Bricks
31
31
  end
32
32
  end
33
33
 
34
- def acl_authorized?(action, params, base_node = nil)
34
+ def acl_authorized?(action, params, request)
35
35
  node = nil
36
36
  group_ids_bak = group_ids.dup
37
37
  acls(action, params[:mode], params[:format]).each do |acl|
@@ -39,8 +39,8 @@ module Bricks
39
39
  if acl.exec_group_id
40
40
  @group_ids = group_ids_bak + [acl.exec_group_id]
41
41
  end
42
- base_node ||= self.node_without_secure
43
- if node = acl.authorize?(base_node, params)
42
+ base_node = self.node_without_secure
43
+ if node = acl.authorize?(base_node, params, request)
44
44
  self.exec_acl = acl
45
45
  # Keep loaded exec_group
46
46
  return node
@@ -73,11 +73,11 @@ module Bricks
73
73
  exec_acl ? exec_acl.exec_skin : get_skin_without_acls(node)
74
74
  end
75
75
 
76
- def find_node_with_acls(path, zip, name, params, method)
77
- find_node_without_acls(path, zip, name, params, method)
76
+ def find_node_with_acls(path, zip, name, request)
77
+ find_node_without_acls(path, zip, name, request)
78
78
  rescue ActiveRecord::RecordNotFound
79
79
  raise unless visitor.use_acls?
80
- acl_params = params.dup
80
+ acl_params = request.params.dup
81
81
  if name =~ /^\d+$/
82
82
  acl_params[:id] = name
83
83
  elsif name
@@ -87,7 +87,7 @@ module Bricks
87
87
  acl_params[:id] = zip
88
88
  end
89
89
 
90
- visitor.acl_authorized?(::Acl::ACTION_FROM_METHOD[method], acl_params)
90
+ visitor.acl_authorized?(::Acl::ACTION_FROM_METHOD[request.method], acl_params, request)
91
91
  end
92
92
  end # UserMethods
93
93
  end # Acls
@@ -5,6 +5,11 @@ class AclTest < Zena::Unit::TestCase
5
5
  def base_node
6
6
  visitor.node_without_secure
7
7
  end
8
+ MockRequest = Struct.new(:method, :params, :port)
9
+
10
+ def mock_request(method = :get, params = {}, port = 0)
11
+ MockRequest.new(method, params, port)
12
+ end
8
13
 
9
14
  context 'On a site with acl' do
10
15
  setup do
@@ -26,17 +31,17 @@ class AclTest < Zena::Unit::TestCase
26
31
 
27
32
  context 'with a matching query' do
28
33
  should 'authorize' do
29
- assert subject.authorize?(base_node, :id => nodes_zip(:queen))
34
+ assert subject.authorize?(base_node, {:id => nodes_zip(:queen)}, mock_request)
30
35
  end
31
36
 
32
37
  should 'return searched node' do
33
- assert_equal nodes_id(:queen), subject.authorize?(base_node, :id => nodes_zip(:queen)).id
38
+ assert_equal nodes_id(:queen), subject.authorize?(base_node, {:id => nodes_zip(:queen)}, mock_request).id
34
39
  end
35
40
  end # with a matching query
36
41
 
37
42
  context 'with a node outside the query' do
38
43
  should 'not authorize' do
39
- assert_nil subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)})
44
+ assert_nil subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)}, mock_request)
40
45
  end
41
46
  end # with a node outside the query
42
47
 
@@ -44,6 +49,23 @@ class AclTest < Zena::Unit::TestCase
44
49
 
45
50
  end # an acl
46
51
 
52
+ context 'saving an acl with asset_host in query' do
53
+ subject do
54
+ acls(:rap)
55
+ end
56
+
57
+ should 'validate' do
58
+ erebus_id = groups_id(:erebus)
59
+ visitor.instance_eval do
60
+ @group_ids = self.group_ids + [erebus_id]
61
+ end
62
+ assert subject.update_attributes(:query => 'nodes where 1 = #{asset_host? ? 1 : 0} in site')
63
+ assert_nil subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)}, mock_request)
64
+ assert_equal 'A plan to overrule Zeus', subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)}, mock_request(:get, {}, 80)).title
65
+ end
66
+ end # saving an acl with asset_host in query
67
+
68
+
47
69
  context 'a visitor' do
48
70
  context 'with normal access' do
49
71
  subject do
@@ -54,7 +76,7 @@ class AclTest < Zena::Unit::TestCase
54
76
  should 'find nodes' do
55
77
  assert_equal nodes(:over_zeus).id,
56
78
  subject.find_node(
57
- nil, nodes_zip(:over_zeus), nil, {}, :get
79
+ nil, nodes_zip(:over_zeus), nil, mock_request(:get)
58
80
  ).id
59
81
  end
60
82
  end # with normal access
@@ -69,13 +91,13 @@ class AclTest < Zena::Unit::TestCase
69
91
  should 'find node in acl scope' do
70
92
  assert_equal nodes(:queen).id,
71
93
  subject.find_node(
72
- nil, nodes_zip(:queen), nil, {}, :get
94
+ nil, nodes_zip(:queen), nil, mock_request(:get)
73
95
  ).id
74
96
  end
75
97
 
76
98
  should 'not find node out of acl scope' do
77
99
  assert_raise(ActiveRecord::RecordNotFound) do
78
- subject.find_node(nil, nodes_zip(:over_zeus), nil, {}, :get)
100
+ subject.find_node(nil, nodes_zip(:over_zeus), nil, mock_request(:get))
79
101
  end
80
102
  end
81
103
 
@@ -87,7 +109,7 @@ class AclTest < Zena::Unit::TestCase
87
109
  should 'try acls in turn' do
88
110
  assert_equal nodes(:wedding).id,
89
111
  subject.find_node(
90
- nil, nodes_zip(:wedding), nil, {}, :get
112
+ nil, nodes_zip(:wedding), nil, mock_request(:get)
91
113
  ).id
92
114
  end
93
115
  end # with many acls
@@ -95,13 +117,13 @@ class AclTest < Zena::Unit::TestCase
95
117
  context 'using method without acl' do
96
118
  should 'not find node out of acl scope' do
97
119
  assert_raise(ActiveRecord::RecordNotFound) do
98
- subject.find_node(nil, nodes_zip(:queen), nil, {}, :put)
120
+ subject.find_node(nil, nodes_zip(:queen), nil, mock_request(:put))
99
121
  end
100
122
  assert_raise(ActiveRecord::RecordNotFound) do
101
- subject.find_node(nil, nodes_zip(:queen), nil, {}, :delete)
123
+ subject.find_node(nil, nodes_zip(:queen), nil, mock_request(:delete))
102
124
  end
103
125
  assert_raise(ActiveRecord::RecordNotFound) do
104
- subject.find_node(nil, nodes_zip(:queen), nil, {}, :post)
126
+ subject.find_node(nil, nodes_zip(:queen), nil, mock_request(:post))
105
127
  end
106
128
  end
107
129
  end # using method without acl
@@ -115,7 +137,7 @@ class AclTest < Zena::Unit::TestCase
115
137
 
116
138
  should 'not find nodes' do
117
139
  assert_raise(ActiveRecord::RecordNotFound) do
118
- subject.find_node(nil, nodes_zip(:queen), nil, {}, :get)
140
+ subject.find_node(nil, nodes_zip(:queen), nil, mock_request(:get))
119
141
  end
120
142
  end
121
143
  end # without acl enabled