zena 1.2.4 → 1.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +18 -0
- data/app/controllers/nodes_controller.rb +11 -6
- data/app/controllers/sites_controller.rb +3 -2
- data/app/controllers/user_sessions_controller.rb +1 -1
- data/app/controllers/virtual_classes_controller.rb +3 -2
- data/app/models/document.rb +2 -2
- data/app/models/node.rb +6 -1
- data/app/models/note.rb +3 -27
- data/app/models/role.rb +11 -5
- data/app/models/site.rb +140 -43
- data/app/models/string_hash.rb +2 -0
- data/app/models/user.rb +9 -4
- data/app/models/user_session.rb +1 -1
- data/app/models/virtual_class.rb +49 -18
- data/app/views/sites/_form.erb +7 -4
- data/app/views/sites/_li.erb +15 -9
- data/app/views/users/_li.rhtml +3 -0
- data/app/views/users/index.rhtml +1 -1
- data/app/views/virtual_classes/_form.erb +1 -1
- data/bricks/acls/zena/init.rb +1 -2
- data/bricks/acls/zena/test/sites/erebus/roles.yml +4 -0
- data/bricks/activity/lib/bricks/activity.rb +24 -0
- data/bricks/activity/zena/migrate/20130711135905_add_activity_to_user.rb +9 -0
- data/bricks/activity/zena/test/integration/activity_integration_test.rb +29 -0
- data/bricks/captcha/zena/init.rb +0 -3
- data/bricks/fs_skin/lib/bricks/fs_skin.rb +3 -3
- data/bricks/fs_skin/zena/skins/blog/Node.zafu +1 -1
- data/bricks/fs_skin/zena/tasks.rb +2 -2
- data/bricks/fs_skin/zena/test/integration/fs_skin_integration_test.rb +2 -2
- data/bricks/fs_skin/zena/test/unit/fs_skin_test.rb +1 -1
- data/bricks/math/zena/init.rb +0 -3
- data/bricks/pdf/zena/init.rb +1 -5
- data/bricks/worker/zena/init.rb +0 -2
- data/bricks/zena/zena/migrate/20130617164527_add_master_id_to_site.rb +13 -0
- data/bricks/zena/zena/migrate/20130712081512_alter_login_users.rb +9 -0
- data/config/bricks.yml +4 -1
- data/lib/bricks/loader.rb +17 -9
- data/lib/tasks/zena.rake +40 -5
- data/lib/zafu/process/ruby_less_processing.rb +3 -5
- data/lib/zena.rb +2 -0
- data/lib/zena/acts/secure.rb +11 -2
- data/lib/zena/console.rb +5 -4
- data/lib/zena/core_ext/string.rb +2 -2
- data/lib/zena/deploy.rb +22 -6
- data/lib/zena/deploy/logrotate_app.rhtml +10 -7
- data/lib/zena/deploy/logrotate_host.rhtml +21 -26
- data/lib/zena/deploy/vhost.rhtml +3 -3
- data/lib/zena/foxy_parser.rb +1 -1
- data/lib/zena/info.rb +1 -1
- data/lib/zena/site_worker.rb +2 -2
- data/lib/zena/use.rb +0 -1
- data/lib/zena/use/ancestry.rb +1 -1
- data/lib/zena/use/authlogic.rb +2 -1
- data/lib/zena/use/display.rb +6 -0
- data/lib/zena/use/query_builder.rb +1 -1
- data/lib/zena/use/query_node.rb +3 -3
- data/lib/zena/use/rendering.rb +47 -13
- data/lib/zena/use/test_helper.rb +1 -1
- data/lib/zena/use/urls.rb +6 -104
- data/lib/zena/use/zafu_safe_definitions.rb +9 -4
- data/lib/zena/use/zafu_templates.rb +1 -0
- data/locale/app.pot +4 -0
- data/locale/de/LC_MESSAGES/zena.mo +0 -0
- data/locale/de/zena.po +6 -2
- data/locale/en/LC_MESSAGES/zena.mo +0 -0
- data/locale/en/zena.po +6 -2
- data/locale/fr/LC_MESSAGES/zena.mo +0 -0
- data/locale/fr/zena.po +5 -1
- data/locale/it/LC_MESSAGES/zena.mo +0 -0
- data/locale/it/zena.po +6 -2
- data/locale/zena.pot +4 -0
- data/test/functional/nodes_controller_test.rb +2 -133
- data/test/functional/sites_controller_test.rb +1 -1
- data/test/integration/multiple_hosts_test.rb +2 -1
- data/test/integration/navigation_test.rb +37 -0
- data/test/integration/query_node/basic.yml +1 -1
- data/test/integration/zafu_compiler/ajax.yml +7 -0
- data/test/integration/zafu_compiler/comments.yml +2 -2
- data/test/integration/zafu_compiler/context.yml +6 -2
- data/test/integration/zafu_compiler/display.yml +16 -4
- data/test/integration/zafu_compiler/forms.yml +1 -0
- data/test/integration/zafu_compiler/query.yml +7 -1
- data/test/integration/zafu_compiler/relations.yml +12 -7
- data/test/integration/zafu_compiler/roles.yml +3 -3
- data/test/integration/zafu_compiler/rubyless.yml +1 -2
- data/test/integration/zafu_compiler/safe_definitions.yml +5 -0
- data/test/sites/complex/roles.yml +1 -1
- data/test/sites/ocean/roles.yml +4 -0
- data/test/sites/zena/columns.yml +3 -1
- data/test/sites/zena/roles.yml +5 -1
- data/test/sites/zena/sites.yml +22 -0
- data/test/unit/document_test.rb +14 -0
- data/test/unit/node_test.rb +14 -0
- data/test/unit/role_test.rb +19 -4
- data/test/unit/site_test.rb +67 -0
- data/test/unit/user_test.rb +20 -0
- data/test/unit/virtual_class_test.rb +116 -11
- data/test/unit/zena/use/rendering_test.rb +1 -1
- data/zena.gemspec +67 -66
- metadata +126 -125
- data/bricks/fs_skin/zena/init.rb +0 -1
- data/bricks/grid/zena/init.rb +0 -4
- data/bricks/single/zena/init.rb +0 -1
- data/bricks/spreadsheet/zena/init.rb +0 -3
data/test/sites/ocean/roles.yml
CHANGED
data/test/sites/zena/columns.yml
CHANGED
data/test/sites/zena/roles.yml
CHANGED
data/test/sites/zena/sites.yml
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
zena:
|
2
2
|
host: test.host
|
3
|
+
orphan: zena
|
3
4
|
root: zena
|
4
5
|
anon: anon
|
5
6
|
public_group: public
|
@@ -12,6 +13,27 @@ zena:
|
|
12
13
|
formats_updated_at: 2008-05-01
|
13
14
|
api_group: managers
|
14
15
|
prop:
|
16
|
+
recaptcha_pub: 'pub'
|
17
|
+
recaptcha_priv: 'priv'
|
18
|
+
usr_prototype_attributes: "{'klass' => 'Contact', 'address' => 'Iping', 'name' => login}"
|
19
|
+
|
20
|
+
alias:
|
21
|
+
master: zena
|
22
|
+
host: alias.host
|
23
|
+
orphan: zena
|
24
|
+
root: wiki
|
25
|
+
anon: anon
|
26
|
+
public_group: public
|
27
|
+
site_group: workers
|
28
|
+
authentication: no
|
29
|
+
auto_publish: no
|
30
|
+
redit_time: 7200
|
31
|
+
languages:
|
32
|
+
default_lang:
|
33
|
+
formats_updated_at:
|
34
|
+
api_group:
|
35
|
+
prop:
|
36
|
+
ssl_on_auth: true
|
15
37
|
recaptcha_pub: 'pub'
|
16
38
|
recaptcha_priv: 'priv'
|
17
39
|
usr_prototype_attributes: "{'klass' => 'Contact', 'address' => 'Iping', 'name' => login}"
|
data/test/unit/document_test.rb
CHANGED
@@ -80,6 +80,20 @@ class DocumentTest < Zena::Unit::TestCase
|
|
80
80
|
assert_equal 'water-1', subject.title
|
81
81
|
end
|
82
82
|
end # with same title
|
83
|
+
|
84
|
+
context 'with a sub-class of Image' do
|
85
|
+
setup do
|
86
|
+
login(:lion)
|
87
|
+
vclass = secure(VirtualClass) { VirtualClass.create(:superclass => 'Image', :name => 'Video', :create_group_id => groups_id(:public))}
|
88
|
+
end
|
89
|
+
|
90
|
+
should 'create a document' do
|
91
|
+
assert_difference('Node.count', 1) do
|
92
|
+
assert !subject.new_record?
|
93
|
+
assert_equal Document, subject.class
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
83
97
|
|
84
98
|
context 'without a file' do
|
85
99
|
subject do
|
data/test/unit/node_test.rb
CHANGED
@@ -140,7 +140,21 @@ class NodeTest < Zena::Unit::TestCase
|
|
140
140
|
end
|
141
141
|
end
|
142
142
|
end # setting with transformations
|
143
|
+
|
144
|
+
context 'saving multiple times' do
|
145
|
+
subject do
|
146
|
+
secure(Node) { nodes(:status) }
|
147
|
+
end
|
143
148
|
|
149
|
+
should 'not create multiple versions' do
|
150
|
+
assert_difference('Version.count', 1) do
|
151
|
+
subject.update_attributes_with_transformation(:title => 'One')
|
152
|
+
assert subject.update_attributes_with_transformation(:reference_id => '33')
|
153
|
+
assert subject.update_attributes_with_transformation(:reference_id => '34')
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
144
158
|
end # on a node with write access
|
145
159
|
end # A logged in user
|
146
160
|
|
data/test/unit/role_test.rb
CHANGED
@@ -250,14 +250,11 @@ class RoleTest < Zena::Unit::TestCase
|
|
250
250
|
end
|
251
251
|
|
252
252
|
context 'with invalid index' do
|
253
|
-
should 'raise errors' do
|
253
|
+
should 'raise index errors' do
|
254
254
|
e = nil
|
255
255
|
assert_difference('Column.count', 0) do
|
256
256
|
e = assert_raise(ActiveRecord::RecordInvalid) do
|
257
257
|
subject.import_columns({
|
258
|
-
'one' => {
|
259
|
-
'ptype' => 'stringbar',
|
260
|
-
},
|
261
258
|
'two' => {
|
262
259
|
'ptype' => 'integer',
|
263
260
|
'index' => 'bad',
|
@@ -271,6 +268,24 @@ class RoleTest < Zena::Unit::TestCase
|
|
271
268
|
end
|
272
269
|
end # with invalid index
|
273
270
|
|
271
|
+
context 'with invalid ptype' do
|
272
|
+
should 'raise index errors' do
|
273
|
+
e = nil
|
274
|
+
assert_difference('Column.count', 0) do
|
275
|
+
e = assert_raise(ActiveRecord::RecordInvalid) do
|
276
|
+
subject.import_columns({
|
277
|
+
'one' => {
|
278
|
+
'ptype' => 'stringbar',
|
279
|
+
},
|
280
|
+
})
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
r = e.record
|
285
|
+
assert_equal "Column 'one' Validation failed: Ptype invalid", "#{r.class} '#{r.name}' #{e.message}"
|
286
|
+
end
|
287
|
+
end # with invalid ptype
|
288
|
+
|
274
289
|
context 'with invalid column name' do
|
275
290
|
should 'raise errors' do
|
276
291
|
e = nil
|
data/test/unit/site_test.rb
CHANGED
@@ -362,7 +362,74 @@ class SiteTest < Zena::Unit::TestCase
|
|
362
362
|
end
|
363
363
|
end
|
364
364
|
|
365
|
+
context 'A site alias' do
|
366
|
+
subject do
|
367
|
+
Site.find_by_host('alias.host')
|
368
|
+
end
|
369
|
+
|
370
|
+
should 'return master' do
|
371
|
+
assert_equal sites_id('zena'), subject.id
|
372
|
+
end
|
373
|
+
|
374
|
+
should 'have alias' do
|
375
|
+
assert_equal sites_id('alias'), subject.alias.id
|
376
|
+
end
|
377
|
+
|
378
|
+
should 'return alias host' do
|
379
|
+
assert_equal 'alias.host', subject.host
|
380
|
+
end
|
381
|
+
|
382
|
+
should 'return master zafu path' do
|
383
|
+
assert_equal '/test.host/zafu', subject.zafu_path
|
384
|
+
end
|
385
|
+
|
386
|
+
should 'return master data path' do
|
387
|
+
assert_equal '/test.host/data', subject.data_path
|
388
|
+
end
|
389
|
+
|
390
|
+
should 'return alias public path' do
|
391
|
+
assert_equal '/alias.host/public', subject.public_path
|
392
|
+
end
|
393
|
+
|
394
|
+
should 'return alias cache path' do
|
395
|
+
assert_equal '/alias.host/public', subject.cache_path
|
396
|
+
end
|
397
|
+
|
398
|
+
should 'return alias auth settings' do
|
399
|
+
assert subject.ssl_on_auth
|
400
|
+
end
|
401
|
+
|
402
|
+
should 'return alias root node' do
|
403
|
+
assert_equal nodes_id(:wiki), subject.root_id
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
context 'Creating a site alias' do
|
408
|
+
subject do
|
409
|
+
Site.find_by_host('test.host')
|
410
|
+
end
|
411
|
+
|
412
|
+
should 'create site' do
|
413
|
+
assert_difference('Site.count', 1) do
|
414
|
+
assert_difference('Node.count', 0) do
|
415
|
+
assert_difference('User.count', 0) do
|
416
|
+
subject.create_alias('foo.bar')
|
417
|
+
end
|
418
|
+
end
|
419
|
+
end
|
420
|
+
end
|
365
421
|
|
422
|
+
should 'set master_id' do
|
423
|
+
ali = subject.create_alias('foo.bar')
|
424
|
+
assert_equal subject.id, ali.master_id
|
425
|
+
end
|
426
|
+
|
427
|
+
should 'set host name' do
|
428
|
+
ali = subject.create_alias('foo.bar')
|
429
|
+
assert_equal 'foo.bar', ali.host
|
430
|
+
end
|
431
|
+
end
|
432
|
+
|
366
433
|
private
|
367
434
|
def fullpath(*args)
|
368
435
|
args.map {|sym| nodes_zip(sym).to_s}.join('/')
|
data/test/unit/user_test.rb
CHANGED
@@ -54,6 +54,26 @@ class UserTest < Zena::Unit::TestCase
|
|
54
54
|
assert_nothing_raised { users(:ant).destroy }
|
55
55
|
end
|
56
56
|
end
|
57
|
+
|
58
|
+
class GroupsUsersCounter < ActiveRecord::Base
|
59
|
+
set_table_name :groups_users
|
60
|
+
end
|
61
|
+
|
62
|
+
should 'remove links to groups' do
|
63
|
+
assert_difference('User.count', -1) do
|
64
|
+
assert_difference('GroupsUsersCounter.count', -2) do
|
65
|
+
assert_nothing_raised { users(:ant).destroy }
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
should 'not remove linked node' do
|
71
|
+
assert_difference('User.count', -1) do
|
72
|
+
assert_difference('Node.count', 0) do
|
73
|
+
assert_nothing_raised { users(:ant).destroy }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
57
77
|
end # with admin rights
|
58
78
|
end # Destroying a user
|
59
79
|
|
@@ -2,8 +2,8 @@
|
|
2
2
|
require 'test_helper'
|
3
3
|
|
4
4
|
class VirtualClassTest < Zena::Unit::TestCase
|
5
|
-
POST_PROPERTIES = %w{assigned cached_role_ids date origin settings summary text title tz weight}
|
6
|
-
NOTE_PROPERTIES = %w{assigned cached_role_ids origin settings summary text title tz weight}
|
5
|
+
POST_PROPERTIES = %w{assigned cached_role_ids date info origin settings summary text title tz weight}
|
6
|
+
NOTE_PROPERTIES = %w{assigned cached_role_ids info origin settings summary text title tz weight}
|
7
7
|
|
8
8
|
def test_virtual_subclasse
|
9
9
|
# add a sub class
|
@@ -427,8 +427,19 @@ class VirtualClassTest < Zena::Unit::TestCase
|
|
427
427
|
end # that is not a virtual class instance
|
428
428
|
|
429
429
|
end # from a node instance
|
430
|
-
|
431
430
|
end # Loading a virtual class
|
431
|
+
|
432
|
+
context 'With a virtual class linked to a real class' do
|
433
|
+
setup do
|
434
|
+
login(:lion)
|
435
|
+
vclass = secure(VirtualClass) { VirtualClass.create(:superclass => 'Document', :name => 'Image')}
|
436
|
+
end
|
437
|
+
|
438
|
+
should 'description' do
|
439
|
+
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
432
443
|
|
433
444
|
def self.should_clear_cache
|
434
445
|
|
@@ -509,7 +520,7 @@ class VirtualClassTest < Zena::Unit::TestCase
|
|
509
520
|
should 'load new role from cache' do
|
510
521
|
subject
|
511
522
|
# no more linked to assigned
|
512
|
-
assert_equal %w{assigned cached_role_ids date foo origin settings summary text title tz weight}, VirtualClass['Post'].column_names.sort
|
523
|
+
assert_equal %w{assigned cached_role_ids date foo info origin settings summary text title tz weight}, VirtualClass['Post'].column_names.sort
|
513
524
|
end
|
514
525
|
|
515
526
|
end # Creating a Column
|
@@ -528,7 +539,7 @@ class VirtualClassTest < Zena::Unit::TestCase
|
|
528
539
|
should 'load new role from cache' do
|
529
540
|
subject
|
530
541
|
# no more linked to Original
|
531
|
-
assert_equal %w{assigned cached_role_ids date summary text title}, VirtualClass['Post'].column_names.sort
|
542
|
+
assert_equal %w{assigned cached_role_ids date info summary text title}, VirtualClass['Post'].column_names.sort
|
532
543
|
end
|
533
544
|
|
534
545
|
end # Updating a Role
|
@@ -566,7 +577,7 @@ class VirtualClassTest < Zena::Unit::TestCase
|
|
566
577
|
should 'load new role from cache' do
|
567
578
|
subject
|
568
579
|
# no more linked to Original
|
569
|
-
assert_equal %w{assigned cached_role_ids date summary text title}, VirtualClass['Post'].column_names.sort
|
580
|
+
assert_equal %w{assigned cached_role_ids date info summary text title}, VirtualClass['Post'].column_names.sort
|
570
581
|
end
|
571
582
|
|
572
583
|
end # Deleting a Role
|
@@ -585,7 +596,7 @@ class VirtualClassTest < Zena::Unit::TestCase
|
|
585
596
|
should 'load new role from cache' do
|
586
597
|
subject
|
587
598
|
# no more linked to assigned
|
588
|
-
assert_equal %w{assigned cached_role_ids date origin settings summary text title weight}, VirtualClass['Post'].column_names.sort
|
599
|
+
assert_equal %w{assigned cached_role_ids date info origin settings summary text title weight}, VirtualClass['Post'].column_names.sort
|
589
600
|
end
|
590
601
|
|
591
602
|
end # Deleting a Column
|
@@ -710,6 +721,37 @@ class VirtualClassTest < Zena::Unit::TestCase
|
|
710
721
|
assert_equal %w{Node Original Task}, subject.sorted_roles.map(&:name)
|
711
722
|
end
|
712
723
|
end
|
724
|
+
|
725
|
+
context 'linked to a real class' do
|
726
|
+
subject do
|
727
|
+
VirtualClass['Note']
|
728
|
+
end
|
729
|
+
|
730
|
+
should 'have an id' do
|
731
|
+
assert subject.id
|
732
|
+
end
|
733
|
+
|
734
|
+
should 'define superclass' do
|
735
|
+
assert_equal VirtualClass['Node'], subject.superclass
|
736
|
+
end
|
737
|
+
|
738
|
+
should 'be the superclass of descendants' do
|
739
|
+
assert_equal subject, VirtualClass['Post'].superclass
|
740
|
+
end
|
741
|
+
|
742
|
+
should 'load all properties' do
|
743
|
+
assert_equal %w{assigned cached_role_ids info origin settings summary text title tz weight}, subject.column_names.sort
|
744
|
+
end
|
745
|
+
|
746
|
+
should 'return list of roles' do
|
747
|
+
assert_equal %w{Node Original Task Note}, subject.sorted_roles.map(&:name)
|
748
|
+
end
|
749
|
+
|
750
|
+
should 'define safe columns' do
|
751
|
+
assert_equal %w{info}, subject.defined_safe_columns.map(&:name)
|
752
|
+
end
|
753
|
+
end
|
754
|
+
|
713
755
|
end # of a real class
|
714
756
|
|
715
757
|
|
@@ -723,7 +765,7 @@ class VirtualClassTest < Zena::Unit::TestCase
|
|
723
765
|
end
|
724
766
|
|
725
767
|
should 'return safe columns' do
|
726
|
-
assert_equal %w{summary text title assigned origin settings tz weight date}, subject.safe_columns.map(&:name)
|
768
|
+
assert_equal %w{summary text title assigned origin settings tz weight info date}, subject.safe_columns.map(&:name)
|
727
769
|
end
|
728
770
|
|
729
771
|
should 'return defined safe columns' do
|
@@ -731,7 +773,7 @@ class VirtualClassTest < Zena::Unit::TestCase
|
|
731
773
|
end
|
732
774
|
|
733
775
|
should 'return safe column types' do
|
734
|
-
assert_equal %w{assigned date origin settings summary text title tz weight}, subject.safe_column_types.keys.sort
|
776
|
+
assert_equal %w{assigned date info origin settings summary text title tz weight}, subject.safe_column_types.keys.sort
|
735
777
|
end
|
736
778
|
|
737
779
|
should 'return type on safe method type' do
|
@@ -744,7 +786,7 @@ class VirtualClassTest < Zena::Unit::TestCase
|
|
744
786
|
end
|
745
787
|
|
746
788
|
should 'return list of roles' do
|
747
|
-
assert_equal %w{Node Original Task Post}, subject.sorted_roles.map(&:name)
|
789
|
+
assert_equal %w{Node Original Task Note Post}, subject.sorted_roles.map(&:name)
|
748
790
|
end
|
749
791
|
end # of a virtual class
|
750
792
|
|
@@ -836,7 +878,8 @@ class VirtualClassTest < Zena::Unit::TestCase
|
|
836
878
|
:superclass => 'Document',
|
837
879
|
:name => 'HtmlDoc',
|
838
880
|
:create_group_id => groups_id(:public),
|
839
|
-
:content_type => 'text/html'
|
881
|
+
:content_type => 'text/html',
|
882
|
+
}
|
840
883
|
end
|
841
884
|
|
842
885
|
should 'save and create regexp' do
|
@@ -852,6 +895,68 @@ class VirtualClassTest < Zena::Unit::TestCase
|
|
852
895
|
end
|
853
896
|
|
854
897
|
end
|
898
|
+
|
899
|
+
context 'linked to a real class' do
|
900
|
+
subject do
|
901
|
+
v = secure(VirtualClass) do
|
902
|
+
VirtualClass.new({
|
903
|
+
:superclass => 'Document',
|
904
|
+
:name => 'Page',
|
905
|
+
:create_group_id => groups_id(:public),
|
906
|
+
})
|
907
|
+
end
|
908
|
+
v.save
|
909
|
+
v
|
910
|
+
end
|
911
|
+
|
912
|
+
should 'save' do
|
913
|
+
assert !subject.new_record?
|
914
|
+
end
|
915
|
+
|
916
|
+
should 'rewrite superclass' do
|
917
|
+
subject
|
918
|
+
assert_equal VirtualClass['Node'], subject.superclass
|
919
|
+
end
|
920
|
+
|
921
|
+
should 'properly set real_class' do
|
922
|
+
assert_equal Page, subject.real_class
|
923
|
+
end
|
924
|
+
|
925
|
+
should 'echo kpath' do
|
926
|
+
assert_equal Page.kpath, subject.kpath
|
927
|
+
end
|
928
|
+
end
|
929
|
+
|
930
|
+
|
931
|
+
context 'linked to Node class' do
|
932
|
+
subject do
|
933
|
+
v = secure(VirtualClass) do
|
934
|
+
VirtualClass.new({
|
935
|
+
:name => 'Node',
|
936
|
+
:create_group_id => groups_id(:public),
|
937
|
+
})
|
938
|
+
end
|
939
|
+
v.save
|
940
|
+
v
|
941
|
+
end
|
942
|
+
|
943
|
+
should 'save' do
|
944
|
+
err subject
|
945
|
+
assert !subject.new_record?
|
946
|
+
end
|
947
|
+
|
948
|
+
should 'rewrite superclass' do
|
949
|
+
assert_equal Node, subject.superclass
|
950
|
+
end
|
951
|
+
|
952
|
+
should 'properly set real_class' do
|
953
|
+
assert_equal Node, subject.real_class
|
954
|
+
end
|
955
|
+
|
956
|
+
should 'echo kpath' do
|
957
|
+
assert_equal Node.kpath, subject.kpath
|
958
|
+
end
|
959
|
+
end
|
855
960
|
end
|
856
961
|
end
|
857
962
|
|