zena 0.15.2 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +20 -0
- data/CREDITS +27 -0
- data/Capfile +3 -0
- data/DEVELOPERS +46 -0
- data/History.txt +15 -0
- data/MIT-LICENSE +19 -0
- data/Rakefile +44 -0
- data/TODO +24 -0
- data/TODO_ZENA_1_0 +23 -0
- data/app/controllers/application_controller.rb +3 -0
- data/app/controllers/documents_controller.rb +22 -56
- data/app/controllers/nodes_controller.rb +42 -27
- data/app/controllers/pings_controller.rb +19 -0
- data/app/controllers/relations_controller.rb +5 -1
- data/app/controllers/sites_controller.rb +1 -46
- data/app/controllers/user_sessions_controller.rb +47 -0
- data/app/controllers/users_controller.rb +1 -0
- data/app/controllers/versions_controller.rb +25 -7
- data/app/controllers/virtual_classes_controller.rb +1 -1
- data/app/helpers/application_helper.rb +1 -1
- data/app/models/comment.rb +2 -1
- data/app/models/contact_content.rb +2 -2
- data/app/models/data_entry.rb +5 -6
- data/app/models/document.rb +14 -10
- data/app/models/document_content.rb +4 -6
- data/app/models/iformat.rb +2 -2
- data/app/models/image_content.rb +6 -9
- data/app/models/node.rb +106 -164
- data/app/models/page.rb +0 -20
- data/app/models/site.rb +42 -12
- data/app/models/template.rb +3 -8
- data/app/models/template_content.rb +2 -0
- data/app/models/text_document.rb +13 -8
- data/app/models/user.rb +47 -100
- data/app/models/user_session.rb +4 -0
- data/app/models/version.rb +1 -1
- data/app/views/comments/create.rjs +3 -3
- data/app/views/comments/edit.rjs +1 -1
- data/app/views/comments/update.rjs +1 -1
- data/app/views/nodes/_import_results.rhtml +1 -1
- data/app/views/nodes/create.rjs +3 -3
- data/app/views/templates/document_create_tabs/_file.rhtml +1 -2
- data/app/views/templates/document_create_tabs/_import.rhtml +7 -2
- data/app/views/templates/edit_tabs/_document.rhtml +1 -3
- data/app/views/templates/edit_tabs/_image.rhtml +1 -3
- data/app/views/versions/_tr.rhtml +1 -1
- data/app/views/versions/edit.rhtml +2 -26
- data/bin/zena +6 -1
- data/bricks/delayed_job/README +18 -0
- data/bricks/delayed_job/migrate/20091104191643_create_delayed_jobs_table.rb +19 -0
- data/bricks/delayed_job/misc/init.rb +8 -0
- data/bricks/delayed_job/misc/tasks.rb +2 -0
- data/bricks/math/patch/application_helper.rb +1 -1
- data/bricks/sphinx/MIT-LICENSE +19 -0
- data/bricks/sphinx/README +19 -0
- data/bricks/sphinx/lib/use_sphinx.rb +78 -0
- data/bricks/sphinx/migrate/20091102171258_add_delta_for_sphinx.rb +9 -0
- data/bricks/sphinx/misc/deploy.rb +20 -0
- data/bricks/sphinx/misc/sphinx.yml +12 -0
- data/bricks/sphinx/misc/tasks.rb +21 -0
- data/bricks/sphinx/patch/node.rb +8 -0
- data/bricks/tags/lib/has_tags.rb +5 -3
- data/bricks/tags/test/zafu/tags.yml +13 -1
- data/config/bricks.yml +35 -0
- data/config/deploy.rb +8 -1
- data/config/environment.rb +1 -1
- data/config/environments/production.rb +1 -1
- data/config/gems.yml +28 -5
- data/config/sphinx.yml +12 -0
- data/db/init/base/skins/default/Node-+popupLayout.zafu +1 -16
- data/db/migrate/20091026161708_add_persistence_token.rb +13 -0
- data/db/migrate/20091101184952_add_session_table.rb +16 -0
- data/db/migrate/20091123175137_add_single_access_token.rb +9 -0
- data/db/migrate/20091124161608_rebuild_fullpath.rb +11 -0
- data/db/schema.rb +21 -8
- data/doc/README_FOR_APP +24 -0
- data/doc/fixtures.graffle +19568 -0
- data/doc/fixtures.pdf +0 -0
- data/doc/template/LICENSE +184 -0
- data/doc/template/README +37 -0
- data/doc/template/allison.css +283 -0
- data/doc/template/allison.js +307 -0
- data/doc/template/allison.rb +260 -0
- data/doc/template/cache/BODY +588 -0
- data/doc/template/cache/CLASS_INDEX +4 -0
- data/doc/template/cache/CLASS_PAGE +1 -0
- data/doc/template/cache/FILE_INDEX +4 -0
- data/doc/template/cache/FILE_PAGE +1 -0
- data/doc/template/cache/FONTS +1 -0
- data/doc/template/cache/FR_INDEX_BODY +1 -0
- data/doc/template/cache/IMGPATH +1 -0
- data/doc/template/cache/INDEX +1 -0
- data/doc/template/cache/JAVASCRIPT +307 -0
- data/doc/template/cache/METHOD_INDEX +4 -0
- data/doc/template/cache/METHOD_LIST +1 -0
- data/doc/template/cache/SRC_PAGE +1 -0
- data/doc/template/cache/STYLE +283 -0
- data/doc/template/cache/URL +1 -0
- data/doc/zafu_changes.yml +29 -0
- data/lib/base_additions.rb +1 -1
- data/lib/bricks.rb +9 -0
- data/lib/bricks/loader.rb +86 -0
- data/lib/bricks/requirements_validation.rb +71 -0
- data/lib/tasks/zena.rake +42 -4
- data/lib/zafu/action.rb +285 -0
- data/lib/zafu/ajax.rb +93 -0
- data/lib/zafu/attributes.rb +117 -0
- data/lib/zafu/calendar.rb +159 -0
- data/lib/zafu/context.rb +330 -0
- data/lib/zafu/core/html.rb +102 -0
- data/lib/zafu/core/move_to_parser.rb +167 -0
- data/lib/zafu/dates.rb +58 -0
- data/lib/zafu/display.rb +502 -0
- data/lib/zafu/eval.rb +66 -0
- data/lib/zafu/experimental.rb +66 -0
- data/lib/zafu/i18n.rb +64 -0
- data/lib/zafu/meta.rb +25 -0
- data/lib/zafu/refactor.rb +73 -0
- data/lib/zafu/support/context.rb +265 -0
- data/lib/zafu/support/dom.rb +145 -0
- data/lib/zafu/support/erb.rb +62 -0
- data/lib/zafu/support/flow.rb +401 -0
- data/lib/zafu/support/forms.rb +461 -0
- data/lib/zafu/support/links.rb +306 -0
- data/lib/zafu_parser.rb +26 -2
- data/lib/zena.rb +34 -15
- data/lib/zena/acts/multiversion.rb +2 -2
- data/lib/zena/acts/secure.rb +41 -30
- data/lib/zena/app.rb +7 -10
- data/lib/zena/controller/test_case.rb +12 -7
- data/lib/zena/crypto_provider/initial.rb +15 -0
- data/lib/zena/db.rb +6 -1
- data/lib/zena/deploy.rb +34 -6
- data/lib/zena/deploy/logrotate_app.rhtml +9 -0
- data/lib/zena/deploy/logrotate_host.rhtml +34 -0
- data/lib/zena/deploy/template.rb +1 -9
- data/lib/zena/foxy_parser.rb +1 -1
- data/lib/zena/info.rb +3 -1
- data/lib/zena/migrator.rb +1 -1
- data/lib/zena/parser.rb +12 -4
- data/lib/zena/parser/zazen_rules.rb +6 -6
- data/lib/zena/parser/zena_rules.rb +1 -7
- data/lib/zena/routes.rb +5 -5
- data/lib/zena/test_controller.rb +7 -2
- data/lib/zena/unit/test_case.rb +6 -8
- data/lib/zena/use/ajax.rb +10 -10
- data/lib/zena/use/authlogic.rb +93 -0
- data/lib/zena/use/dyn_attributes.rb +5 -0
- data/lib/zena/use/html_tags.rb +16 -34
- data/lib/zena/use/i18n.rb +4 -1
- data/lib/zena/use/node_query_finders.rb +8 -4
- data/lib/zena/use/refactor.rb +8 -20
- data/lib/zena/use/relations.rb +1 -0
- data/lib/zena/use/rendering.rb +4 -2
- data/lib/zena/use/search.rb +52 -0
- data/lib/zena/use/test_helper.rb +27 -28
- data/lib/zena/use/upload.rb +188 -0
- data/lib/zena/use/urls.rb +16 -14
- data/lib/zena/use/zafu.rb +16 -63
- data/lib/zena/use/zazen.rb +8 -8
- data/lib/zena/view/test_case.rb +8 -4
- data/locale/en/LC_MESSAGES/zena.mo +0 -0
- data/locale/en/zena.po +3 -3
- data/public/.htaccess +40 -0
- data/public/javascripts/upload-progress.js +17 -8
- data/public/javascripts/zena.js +8 -2
- data/public/stylesheets/popup.css +1 -0
- data/script/about +3 -0
- data/script/apache_logging +25 -0
- data/script/breakpointer +3 -0
- data/script/console +3 -0
- data/script/dbconsole +3 -0
- data/script/destroy +3 -0
- data/script/generate +3 -0
- data/script/performance/benchmarker +3 -0
- data/script/performance/profiler +3 -0
- data/script/plugin +3 -0
- data/script/process/inspector +3 -0
- data/script/process/reaper +3 -0
- data/script/process/spawner +3 -0
- data/script/runner +3 -0
- data/script/server +3 -0
- data/script/set_revision +29 -0
- data/spec/controllers/versions_controller_spec.rb +11 -0
- data/test/fixtures/files/Node-test.zafu +1 -1
- data/test/functional/nodes_controller_test.rb +25 -0
- data/test/functional/pings_controller_test.rb +8 -0
- data/test/functional/user_sessions_controller_test.rb +59 -0
- data/test/functional/users_controller_test.rb +81 -19
- data/test/helpers/node_query/filters.yml +5 -0
- data/test/helpers/node_query_test.rb +3 -3
- data/test/integration/multiple_hosts_test.rb +1 -1
- data/test/integration/navigation_test.rb +1 -1
- data/test/sites/complex/users.yml +1 -1
- data/test/sites/ocean/users.yml +3 -3
- data/test/sites/zena/users.yml +5 -4
- data/test/test_zena.rb +38 -38
- data/test/unit/cached_page_test.rb +2 -2
- data/test/unit/comment_test.rb +0 -1
- data/test/unit/document_test.rb +23 -11
- data/test/unit/helpers/ping_helper_test.rb +4 -0
- data/test/unit/multiversion_test.rb +24 -16
- data/test/unit/node_test.rb +32 -93
- data/test/unit/note_test.rb +9 -0
- data/test/unit/page_test.rb +2 -2
- data/test/unit/secure_test.rb +2 -12
- data/test/unit/site_test.rb +43 -24
- data/test/unit/template_test.rb +45 -3
- data/test/unit/text_document_test.rb +4 -3
- data/test/unit/user_test.rb +13 -33
- data/test/unit/zena/db_test.rb +8 -0
- data/test/unit/zena/parser/zazen.yml +4 -4
- data/test/unit/zena/use/dates_view_methods_test.rb +2 -1
- data/test/unit/zena/use/html_tags_test.rb +12 -4
- data/test/unit/zena/use/refactor_test.rb +4 -3
- data/test/unit/zena/use/rendering_test.rb +1 -0
- data/test/unit/zena/use/upload_test.rb +76 -0
- data/test/unit/zena/use/urls_test.rb +4 -0
- data/test/unit/zena/use/zafu_test.rb +8 -0
- data/test/unit/zena/workflow/status_version_test.rb +6 -0
- data/test/unit/zena/zena_tags/ajax.yml +4 -4
- data/test/unit/zena/zena_tags/basic.yml +21 -10
- data/test/unit/zena/zena_tags/relations.yml +0 -6
- data/test/unit/zena/zena_tags/rubyless.yml +35 -0
- data/test/unit/zena/zena_tags/zazen.yml +4 -4
- data/test/unit/zena/zena_tags_test.rb +36 -4
- data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +1 -1
- data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +2 -3
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +102 -58
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
- data/vendor/TextMate/Zena.tmbundle/info.plist +2 -0
- data/zena.gemspec +2085 -0
- metadata +265 -90
- data/app/controllers/sessions_controller.rb +0 -41
- data/app/views/sites/zena_up.html.erb +0 -11
- data/config/database.yml +0 -40
- data/db/production.sqlite3 +0 -0
- data/lib/bricks/patcher.rb +0 -68
- data/lib/zena/parser/zena_tags.rb +0 -3562
- data/lib/zena/use/authentification.rb +0 -120
- data/public/images/ext/contact_pv.png +0 -0
- data/public/images/ext/other_pv.png +0 -0
- data/public/images/ext/page_pv.png +0 -0
- data/public/images/ext/page_tiny.png +0 -0
- data/public/images/ext/pdf_pv.png +0 -0
- data/public/images/ext/post_pv.png +0 -0
- data/public/images/ext/post_tiny.png +0 -0
- data/public/images/ext/project_pv.png +0 -0
- data/public/images/ext/project_tiny.png +0 -0
- data/public/images/ext/tag_pv.png +0 -0
- data/public/images/ext/zip_pv.png +0 -0
- data/tasks/ann.rake +0 -80
- data/tasks/bones.rake +0 -20
- data/tasks/gem.rake +0 -201
- data/tasks/git.rake +0 -40
- data/tasks/notes.rake +0 -27
- data/tasks/post_load.rake +0 -34
- data/tasks/rdoc.rake +0 -51
- data/tasks/rubyforge.rake +0 -55
- data/tasks/setup.rb +0 -292
- data/tasks/spec.rake +0 -54
- data/tasks/svn.rake +0 -47
- data/tasks/test.rake +0 -40
- data/tasks/zentest.rake +0 -36
- data/test/fixtures/comments.yml +0 -126
- data/test/fixtures/contact_contents.yml +0 -132
- data/test/fixtures/data_entries.yml +0 -65
- data/test/fixtures/discussions.yml +0 -48
- data/test/fixtures/document_contents.yml +0 -108
- data/test/fixtures/dyn_attributes.yml +0 -66
- data/test/fixtures/groups.yml +0 -86
- data/test/fixtures/groups_users.yml +0 -81
- data/test/fixtures/iformats.yml +0 -29
- data/test/fixtures/links.yml +0 -313
- data/test/fixtures/nodes.yml +0 -2592
- data/test/fixtures/relations.yml +0 -126
- data/test/fixtures/sites.yml +0 -58
- data/test/fixtures/template_contents.yml +0 -172
- data/test/fixtures/users.yml +0 -167
- data/test/fixtures/versions.yml +0 -1911
- data/test/fixtures/virtual_classes.yml +0 -87
- data/test/fixtures/zips.yml +0 -15
- data/test/functional/sessions_controller_test.rb +0 -73
data/test/unit/template_test.rb
CHANGED
@@ -52,7 +52,7 @@ class TemplateTest < Zena::Unit::TestCase
|
|
52
52
|
def test_create_with_file
|
53
53
|
login(:tiger)
|
54
54
|
doc = secure!(Document) { Document.create(:parent_id=>nodes_id(:default), :name=>'skiny',
|
55
|
-
:c_file=>
|
55
|
+
:c_file=>uploaded_fixture('some.txt', content_type="text/zafu", 'smoke'))}
|
56
56
|
assert_kind_of Template, doc
|
57
57
|
assert !doc.new_record?, "Not a new record"
|
58
58
|
assert_equal 'skiny.zafu', doc.version.content.filename
|
@@ -299,7 +299,7 @@ class TemplateTest < Zena::Unit::TestCase
|
|
299
299
|
def test_update_same_text
|
300
300
|
login(:tiger)
|
301
301
|
tmpt = secure(Template) { Template.create(:parent_id=>nodes_id(:default), 'c_format' => 'vcard', 'c_klass' => 'Node', 'name' => '', 'v_status' => Zena::Status[:pub], 'c_file' =>
|
302
|
-
|
302
|
+
uploaded_fixture('some.txt', 'text/zafu')) }
|
303
303
|
assert_kind_of Template, tmpt
|
304
304
|
Zena::Db.set_attribute(tmpt, :updated_at, Time.gm(2006,04,11))
|
305
305
|
assert_equal Zena::Status[:pub], tmpt.version.status
|
@@ -335,7 +335,24 @@ class TemplateTest < Zena::Unit::TestCase
|
|
335
335
|
|
336
336
|
should 'be able to destroy version' do
|
337
337
|
assert_difference('Version.count', -1) do
|
338
|
-
|
338
|
+
assert_difference('Node.count', 0) do
|
339
|
+
assert @node.destroy_version
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
context 'on a template with just one removed version' do
|
346
|
+
setup do
|
347
|
+
@node = secure(Node) { nodes(:Project_zafu) }
|
348
|
+
@node.remove
|
349
|
+
end
|
350
|
+
|
351
|
+
should 'be able to destroy template' do
|
352
|
+
assert_difference('Version.count', -1) do
|
353
|
+
assert_difference('Node.count', -1) do
|
354
|
+
assert @node.destroy_version
|
355
|
+
end
|
339
356
|
end
|
340
357
|
end
|
341
358
|
end
|
@@ -352,6 +369,31 @@ class TemplateTest < Zena::Unit::TestCase
|
|
352
369
|
end
|
353
370
|
end
|
354
371
|
|
372
|
+
should 'be able to create a template with no format, mode or klass' do
|
373
|
+
assert_difference('Node.count', 1) do
|
374
|
+
@node = secure(Document) { Document.create(:parent_id => nodes_id(:default), :name=>'foo.zafu') }
|
375
|
+
end
|
376
|
+
content = @node.version.content
|
377
|
+
assert_nil content.format
|
378
|
+
assert_nil content.mode
|
379
|
+
assert_nil content.klass
|
380
|
+
assert_equal 'foo', @node.name
|
381
|
+
assert_equal 'foo', @node.version.title
|
382
|
+
end
|
383
|
+
|
384
|
+
should 'be able to update a template with blank format, mode or klass' do
|
385
|
+
@node = secure(Node) { nodes(:notes_zafu) }
|
386
|
+
assert @node.update_attributes('v_text' => 'hello', 'c_klass' => '', 'c_format' => '', 'c_mode' => '')
|
387
|
+
@node = secure(Node) { nodes(:notes_zafu) } # reload
|
388
|
+
content = @node.version.content
|
389
|
+
|
390
|
+
assert_nil content.format
|
391
|
+
assert_nil content.mode
|
392
|
+
assert_nil content.klass
|
393
|
+
|
394
|
+
assert_equal 'hello', @node.version.text
|
395
|
+
end
|
396
|
+
|
355
397
|
end
|
356
398
|
|
357
399
|
end
|
@@ -54,7 +54,7 @@ class TextDocumentTest < Zena::Unit::TestCase
|
|
54
54
|
assert bird.update_attributes(:parent_id => node[:parent_id])
|
55
55
|
Zena::Db.set_attribute(bird, :updated_at, b_at)
|
56
56
|
start =<<-END_CSS
|
57
|
-
body { font-size:10px; }
|
57
|
+
body { font-size:10px; behavior:url("/stylesheets/csshover2.htc"); }
|
58
58
|
#header { background:url('bird.jpg') }
|
59
59
|
#pv { background:url('bird_pv.jpg') }
|
60
60
|
#footer { background:url('/projects/wiki/flower.jpg') }
|
@@ -66,9 +66,10 @@ class TextDocumentTest < Zena::Unit::TestCase
|
|
66
66
|
helper = ApplicationController.new
|
67
67
|
helper.instance_variable_set(:@visitor, visitor)
|
68
68
|
text = node.parse_assets(start, helper, 'v_text')
|
69
|
+
err node
|
69
70
|
assert node.errors.empty?
|
70
71
|
res =<<-END_CSS
|
71
|
-
body { font-size:10px; }
|
72
|
+
body { font-size:10px; behavior:url("/stylesheets/csshover2.htc?#{File.mtime(File.join(RAILS_ROOT, 'public/stylesheets/csshover2.htc')).to_i}"); }
|
72
73
|
#header { background:url('/en/image30.jpg?1144713600') }
|
73
74
|
#pv { background:url('/en/image30_pv.jpg?967816914293') }
|
74
75
|
#footer { background:url('/en/image31.jpg?1144713600') }
|
@@ -80,7 +81,7 @@ class TextDocumentTest < Zena::Unit::TestCase
|
|
80
81
|
assert_equal res, text
|
81
82
|
text = node.unparse_assets(text, helper, 'v_text')
|
82
83
|
unparsed =<<-END_CSS
|
83
|
-
body { font-size:10px; }
|
84
|
+
body { font-size:10px; behavior:url("/stylesheets/csshover2.htc"); }
|
84
85
|
#header { background:url('bird.jpg') }
|
85
86
|
#pv { background:url('bird_pv.jpg') }
|
86
87
|
#footer { background:url('/projects/wiki/flower.jpg') }
|
data/test/unit/user_test.rb
CHANGED
@@ -2,6 +2,15 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class UserTest < Zena::Unit::TestCase
|
4
4
|
|
5
|
+
def test_find_allowed_user_by_login
|
6
|
+
assert_equal users_id(:su), User.find_allowed_user_by_login('su').id
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_deleted_user_should_not_be_allowed
|
10
|
+
User.connection.execute "UPDATE users SET status = #{User::Status[:deleted]} WHERE id = #{users_id(:tiger)} AND site_id = #{sites_id(:zena)}"
|
11
|
+
assert_nil User.find_allowed_user_by_login('tiger')
|
12
|
+
end
|
13
|
+
|
5
14
|
def test_visited_node_ids
|
6
15
|
login(:tiger)
|
7
16
|
secure!(Node) { nodes(:status) }
|
@@ -55,8 +64,8 @@ class UserTest < Zena::Unit::TestCase
|
|
55
64
|
user = secure!(User) { User.find(user[:id]) } # reload
|
56
65
|
assert_equal sites_id(:ocean), user.site_id
|
57
66
|
assert_equal 2, user.groups.size
|
58
|
-
assert user.groups.include?(
|
59
|
-
assert user.groups.include?(
|
67
|
+
assert user.groups.map{|g| g.name}.include?('public'), "Is in the public group"
|
68
|
+
assert user.groups.map{|g| g.name}.include?('aqua'), "Is in the 'site' group"
|
60
69
|
assert_equal User::Status[:moderated], user.status
|
61
70
|
assert_equal 'ru', user.lang
|
62
71
|
assert_equal 'US/Hawaii', user[:time_zone]
|
@@ -91,7 +100,7 @@ class UserTest < Zena::Unit::TestCase
|
|
91
100
|
|
92
101
|
def test_create_admin_with_groups
|
93
102
|
login(:lion)
|
94
|
-
user = secure!(User) { User.new("login"=>"john", "password"=>"isjjna78a9h", "group_ids"=>[
|
103
|
+
user = secure!(User) { User.new("login"=>"john", "password"=>"isjjna78a9h", "group_ids"=>[1329663069]) }
|
95
104
|
assert user.save
|
96
105
|
user = secure!(User) { User.find(user[:id])}
|
97
106
|
assert_equal 3, user.groups.size
|
@@ -154,35 +163,6 @@ class UserTest < Zena::Unit::TestCase
|
|
154
163
|
assert !user.is_admin?
|
155
164
|
end
|
156
165
|
|
157
|
-
def test_login
|
158
|
-
assert user = User.login('ant', 'ant', 'test.host'), "Login ok."
|
159
|
-
assert_equal user[:id], users_id(:ant)
|
160
|
-
assert_nil User.login('ant', 'bad', 'test.host')
|
161
|
-
assert_nil User.login('ant', 'ant', 'ocean.host')
|
162
|
-
end
|
163
|
-
|
164
|
-
def test_cannot_login_if_deleted
|
165
|
-
assert User.login('ant', 'ant', 'test.host')
|
166
|
-
User.connection.execute("UPDATE users SET status=#{User::Status[:deleted]} WHERE id=#{users_id(:ant)}")
|
167
|
-
assert !User.login('ant', 'ant', 'test.host')
|
168
|
-
end
|
169
|
-
|
170
|
-
def test_anon_cannot_login
|
171
|
-
assert_nil User.login('anon', '', 'test.host')
|
172
|
-
end
|
173
|
-
|
174
|
-
def test_unique_login
|
175
|
-
login(:lion)
|
176
|
-
bob = secure!(User) { User.create(:login=>'tiger', :password=>'anypassword') }
|
177
|
-
assert bob.new_record?
|
178
|
-
assert bob.errors[:login] #.any?
|
179
|
-
|
180
|
-
login(:whale)
|
181
|
-
bob = secure!(User) { User.create(:login=>'tiger', :password=>'anypassword') }
|
182
|
-
assert !bob.new_record?
|
183
|
-
assert_nil bob.errors[:login] #.empty?
|
184
|
-
end
|
185
|
-
|
186
166
|
def test_empty_password
|
187
167
|
login(:lion)
|
188
168
|
bob = secure!(User) { User.new }
|
@@ -252,7 +232,7 @@ class UserTest < Zena::Unit::TestCase
|
|
252
232
|
login(:lion)
|
253
233
|
user = secure!(User) { User.create("login"=>"john", "password"=>"isjjna78a9h", 'time_zone' => 'Zurich') }
|
254
234
|
assert user.new_record?
|
255
|
-
|
235
|
+
assert_not_nil user.errors['time_zone']
|
256
236
|
|
257
237
|
user = secure!(User) { User.create("login"=>"john", "password"=>"isjjna78a9h", 'time_zone' => 'Mexico/General') }
|
258
238
|
assert !user.new_record?
|
data/test/unit/zena/db_test.rb
CHANGED
@@ -36,6 +36,14 @@ class DbTest < Zena::Unit::TestCase
|
|
36
36
|
assert_nil Zena::Db.fetch_row("SELECT name FROM nodes WHERE 0")
|
37
37
|
end
|
38
38
|
|
39
|
+
def test_fetch_attributes
|
40
|
+
assert_equal [{"name"=>"secret", "zip"=>"19"},
|
41
|
+
{"name"=>"status", "zip"=>"22"},
|
42
|
+
{"name"=>"strange", "zip"=>"36"},
|
43
|
+
{"name"=>"skins", "zip"=>"51"},
|
44
|
+
{"name"=>"style", "zip"=>"53"}], Zena::Db.fetch_attributes(['zip','name'], 'nodes', "name like 's%' and site_id = #{sites_id(:zena)} ORDER BY zip")
|
45
|
+
end
|
46
|
+
|
39
47
|
context 'A node that needs attribute changes without validations or side effects' do
|
40
48
|
setup do
|
41
49
|
login(:anon)
|
@@ -157,13 +157,13 @@ link_no_title:
|
|
157
157
|
src: '"":23'
|
158
158
|
res: '<p>[make_link id:|23| title:||]</p>'
|
159
159
|
|
160
|
-
|
160
|
+
link_anchor:
|
161
161
|
src: '"hello":23#world of fame'
|
162
|
-
res: "<p>[make_link
|
162
|
+
res: "<p>[make_link anchor:|world| id:|23| title:|hello|] of fame</p>"
|
163
163
|
|
164
|
-
|
164
|
+
link_anchor_same_as_title:
|
165
165
|
src: '"hello":23# I love you'
|
166
|
-
res: "<p>[make_link
|
166
|
+
res: "<p>[make_link anchor:|true| id:|23| title:|hello|] I love you</p>"
|
167
167
|
|
168
168
|
link_with_ending_punct:
|
169
169
|
src: "I love \"\":20."
|
@@ -41,9 +41,10 @@ class DatesViewMethodsTest < Zena::View::TestCase
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def test_full_date
|
44
|
+
I18n.locale = 'en'
|
44
45
|
atime = visitor.tz.utc_to_local(Time.gm(2006,11,10))
|
45
46
|
assert_equal "Friday, November 10 2006", full_date(atime)
|
46
|
-
I18n.locale = 'fr'
|
47
|
+
::I18n.locale = 'fr'
|
47
48
|
assert_equal "vendredi, 10 novembre 2006", full_date(atime)
|
48
49
|
end
|
49
50
|
|
@@ -106,6 +106,14 @@ class HtmlTagsTest < Zena::View::TestCase
|
|
106
106
|
assert_match %r{input type='text'.*name.*node\[icon_id\]}m, select_id('node', :icon_id)
|
107
107
|
end
|
108
108
|
|
109
|
+
def test_select_id_with_empty_value
|
110
|
+
login(:lion)
|
111
|
+
vclass = VirtualClass.create(:superclass => 'Post', :name => 'Foo', :create_group_id => groups_id(:public))
|
112
|
+
@node = secure!(Node) { nodes(:status) }
|
113
|
+
select = select_id('node', :parent_id, :class=>'Foo')
|
114
|
+
assert_match %r{<select[^>]*></select>}, select
|
115
|
+
end
|
116
|
+
|
109
117
|
def test_uses_datebox_with_lang
|
110
118
|
res = uses_datebox
|
111
119
|
assert_match %r{/calendar/lang/calendar-en-utf8.js}, res
|
@@ -191,16 +199,16 @@ class HtmlTagsTest < Zena::View::TestCase
|
|
191
199
|
end
|
192
200
|
|
193
201
|
def test_login_link
|
194
|
-
assert_equal "<a href=\"http://test.host/
|
202
|
+
assert_equal "<a href=\"http://test.host/login\">login</a>", login_link
|
195
203
|
login(:ant)
|
196
|
-
assert_equal "<a href
|
204
|
+
assert_equal "<a href=\"http://test.host/logout\">logout</a>", login_link
|
197
205
|
end
|
198
206
|
|
199
207
|
def test_login_link_without_prefix
|
200
208
|
overwrite_params(:prefix => nil, :controller => 'comments', :action => 'index')
|
201
|
-
assert_equal "<a href
|
209
|
+
assert_equal "<a href=\"http://test.host/login\">login</a>", login_link
|
202
210
|
login(:ant)
|
203
|
-
assert_equal "<a href
|
211
|
+
assert_equal "<a href=\"http://test.host/logout\">logout</a>", login_link
|
204
212
|
end
|
205
213
|
|
206
214
|
def test_show_path_root
|
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class RefactorTest < Zena::View::TestCase
|
4
|
-
|
4
|
+
tests Zena::Use::Refactor::ViewMethods # fquote
|
5
|
+
|
5
6
|
def _(k)
|
6
7
|
k
|
7
8
|
end
|
@@ -11,7 +12,7 @@ class RefactorTest < Zena::View::TestCase
|
|
11
12
|
end
|
12
13
|
|
13
14
|
def test_render_to_string
|
14
|
-
assert_match 'stupid test 25',
|
15
|
+
assert_match 'stupid test 25', render_to_string(:inline=>'stupid <%= "test" %> <%= 5*5 %>')
|
15
16
|
end
|
16
17
|
|
17
18
|
def test_fsize
|
@@ -33,7 +34,7 @@ class RefactorTest < Zena::View::TestCase
|
|
33
34
|
end
|
34
35
|
|
35
36
|
def test_traductions
|
36
|
-
|
37
|
+
visitor.lang = 'en'
|
37
38
|
# we must initialize an url for url_rewriting in 'traductions'
|
38
39
|
@controller.instance_eval { @url = ActionController::UrlRewriter.new( @request, {:controller=>'nodes', :action=>'index'} ) }
|
39
40
|
@node = secure!(Node) { Node.find(nodes_id(:status)) } # en,fr
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class RenderingTest < Zena::View::TestCase
|
4
|
+
def self.layout(*args); ''; end # Called by Rendering::ControllerMethods
|
4
5
|
include Zena::Use::Rendering::ControllerMethods
|
5
6
|
include Zena::Use::Zafu::ControllerMethods # template_url
|
6
7
|
include Zena::Acts::Secure # secure
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class UploadTest < Zena::View::TestCase
|
4
|
+
include Zena::Use::Upload::ControllerMethods
|
5
|
+
attr_reader :params
|
6
|
+
|
7
|
+
# only run these tests if network is available
|
8
|
+
if Zena::Use::Upload.has_network?
|
9
|
+
context 'Uploading with an attachment url' do
|
10
|
+
setup do
|
11
|
+
@params = {'attachment_url' => 'http://zenadmin.org/fr/blog/image5.jpg'}
|
12
|
+
end
|
13
|
+
|
14
|
+
should 'provide a file with the downloaded content' do
|
15
|
+
file, error = get_attachment
|
16
|
+
assert file, "error: #{error}"
|
17
|
+
content = file.read
|
18
|
+
assert_equal 73633, content.size
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'to a file too large' do
|
22
|
+
setup do
|
23
|
+
@params = {'attachment_url' => "http://cdimage.debian.org/debian-cd/5.0.3/i386/iso-cd/debian-503-i386-CD-1.iso"}
|
24
|
+
end
|
25
|
+
|
26
|
+
should 'return an error about file being too big, without a download' do
|
27
|
+
file, error = get_attachment
|
28
|
+
assert_nil file
|
29
|
+
assert_equal 'size (645.5 MB) too big to fetch url', error
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'to a file without size' do
|
34
|
+
setup do
|
35
|
+
@params = {'attachment_url' => "http://download.berlios.de/zena/zena_playground.zip"}
|
36
|
+
end
|
37
|
+
|
38
|
+
should 'return an error about missing content length' do
|
39
|
+
file, error = get_attachment
|
40
|
+
assert_nil file
|
41
|
+
assert_equal 'unknown size: cannot fetch url', error
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
context 'that is not valid' do
|
47
|
+
setup do
|
48
|
+
@invalid_urls = ['lkja a93z/3', 'bad .uri', '.']
|
49
|
+
end
|
50
|
+
|
51
|
+
should 'return an error' do
|
52
|
+
@invalid_urls.each do |url|
|
53
|
+
@params = {'attachment_url' => url}
|
54
|
+
file, error = get_attachment
|
55
|
+
assert_nil file
|
56
|
+
assert_equal 'invalid url', error
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'that does not exist' do
|
62
|
+
setup do
|
63
|
+
@params = {'attachment_url' => "http://example.org/xyz.zip"}
|
64
|
+
end
|
65
|
+
|
66
|
+
should 'return an error about missing content length' do
|
67
|
+
file, error = get_attachment
|
68
|
+
assert_nil file
|
69
|
+
assert_equal 'not found', error
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
else
|
74
|
+
puts "upload by url disabled (no network)"
|
75
|
+
end # if has_network?
|
76
|
+
end
|
@@ -65,6 +65,10 @@ class UrlsTest < Zena::View::TestCase
|
|
65
65
|
assert_equal "/en/image30_pv.jpg?#{node.updated_at.to_i + Iformat['pv'][:hash_id]}", zen_path(node, :format => 'jpg', :mode => 'pv')
|
66
66
|
end
|
67
67
|
|
68
|
+
def test_zen_path_with_anchor
|
69
|
+
assert_equal '/en/section12.html#comments', zen_path(nodes(:people), :anchor => 'comments')
|
70
|
+
end
|
71
|
+
|
68
72
|
def test_zen_path_asset
|
69
73
|
login(:ant)
|
70
74
|
node = secure!(Node) { nodes(:zena) }
|
@@ -30,4 +30,12 @@ class ZafuTest < Zena::View::TestCase
|
|
30
30
|
compiled_template = template_url
|
31
31
|
assert_match %r{<%= render_js %></body>}, File.read(File.join(SITES_ROOT, compiled_template))
|
32
32
|
end
|
33
|
+
|
34
|
+
def test_template_path_from_template_url
|
35
|
+
assert_equal "/test.host/zafu/default/Node-test/en/pagir", template_path_from_template_url('/default/Node-test/pagir')
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_fullpath_from_template_url
|
39
|
+
assert_equal "#{SITES_ROOT}/test.host/zafu/default/Node-test/en/pagir", fullpath_from_template_url('/default/Node-test/pagir')
|
40
|
+
end
|
33
41
|
end
|
@@ -156,20 +156,20 @@ draggable_do_syntax:
|
|
156
156
|
unlink:
|
157
157
|
context:
|
158
158
|
node: 'art'
|
159
|
-
src: "<r:tagged do='each' do='unlink'/>"
|
159
|
+
src: "<r:context select='tagged' do='each' do='unlink'/>"
|
160
160
|
res: "/<div id='list1_21'><a .*onclick=.*Ajax.Request.*_ID(cleanWater_in_art)\?dom_id=list1_21.*class=.unlink.*bullet_delete.png.*<\/div><div id='list1_27'/"
|
161
161
|
|
162
162
|
unlink_ignored_in_form:
|
163
163
|
context:
|
164
164
|
node: 'art'
|
165
|
-
src: "<r:tagged><r:each do='unlink'/><r:add/></r:
|
165
|
+
src: "<r:context select='tagged'><r:each do='unlink'/><r:add/></r:context>"
|
166
166
|
res: "!/<form.*bullet_delete.png/"
|
167
167
|
|
168
168
|
edit_link:
|
169
169
|
context:
|
170
170
|
node: 'art'
|
171
171
|
lang: 'fr'
|
172
|
-
src: "<r:tagged><r:each><r:show attr='name'/>: <r:show attr='l_status'/> <r:edit/></r:each></r:
|
172
|
+
src: "<r:context select='tagged'><r:each><r:show attr='name'/>: <r:show attr='l_status'/> <r:edit/></r:each></r:context>"
|
173
173
|
res: "/link_id.*éditer/"
|
174
174
|
'edit/link/fr/list1_form.erb': "/<input type='hidden' name='link_id' value=.<%= @node.link_id %>./>/"
|
175
175
|
'edit/link/fr/list1.erb': "/\#\{@node.link_id\}/"
|
@@ -183,7 +183,7 @@ each_in_each_dom_id:
|
|
183
183
|
<ul class='tags' do='tags in site'>
|
184
184
|
<li do='each'><b do='link'/>
|
185
185
|
<div do='drop' set='set_tag'>
|
186
|
-
<ul class='tagged' do='tagged'>
|
186
|
+
<ul class='tagged' do='context' select='tagged'>
|
187
187
|
<li do='each' draggable='true' do='link'/>
|
188
188
|
</ul>
|
189
189
|
</div>
|
@@ -260,20 +260,20 @@ link_root:
|
|
260
260
|
tem: "<a href='<%= zen_path((secure(Node) { Node.find(_ID(zena))})) %>'><%= @node.version.title %></a>"
|
261
261
|
res: "<a href='/oo'>status title</a>"
|
262
262
|
|
263
|
-
|
264
|
-
src: "<r:link
|
263
|
+
link_anchor:
|
264
|
+
src: "<r:link anchor='true'/>"
|
265
265
|
res: "<a href='#node22'>status title</a>"
|
266
266
|
|
267
|
-
|
268
|
-
src: "<r:link
|
267
|
+
link_anchor_name:
|
268
|
+
src: "<r:link anchor='[name]'/>"
|
269
269
|
res: "<a href='#status'>status title</a>"
|
270
270
|
|
271
|
-
|
272
|
-
src: "<r:link
|
271
|
+
link_anchor_in:
|
272
|
+
src: "<r:link anchor='true' in='project' mode='tree'/>"
|
273
273
|
res: "<a href='/oo/projects/cleanWater_tree#node22'>status title</a>"
|
274
274
|
|
275
|
-
|
276
|
-
src: "<r:link
|
275
|
+
link_anchor_name_in:
|
276
|
+
src: "<r:link anchor='[name]' in='parent'/>"
|
277
277
|
res: "<a href='/oo/projects/cleanWater#status'>status title</a>"
|
278
278
|
|
279
279
|
link_stored:
|
@@ -300,7 +300,7 @@ anchor:
|
|
300
300
|
res: "<a name='node22'></a><a name='status'></a> <p>22</p>"
|
301
301
|
|
302
302
|
anchor_in_link:
|
303
|
-
src: "<r:
|
303
|
+
src: "<r:anchor do='link'/>"
|
304
304
|
res: "<a name='node22' href='/oo/projects/cleanWater/page22.html'>status title</a>"
|
305
305
|
|
306
306
|
show_title_anchor:
|
@@ -320,7 +320,7 @@ link_version:
|
|
320
320
|
version_anchor:
|
321
321
|
context:
|
322
322
|
node: 'opening'
|
323
|
-
src: "<r:traductions><r:each join=', '><r:
|
323
|
+
src: "<r:traductions><r:each join=', '><r:anchor do='link' tattr='lang'/></r:each></r:traductions>"
|
324
324
|
res: "<a name='version27.2' href='/oo/projects/cleanWater/post27.html?lang=en'>english</a>, <a name='version27.1' href='/oo/projects/cleanWater/post27.html?lang=fr'>french</a>"
|
325
325
|
|
326
326
|
title:
|
@@ -642,6 +642,10 @@ if_in_tag:
|
|
642
642
|
src: "<r:form><p do='if' in='form' do='[name]'/></r:form><i do='if' in='form' do='[name]'/>done."
|
643
643
|
res: "/<p>status</p></form></div>done./"
|
644
644
|
|
645
|
+
if_in_tag_else:
|
646
|
+
src: "<r:if in='form'>in form<r:else>not in form</r:else></r:if>"
|
647
|
+
res: "not in form"
|
648
|
+
|
645
649
|
if_or:
|
646
650
|
src: "<r:if can='write' or_test='d_foo'>hello</r:if>"
|
647
651
|
tem: "/<% if @node.can_write? || !@node.version.dyn[\"foo\"].blank? -%>hello<% end -%>|<% if !@node.version.dyn[\"foo\"].blank? || @node.can_write? -%>hello<% end -%>/"
|
@@ -1085,6 +1089,7 @@ translate_id_to_zip:
|
|
1085
1089
|
|
1086
1090
|
date:
|
1087
1091
|
context:
|
1092
|
+
visitor: ant
|
1088
1093
|
node: 'letter'
|
1089
1094
|
lang: 'fr'
|
1090
1095
|
src: "<r:date select='[log_at]'>nouvelles de <r:trans do='[current_date]' format='%B'/> <r:show date='current_date' format='%Y'/>: <r:notes in='site' log='month' do='each' join=', ' do='[name]'/></r:date>"
|
@@ -1169,6 +1174,7 @@ captcha:
|
|
1169
1174
|
|
1170
1175
|
date_fr:
|
1171
1176
|
context:
|
1177
|
+
visitor: ant
|
1172
1178
|
lang: 'fr'
|
1173
1179
|
src: "<r:show date='created_at' format='%a'/>"
|
1174
1180
|
res: "ven"
|
@@ -1225,6 +1231,11 @@ link_page_list:
|
|
1225
1231
|
tem: "/set_pak_page != set_pak.*zen_path\(@node,:pak.*elsif true.*set_pak_page/"
|
1226
1232
|
res: "/<a href='.*page22.html\?pak=1'>1</a>, 2, .*pak=3'>3</a>.*pak=4'>4</a>.*pak=5'>5</a>/"
|
1227
1233
|
|
1234
|
+
# TODO:
|
1235
|
+
#link_page_list_single_page:
|
1236
|
+
# src: "<r:images in='site' limit='10' order='zip' paginate='p' do='link' page='list' join=', '/>"
|
1237
|
+
# res: "" # should not show single page
|
1238
|
+
|
1228
1239
|
link_page_list_page_count:
|
1229
1240
|
context:
|
1230
1241
|
pak: 3
|