zena 0.16.9 → 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +16 -3
- data/CREDITS +8 -4
- data/History.txt +12 -15
- data/app/controllers/application_controller.rb +1 -0
- data/app/controllers/columns_controller.rb +130 -0
- data/app/controllers/documents_controller.rb +16 -4
- data/app/controllers/groups_controller.rb +1 -5
- data/app/controllers/iformats_controller.rb +1 -5
- data/app/controllers/nodes_controller.rb +116 -41
- data/app/controllers/preferences_controller.rb +2 -0
- data/app/controllers/relations_controller.rb +1 -5
- data/app/controllers/sites_controller.rb +1 -5
- data/app/controllers/user_sessions_controller.rb +8 -3
- data/app/controllers/users_controller.rb +23 -11
- data/app/controllers/versions_controller.rb +29 -46
- data/app/controllers/virtual_classes_controller.rb +20 -12
- data/app/helpers/documents_helper.rb +5 -1
- data/app/models/attachment.rb +41 -0
- data/app/models/base_contact.rb +79 -0
- data/app/models/cache.rb +2 -2
- data/app/models/cached_page.rb +5 -4
- data/app/models/column.rb +90 -0
- data/app/models/comment.rb +3 -1
- data/app/models/contact_content.rb +5 -5
- data/app/models/contact_version.rb +2 -2
- data/app/models/data_entry.rb +9 -8
- data/app/models/discussion.rb +4 -0
- data/app/models/document.rb +170 -42
- data/app/models/document_content.rb +5 -9
- data/app/models/group.rb +4 -3
- data/app/models/idx_nodes_ml_string.rb +5 -0
- data/app/models/idx_nodes_string.rb +5 -0
- data/app/models/idx_template.rb +35 -0
- data/app/models/iformat.rb +4 -4
- data/app/models/image.rb +193 -26
- data/app/models/link.rb +1 -1
- data/app/models/node.rb +358 -338
- data/app/models/note.rb +2 -4
- data/app/models/page.rb +10 -8
- data/app/models/reference.rb +1 -1
- data/app/models/relation.rb +40 -1
- data/app/models/relation_proxy.rb +37 -40
- data/app/models/role.rb +19 -0
- data/app/models/site.rb +54 -24
- data/app/models/skin.rb +1 -16
- data/app/models/template.rb +92 -62
- data/app/models/template_content.rb +12 -6
- data/app/models/text_document.rb +69 -36
- data/app/models/text_document_content.rb +3 -3
- data/app/models/user.rb +34 -13
- data/app/models/version.rb +47 -291
- data/app/models/virtual_class.rb +26 -29
- data/app/views/columns/_add.html.erb +6 -0
- data/app/views/columns/_form.html.erb +36 -0
- data/app/views/columns/_li.html.erb +11 -0
- data/app/views/columns/create.rjs +8 -0
- data/app/views/columns/destroy.rjs +6 -0
- data/app/views/columns/edit.html.erb +5 -0
- data/app/views/columns/index.html.erb +15 -0
- data/app/views/columns/new.html.erb +2 -0
- data/app/views/columns/show.rjs +1 -0
- data/app/views/columns/update.rjs +5 -0
- data/app/views/comments/_li.rhtml +1 -1
- data/app/views/comments/create.rjs +1 -1
- data/app/views/comments/index.rhtml +1 -1
- data/app/views/comments/publish.rjs +1 -1
- data/app/views/comments/remove.rjs +1 -1
- data/app/views/data_entries/_li.html.erb +1 -1
- data/app/views/discussions/create.rjs +1 -1
- data/app/views/documents/_crop.rhtml +4 -4
- data/app/views/documents/crop_form.rjs +1 -1
- data/app/views/documents/new.rhtml +1 -1
- data/app/views/documents/show.rhtml +4 -4
- data/app/views/groups/_form.rhtml +1 -1
- data/app/views/groups/index.rhtml +1 -1
- data/app/views/iformats/_form.rhtml +1 -1
- data/app/views/iformats/create.rjs +1 -1
- data/app/views/iformats/index.rhtml +1 -1
- data/app/views/links/create.rjs +1 -1
- data/app/views/links/destroy.rjs +1 -1
- data/app/views/links/show.rjs +1 -1
- data/app/views/nodes/_dates.rhtml +2 -2
- data/app/views/nodes/_gallery.rhtml +2 -2
- data/app/views/nodes/_list_nodes.rhtml +2 -2
- data/app/views/nodes/_parent.rhtml +1 -1
- data/app/views/nodes/_position.rhtml +2 -2
- data/app/views/nodes/_results.rhtml +1 -1
- data/app/views/nodes/create.rjs +1 -4
- data/app/views/nodes/destroy.erb +0 -0
- data/app/views/nodes/import.rhtml +1 -1
- data/app/views/nodes/save_text.rjs +3 -3
- data/app/views/nodes/table_update.rjs +1 -2
- data/app/views/nodes/update.rjs +1 -1
- data/app/views/relations/_form.erb +15 -15
- data/app/views/relations/_li.erb +5 -11
- data/app/views/relations/create.rjs +1 -1
- data/app/views/relations/index.erb +1 -1
- data/app/views/sites/_form.erb +3 -3
- data/app/views/sites/_li.erb +1 -1
- data/app/views/sites/index.erb +1 -1
- data/app/views/templates/document_create_tabs/_file.rhtml +3 -3
- data/app/views/templates/document_create_tabs/_template.rhtml +9 -9
- data/app/views/templates/document_create_tabs/{_text_doc.rhtml → _text_document.rhtml} +4 -4
- data/app/views/templates/edit_tabs/{_contact.rhtml → _basecontact.rhtml} +2 -2
- data/app/views/templates/edit_tabs/_document.rhtml +3 -3
- data/app/views/templates/edit_tabs/_help.rhtml +2 -2
- data/app/views/templates/edit_tabs/_image.rhtml +4 -4
- data/app/views/templates/edit_tabs/_template.rhtml +6 -6
- data/app/views/templates/edit_tabs/_text.rhtml +1 -1
- data/app/views/templates/edit_tabs/_textdocument.rhtml +4 -4
- data/app/views/templates/edit_tabs/_title.rhtml +9 -14
- data/app/views/users/_form.rhtml +1 -1
- data/app/views/users/change_info.rjs +1 -1
- data/app/views/users/change_password.rjs +1 -1
- data/app/views/users/index.rhtml +1 -1
- data/app/views/users/preferences.html.erb +10 -4
- data/app/views/users/update.rjs +1 -1
- data/app/views/versions/_list.rhtml +1 -1
- data/app/views/versions/_tr.rhtml +1 -1
- data/app/views/versions/backup.rjs +1 -1
- data/app/views/versions/destroy.rjs +6 -2
- data/app/views/versions/diff.rjs +1 -1
- data/app/views/versions/edit.rhtml +14 -6
- data/app/views/versions/preview.rjs +1 -1
- data/app/views/versions/show.rjs +1 -1
- data/app/views/virtual_classes/_add.erb +1 -1
- data/app/views/virtual_classes/_form.erb +15 -10
- data/app/views/virtual_classes/_li.erb +13 -7
- data/app/views/virtual_classes/create.rjs +2 -2
- data/app/views/virtual_classes/edit.html.erb +7 -0
- data/app/views/virtual_classes/index.erb +2 -2
- data/app/views/zafu/default/Node-+adminLayout.zafu +47 -0
- data/app/views/zafu/default/Node-+index.zafu +1 -0
- data/app/views/{templates/defaults/+login.zafu → zafu/default/Node-+login.zafu} +9 -7
- data/app/views/zafu/default/Node-+notFound.zafu +14 -0
- data/app/views/zafu/default/Node-+popupLayout.zafu +24 -0
- data/app/views/zafu/default/Node-+search.zafu +23 -0
- data/app/views/zafu/default/Node.zafu +95 -0
- data/bin/zena +0 -2
- data/bricks/captcha/lib/bricks/captcha.rb +62 -0
- data/bricks/captcha/zena/init.rb +11 -0
- data/bricks/data2pdf/.document +5 -0
- data/bricks/data2pdf/README +19 -0
- data/bricks/data2pdf/Rakefile +36 -0
- data/bricks/data2pdf/VERSION +1 -0
- data/bricks/data2pdf/lib/data2pdf.rb +60 -0
- data/bricks/data2pdf/lib/engines/prince.rb +39 -0
- data/bricks/data2pdf/lib/engines/xhtml2pdf.rb +41 -0
- data/bricks/data2pdf/lib/install.rb +111 -0
- data/bricks/data2pdf/test/engines/test_prince.rb +14 -0
- data/bricks/data2pdf/test/engines/test_xhtml2pdf.rb +14 -0
- data/bricks/data2pdf/test/fixtures/application.css +241 -0
- data/bricks/data2pdf/test/fixtures/contact.html +153 -0
- data/bricks/data2pdf/test/fixtures/pisa-default.css +207 -0
- data/bricks/data2pdf/test/fixtures/sheet1.css +207 -0
- data/bricks/data2pdf/test/fixtures/sheet2.css +207 -0
- data/bricks/data2pdf/test/fixtures/simple-html.html +337 -0
- data/bricks/data2pdf/test/fixtures/simple-text.txt +1 -0
- data/bricks/data2pdf/test/helper.rb +23 -0
- data/bricks/data2pdf/test/shoulda_macros/shoulda_data2pdf.rb +91 -0
- data/bricks/data2pdf/test/unit/test_rendering.rb +37 -0
- data/bricks/math/{patch/application_helper.rb → lib/bricks/math.rb} +0 -4
- data/bricks/math/zena/init.rb +4 -0
- data/bricks/sphinx/README +2 -2
- data/bricks/sphinx/lib/use_sphinx.rb +7 -11
- data/bricks/sphinx/{misc → zena}/deploy.rb +0 -0
- data/bricks/sphinx/{patch/node.rb → zena/init.rb} +1 -3
- data/bricks/sphinx/{migrate → zena/migrate}/20091102171258_add_delta_for_sphinx.rb +0 -0
- data/bricks/sphinx/{misc → zena}/sphinx.yml +0 -0
- data/bricks/sphinx/{misc → zena}/tasks.rb +0 -0
- data/bricks/tags/lib/{has_tags.rb → bricks/tags.rb} +12 -24
- data/bricks/tags/zena/init.rb +21 -0
- data/bricks/tags/{test → zena/test}/sites/zena/links.yml +0 -0
- data/bricks/tags/{test → zena/test}/unit/tags_test.rb +1 -1
- data/bricks/tags/zena/test/zafu/tags.yml +41 -0
- data/bricks/worker/README +2 -2
- data/bricks/worker/{misc → zena}/deploy.rb +0 -0
- data/bricks/worker/{misc → zena}/init.rb +2 -1
- data/bricks/worker/{migrate → zena/migrate}/20091104191643_create_delayed_jobs_table.rb +0 -0
- data/bricks/worker/{misc → zena}/tasks.rb +0 -0
- data/bricks/worker/{misc → zena}/worker +0 -0
- data/config/bricks.yml +2 -0
- data/config/deploy.rb +2 -7
- data/config/environment.rb +3 -5
- data/config/gems.yml +9 -4
- data/db/20100628074512_zena0x_to1x.rb +223 -0
- data/db/init/base/help.en.zml +3 -3
- data/db/init/base/help.fr.zml +3 -3
- data/db/init/base/skins.zml +2 -2
- data/db/init/base/skins/default.zml +4 -4
- data/db/init/base/skins/default/Node-+adminLayout.zafu +8 -7
- data/db/init/base/skins/default/Node-+login.zafu +9 -7
- data/db/init/base/skins/default/Node-+search.zafu +4 -1
- data/db/init/base/skins/default/Node-tree.zafu +3 -3
- data/db/init/base/skins/default/Node.zafu +20 -20
- data/db/init/base/skins/default/Project.zafu +1 -1
- data/db/init/base/skins/default/notes.zafu +5 -5
- data/db/init/base/skins/default/style.css +17 -12
- data/db/migrate/001_create_base.rb +1 -1
- data/db/migrate/008_user_status.rb +1 -1
- data/db/migrate/020_create_participation.rb +3 -3
- data/db/migrate/024_correct_vclass_kpath.rb +5 -3
- data/db/migrate/025_move_tag_into_vclass.rb +7 -5
- data/db/migrate/030_redit_auto_publish_site_settings.rb +2 -2
- data/db/migrate/032_caches_context_as_hash.rb +4 -2
- data/db/migrate/046_fix_zazen_image_tag.rb +2 -2
- data/db/migrate/047_change_default_link_id_to_zero.rb +4 -2
- data/db/migrate/20090825201159_insert_zero_link.rb +1 -1
- data/db/migrate/20090924141459_zafu_fix_sept09.rb +2 -2
- data/db/migrate/20100125062254_add_dynamo_to_version.rb +9 -0
- data/db/migrate/20100201133242_remove_default_status_on_version.rb +9 -0
- data/db/migrate/20100208194210_create_attachments.rb +17 -0
- data/db/migrate/20100210112319_change_dynamo_to_property.rb +9 -0
- data/db/migrate/20100320145726_transform_template_contents_into_index.rb +13 -0
- data/db/migrate/20100328125634_change_skin_name_to_id.rb +31 -0
- data/db/migrate/20100417061257_add_properties_to_sites.rb +9 -0
- data/db/migrate/20100419163149_rename_name_to_node_name.rb +9 -0
- data/db/migrate/20100422091606_change_v_class_table_into_roles.rb +27 -0
- data/db/migrate/20100422094048_node_habtm_roles.rb +13 -0
- data/db/migrate/20100422115935_create_columns.rb +15 -0
- data/db/migrate/20100513181529_add_site_id_to_columns.rb +9 -0
- data/db/migrate/20100519091711_add_index_definition_to_columns.rb +9 -0
- data/db/migrate/20100519091940_create_idx_nodes_string.rb +14 -0
- data/db/migrate/20100519232432_create_idx_nodes_ml_string.rb +15 -0
- data/db/migrate/20100525113858_add_porperties_to_users.rb +9 -0
- data/db/migrate/20100526090140_renamed_contact_model_to_base_contact.rb +13 -0
- data/db/migrate/20100527130937_change_column_index_to_string.rb +9 -0
- data/db/migrate/20100531135128_add_fulltext_builder_fields.rb +28 -0
- data/doc/zafu_changes.yml +2 -2
- data/lib/bricks/loader.rb +48 -26
- data/lib/exif_data.rb +21 -1
- data/lib/gettext_strings.rb +8 -1
- data/lib/tasks/zena.rake +55 -20
- data/lib/version_off.rb +323 -0
- data/lib/zazen_parser.rb +9 -0
- data/lib/zena.rb +13 -14
- data/lib/zena/acts/enrollable.rb +232 -0
- data/lib/zena/acts/secure.rb +86 -506
- data/lib/zena/acts/secure_node.rb +483 -0
- data/lib/zena/acts/serializable.rb +149 -0
- data/lib/zena/app.rb +36 -23
- data/lib/zena/code_syntax.rb +26 -2
- data/lib/zena/controller/test_case.rb +23 -2
- data/lib/zena/core_ext/file_utils.rb +3 -3
- data/lib/zena/core_ext/string.rb +2 -2
- data/lib/zena/db.rb +180 -24
- data/lib/zena/deploy.rb +140 -183
- data/lib/zena/deploy/awstats.conf.rhtml +4 -4
- data/lib/zena/deploy/httpd.rhtml +1 -2
- data/lib/zena/deploy/stats.vhost.rhtml +7 -7
- data/lib/zena/deploy/vhost.rhtml +1 -1
- data/lib/zena/deploy/vhost_www.rhtml +4 -4
- data/lib/zena/foxy_parser.rb +345 -295
- data/lib/zena/info.rb +1 -2
- data/lib/zena/integration/test_case.rb +70 -0
- data/lib/zena/loader/yaml_loader.rb +80 -0
- data/lib/zena/migrator.rb +2 -2
- data/lib/zena/parser.rb +19 -17
- data/lib/zena/parser/zafu_rules.rb +7 -0
- data/lib/zena/parser/zafu_tags.rb +2 -2
- data/lib/zena/parser/zazen_rules.rb +9 -29
- data/lib/zena/parser/zena_rules.rb +2 -2
- data/lib/zena/refactor/act_as_content.rb +6 -0
- data/lib/zena/routes.rb +9 -3
- data/lib/zena/site_worker.rb +48 -0
- data/lib/zena/test_controller.rb +49 -12
- data/lib/zena/use.rb +47 -0
- data/lib/zena/use/action.rb +230 -0
- data/lib/zena/use/ajax.rb +287 -13
- data/lib/zena/use/authlogic.rb +28 -12
- data/lib/zena/use/calendar.rb +2 -2
- data/lib/zena/use/conditional.rb +41 -0
- data/lib/zena/use/context.rb +187 -0
- data/lib/zena/use/dates.rb +87 -30
- data/lib/zena/use/display.rb +598 -0
- data/lib/zena/use/dyn_attributes.rb +4 -4
- data/lib/zena/use/error_rendering.rb +3 -1
- data/lib/zena/use/fixtures.rb +56 -22
- data/lib/zena/use/forms.rb +584 -0
- data/lib/zena/use/fulltext.rb +90 -0
- data/lib/zena/use/grid.rb +12 -7
- data/lib/zena/use/html_tags.rb +8 -459
- data/lib/zena/use/i18n.rb +172 -109
- data/lib/zena/use/image_builder.rb +1 -2
- data/lib/zena/use/ml_index.rb +56 -0
- data/lib/zena/use/nested_attributes_alias.rb +2 -2
- data/lib/zena/use/node_name.rb +94 -0
- data/lib/zena/use/query_builder.rb +355 -0
- data/lib/zena/use/query_comment.rb +63 -73
- data/lib/zena/use/query_node.rb +404 -317
- data/lib/zena/use/recursion.rb +71 -0
- data/lib/zena/use/refactor.rb +27 -40
- data/lib/zena/use/relations.rb +9 -3
- data/lib/zena/use/rendering.rb +143 -116
- data/lib/zena/use/search.rb +79 -21
- data/lib/zena/use/test_helper.rb +17 -9
- data/lib/zena/use/upload.rb +1 -1
- data/lib/zena/use/urls.rb +534 -28
- data/lib/zena/use/version_hash.rb +154 -0
- data/lib/zena/use/workflow.rb +635 -0
- data/lib/zena/use/zafu_attributes.rb +205 -0
- data/lib/zena/use/zafu_eval.rb +21 -0
- data/lib/zena/use/zafu_safe_definitions.rb +36 -0
- data/lib/zena/use/zafu_templates.rb +459 -0
- data/lib/zena/use/zazen.rb +53 -23
- data/lib/zena/view/test_case.rb +56 -7
- data/lib/zena/webdav_adapter.rb +8 -8
- data/lib/zena/zafu_compiler.rb +25 -0
- data/locale/de/LC_MESSAGES/zena.mo +0 -0
- data/locale/de/zena.mo +0 -0
- data/locale/de/zena.po +920 -781
- data/locale/en/LC_MESSAGES/zena.mo +0 -0
- data/locale/en/zena.mo +0 -0
- data/locale/en/zena.po +530 -405
- data/locale/fr/LC_MESSAGES/zena.mo +0 -0
- data/locale/fr/zena.mo +0 -0
- data/locale/fr/zena.po +588 -432
- data/locale/zena.pot +391 -353
- data/old_zafu/action.rb +129 -0
- data/{lib/zafu → old_zafu}/ajax.rb +0 -24
- data/{lib/zafu → old_zafu}/attributes.rb +2 -2
- data/{lib/zafu → old_zafu}/calendar.rb +1 -1
- data/{lib/zafu → old_zafu}/context.rb +4 -8
- data/{lib/zafu → old_zafu}/core/html.rb +1 -1
- data/old_zafu/core/move_to_parser.rb +74 -0
- data/old_zafu/dates.rb +20 -0
- data/{lib/zafu → old_zafu}/display.rb +33 -146
- data/{lib/zafu → old_zafu}/eval.rb +0 -0
- data/{lib/zafu → old_zafu}/experimental.rb +1 -1
- data/{lib/zafu → old_zafu}/i18n.rb +1 -1
- data/{lib/zafu → old_zafu}/meta.rb +0 -0
- data/old_zafu/query_node.rb +278 -0
- data/{lib/zafu → old_zafu}/refactor.rb +2 -12
- data/old_zafu/support/context.rb +146 -0
- data/{lib/zafu → old_zafu}/support/dom.rb +1 -43
- data/{lib/zafu → old_zafu}/support/erb.rb +0 -0
- data/{lib/zafu → old_zafu}/support/flow.rb +1 -13
- data/old_zafu/support/forms.rb +7 -0
- data/old_zafu/support/links.rb +75 -0
- data/{lib → old_zafu}/zafu_parser.rb +2 -2
- data/public/images/attach_window.png +0 -0
- data/public/images/dettach_window.png +0 -0
- data/public/images/ext/{contact.png → basecontact.png} +0 -0
- data/public/images/toggle_off.png +0 -0
- data/public/images/toggle_on.png +0 -0
- data/public/images/window/bottom_left.png +0 -0
- data/public/images/window/bottom_mid.png +0 -0
- data/public/images/window/bottom_right.png +0 -0
- data/public/images/window/center_left.png +0 -0
- data/public/images/window/center_right.png +0 -0
- data/public/images/window/close.png +0 -0
- data/public/images/window/maximize.png +0 -0
- data/public/images/window/minimize.png +0 -0
- data/public/images/window/overlay.png +0 -0
- data/public/images/window/sizer.png +0 -0
- data/public/images/window/top_left.png +0 -0
- data/public/images/window/top_mid.png +0 -0
- data/public/images/window/top_right.png +0 -0
- data/public/javascripts/builder.js +1 -3
- data/public/javascripts/controls.js +3 -5
- data/public/javascripts/dragdrop.js +5 -8
- data/public/javascripts/effects.js +6 -15
- data/public/javascripts/prototype.js +1574 -1020
- data/public/javascripts/scriptaculous.js +13 -7
- data/public/javascripts/slider.js +5 -7
- data/public/javascripts/sound.js +6 -4
- data/public/javascripts/unittest.js +69 -71
- data/public/javascripts/window.js +1843 -0
- data/public/javascripts/zena.js +216 -16
- data/public/stylesheets/admin.css +18 -13
- data/public/stylesheets/default.css +18 -17
- data/public/stylesheets/popup.css +4 -4
- data/public/stylesheets/window.css +155 -0
- data/public/stylesheets/zena.css +9 -8
- data/test/custom_queries/complex.host.yml +8 -8
- data/test/fixtures/files/Node-test.zafu +11 -11
- data/test/fixtures/files/import.tgz +0 -0
- data/test/fixtures/files/simple.zml.gz +0 -0
- data/test/fixtures/import/photos.en.zml +3 -3
- data/test/fixtures/import/photos/bird.jpg.en.zml +1 -1
- data/test/fixtures/import/photos/bird.jpg.fr.zml +1 -1
- data/test/fixtures/import/simple.zml +2 -2
- data/test/functional/application_controller_test.rb +2 -41
- data/test/functional/columns_controller_test.rb +140 -0
- data/test/functional/data_entries_controller_test.rb +1 -1
- data/test/functional/documents_controller_test.rb +88 -5
- data/test/functional/nodes_controller_commit_test.rb +71 -0
- data/test/functional/nodes_controller_test.rb +393 -93
- data/test/functional/note_controller_test.rb +5 -5
- data/test/functional/relations_controller_test.rb +1 -1
- data/test/functional/users_controller_test.rb +72 -14
- data/test/functional/versions_controller_test.rb +9 -8
- data/test/functional/virtual_classes_controller_test.rb +142 -65
- data/test/integration/multiple_hosts_test.rb +28 -20
- data/test/integration/navigation_test.rb +121 -83
- data/test/integration/query_node/basic.yml +128 -0
- data/test/integration/query_node/comments.yml +23 -0
- data/test/integration/query_node/complex.yml +111 -0
- data/test/integration/query_node/dates.yml +22 -0
- data/test/integration/query_node/errors.yml +12 -0
- data/test/integration/query_node/filters.yml +123 -0
- data/test/integration/query_node/properties.yml +41 -0
- data/test/integration/query_node/relations.yml +75 -0
- data/test/integration/query_node_test.rb +189 -0
- data/test/integration/xml_api_test.rb +166 -0
- data/test/integration/zafu_compiler/action.yml +67 -0
- data/test/integration/zafu_compiler/ajax.yml +263 -0
- data/test/{unit/zena/zena_tags → integration/zafu_compiler}/apphelper.yml +0 -0
- data/test/integration/zafu_compiler/asset.yml +13 -0
- data/test/integration/zafu_compiler/basic.yml +518 -0
- data/test/integration/zafu_compiler/calendar.yml +35 -0
- data/test/{unit/zena/zena_tags → integration/zafu_compiler}/complex.yml +16 -16
- data/test/integration/zafu_compiler/conditional.yml +173 -0
- data/test/{unit/zena/zena_tags → integration/zafu_compiler}/data.yml +3 -3
- data/test/integration/zafu_compiler/dates.yml +58 -0
- data/test/integration/zafu_compiler/display.yml +273 -0
- data/test/integration/zafu_compiler/errors.yml +79 -0
- data/test/{unit/zena/zena_tags → integration/zafu_compiler}/eval.yml +6 -2
- data/test/integration/zafu_compiler/forms.yml +130 -0
- data/test/integration/zafu_compiler/i18n.yml +107 -0
- data/test/integration/zafu_compiler/later.yml +31 -0
- data/test/integration/zafu_compiler/off/off.yml +15 -0
- data/test/integration/zafu_compiler/recursion.yml +28 -0
- data/test/integration/zafu_compiler/relations.yml +487 -0
- data/test/integration/zafu_compiler/roles.yml +28 -0
- data/test/{unit/zena/zena_tags → integration/zafu_compiler}/rubyless.yml +10 -9
- data/test/integration/zafu_compiler/safe_definitions.yml +65 -0
- data/test/integration/zafu_compiler/search.yml +13 -0
- data/test/integration/zafu_compiler/security.yml +30 -0
- data/test/integration/zafu_compiler/site.yml +14 -0
- data/test/integration/zafu_compiler/urls.yml +189 -0
- data/test/integration/zafu_compiler/user.yml +32 -0
- data/test/integration/zafu_compiler/version.yml +47 -0
- data/test/integration/zafu_compiler/workflow.yml +36 -0
- data/test/integration/zafu_compiler/zafu_attributes.yml +169 -0
- data/test/{unit/zena/zena_tags → integration/zafu_compiler}/zazen.yml +7 -3
- data/test/{unit/zena/zena_tags_test.rb → integration/zafu_compiler_test.rb} +137 -57
- data/test/sites/complex/nodes.yml +48 -47
- data/test/sites/complex/{virtual_classes.yml → roles.yml} +2 -1
- data/test/sites/ocean/nodes.yml +7 -7
- data/test/sites/ocean/versions.yml +30 -21
- data/test/sites/zena/columns.yml +12 -0
- data/test/sites/zena/nodes.yml +33 -32
- data/test/sites/zena/{virtual_classes.yml → roles.yml} +11 -1
- data/test/sites/zena/sites.yml +4 -1
- data/test/sites/zena/users.yml +5 -4
- data/test/sites/zena/versions.yml +398 -279
- data/test/test_helper.rb +2 -1
- data/test/test_zena.rb +3 -8
- data/test/unit/after_commit_test.rb +103 -0
- data/test/unit/attachment_test.rb +266 -0
- data/test/unit/base_contact_test.rb +242 -0
- data/test/unit/cached_page_test.rb +6 -6
- data/test/unit/column_test.rb +77 -0
- data/test/unit/comment_test.rb +1 -1
- data/test/unit/data_entry_test.rb +8 -2
- data/test/unit/document_test.rb +393 -211
- data/test/unit/exif_data_test.rb +1 -1
- data/test/unit/iformat_test.rb +9 -9
- data/test/unit/image_test.rb +358 -284
- data/test/unit/multi_version_test.rb +4 -0
- data/test/unit/multiversion_test.rb +2 -1013
- data/test/unit/node_name_test.rb +137 -0
- data/test/unit/node_test.rb +374 -461
- data/test/unit/note_test.rb +23 -23
- data/test/unit/page_test.rb +23 -23
- data/test/unit/project_test.rb +2 -2
- data/test/unit/relation_proxy_test.rb +25 -6
- data/test/unit/relation_test.rb +156 -24
- data/test/unit/role_test.rb +122 -0
- data/test/unit/section_test.rb +2 -2
- data/test/unit/site_test.rb +48 -12
- data/test/unit/skin_test.rb +0 -13
- data/test/unit/template_test.rb +361 -314
- data/test/unit/text_document_test.rb +105 -33
- data/test/unit/transparent_version_test.rb +4 -0
- data/test/unit/user_test.rb +10 -10
- data/test/unit/version_test.rb +209 -301
- data/test/unit/virtual_class_test.rb +21 -29
- data/test/unit/workflow_test.rb +1075 -0
- data/test/unit/zena/acts/enrollable_test.rb +211 -0
- data/test/unit/{secure_test.rb → zena/acts/secure_test.rb} +190 -105
- data/test/unit/zena/acts/serializable_test.rb +85 -0
- data/test/unit/zena/db_test.rb +27 -14
- data/test/unit/zena/parser/zazen.yml +1 -1
- data/test/unit/zena/use/action_test.rb +109 -0
- data/test/unit/zena/use/calendar_test.rb +8 -8
- data/test/unit/zena/use/dates_test.rb +10 -0
- data/test/unit/zena/use/dates_view_methods_test.rb +8 -12
- data/test/unit/zena/use/fulltext_test.rb +82 -0
- data/test/unit/zena/use/html_tags_test.rb +225 -201
- data/test/unit/zena/use/i18n_test.rb +56 -26
- data/test/unit/zena/use/ml_index_test.rb +129 -0
- data/test/unit/zena/use/nested_attributes_alias_view_test.rb +10 -10
- data/test/unit/zena/use/query_node_test.rb +104 -0
- data/test/unit/zena/use/refactor_test.rb +4 -15
- data/test/unit/zena/use/rendering_test.rb +23 -16
- data/test/unit/zena/use/upload_test.rb +2 -2
- data/test/unit/zena/use/urls_test.rb +2 -0
- data/test/unit/zena/use/version_hash_test.rb +126 -0
- data/test/unit/zena/use/zafu_template_test.rb +135 -0
- data/test/unit/zena/use/zazen_test.rb +85 -61
- data/vendor/plugins/gettext_i18n_rails/README.markdown +26 -22
- data/vendor/plugins/gettext_i18n_rails/Rakefile +31 -5
- data/vendor/plugins/gettext_i18n_rails/VERSION +1 -0
- data/vendor/plugins/gettext_i18n_rails/gettext_i18n_rails.gemspec +64 -0
- data/vendor/plugins/gettext_i18n_rails/init.rb +7 -3
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails.rb +5 -6
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/active_record.rb +6 -2
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/backend.rb +1 -1
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/model_attributes_finder.rb +2 -2
- data/vendor/plugins/gettext_i18n_rails/{tasks → lib/tasks}/gettext_rails_i18n.rake +10 -9
- data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/action_controller_spec.rb +7 -3
- data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/active_record_spec.rb +7 -5
- data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/backend_spec.rb +7 -7
- data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails_spec.rb +4 -0
- data/vendor/plugins/gettext_i18n_rails/spec/spec_helper.rb +11 -9
- data/vendor/plugins/mysql_timezone_utc/init.rb +1 -0
- data/vendor/plugins/mysql_timezone_utc/lib/mysql_timezone_utc.rb +14 -0
- data/vendor/plugins/postgresql_timezone_utc/init.rb +1 -0
- data/vendor/plugins/postgresql_timezone_utc/lib/postgresql_timezone_utc.rb +14 -0
- data/zena.gemspec +281 -123
- metadata +354 -160
- data/app/models/contact.rb +0 -32
- data/app/models/document_version.rb +0 -13
- data/app/models/image_version.rb +0 -21
- data/app/models/text_document_version.rb +0 -29
- data/app/views/templates/defaults/+adminLayout.zafu +0 -69
- data/bricks/captcha/patch/application_controller.rb +0 -10
- data/bricks/captcha/patch/application_helper.rb +0 -32
- data/bricks/captcha/patch/site.rb +0 -2
- data/bricks/captcha/zafu/captcha.rb +0 -29
- data/bricks/tags/patch/node.rb +0 -15
- data/bricks/tags/test/zafu/tags.yml +0 -40
- data/db/schema.rb +0 -295
- data/lib/zafu/action.rb +0 -285
- data/lib/zafu/core/move_to_parser.rb +0 -167
- data/lib/zafu/dates.rb +0 -58
- data/lib/zafu/support/context.rb +0 -265
- data/lib/zafu/support/forms.rb +0 -461
- data/lib/zafu/support/links.rb +0 -306
- data/lib/zena/acts/multiversion.rb +0 -755
- data/lib/zena/fix/mysql_connection.rb +0 -17
- data/lib/zena/use/query_node_finders.rb +0 -91
- data/lib/zena/use/zafu.rb +0 -514
- data/test/helpers/query_node/basic.yml +0 -149
- data/test/helpers/query_node/comments.yml +0 -18
- data/test/helpers/query_node/complex.yml +0 -98
- data/test/helpers/query_node/filters.yml +0 -110
- data/test/helpers/query_node/relations.yml +0 -43
- data/test/helpers/query_node_test.rb +0 -116
- data/test/sites/ocean/contact_contents.yml +0 -19
- data/test/sites/ocean/template_contents.yml +0 -8
- data/test/sites/zena/contact_contents.yml +0 -55
- data/test/sites/zena/document_contents.yml +0 -76
- data/test/sites/zena/dyn_attributes.yml +0 -43
- data/test/sites/zena/template_contents.yml +0 -103
- data/test/unit/contact_content_test.rb +0 -33
- data/test/unit/contact_test.rb +0 -39
- data/test/unit/contact_version_test.rb +0 -48
- data/test/unit/document_content_test.rb +0 -110
- data/test/unit/document_version_test.rb +0 -11
- data/test/unit/dyn_attributes_test.rb +0 -229
- data/test/unit/image_content_test.rb +0 -154
- data/test/unit/image_version_test.rb +0 -18
- data/test/unit/template_content_test.rb +0 -9
- data/test/unit/text_document_version_test.rb +0 -37
- data/test/unit/zena/use/zafu_test.rb +0 -41
- data/test/unit/zena/zena_tags/ajax.yml +0 -233
- data/test/unit/zena/zena_tags/basic.yml +0 -1306
- data/test/unit/zena/zena_tags/errors.yml +0 -71
- data/test/unit/zena/zena_tags/relations.yml +0 -405
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class NodeNameTest < Zena::Unit::TestCase
|
4
|
+
|
5
|
+
context 'A visitor with write access' do
|
6
|
+
setup do
|
7
|
+
login(:tiger)
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'on a node' do
|
11
|
+
subject do
|
12
|
+
secure!(Node) { nodes(:people) }
|
13
|
+
end
|
14
|
+
|
15
|
+
should 'sync node_name with title on publish' do
|
16
|
+
assert subject.update_attributes(:title => 'nice people')
|
17
|
+
assert subject.publish
|
18
|
+
assert_equal 'nicePeople', subject.node_name
|
19
|
+
end
|
20
|
+
|
21
|
+
should 'sync node_name with title if name changed' do
|
22
|
+
assert subject.update_attributes(:title => 'nice people', :node_name => 'foobar')
|
23
|
+
assert_equal 'foobar', subject.node_name
|
24
|
+
assert subject.publish
|
25
|
+
assert_equal 'nicePeople', subject.node_name
|
26
|
+
end
|
27
|
+
|
28
|
+
should 'not sync node_name with title on redaction' do
|
29
|
+
assert subject.update_attributes(:title => 'nice people')
|
30
|
+
assert_equal 'people', subject.node_name
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'with another node with same node_name' do
|
34
|
+
setup do
|
35
|
+
page = secure!(Page) { Page.create(
|
36
|
+
:parent_id => subject.parent_id,
|
37
|
+
:title => 'nice people') # ==> nicePeople
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
should 'not sync node_name with title on redaction' do
|
42
|
+
assert subject.update_attributes(:title => 'nice people')
|
43
|
+
assert_equal 'people', subject.node_name
|
44
|
+
end
|
45
|
+
|
46
|
+
should 'set an error on node_name with title on publish' do
|
47
|
+
assert subject.update_attributes(:title => 'nice people')
|
48
|
+
assert !subject.publish
|
49
|
+
assert_equal subject.errors[:node_name], 'has already been taken'
|
50
|
+
end
|
51
|
+
end # with another node with same node_name
|
52
|
+
end # on a node
|
53
|
+
end # A visitor with write access
|
54
|
+
|
55
|
+
# TODO: move these tests above
|
56
|
+
|
57
|
+
def test_get_fullpath_rebuild
|
58
|
+
login(:lion)
|
59
|
+
node = secure!(Node) { nodes(:lake) }
|
60
|
+
assert_equal 'projects/cleanWater/lakeAddress', node.fullpath
|
61
|
+
assert node.update_attributes(:parent_id => nodes_id(:collections))
|
62
|
+
assert_equal 'collections/lakeAddress', node.fullpath
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_fullpath_updated_on_parent_rename
|
66
|
+
login(:tiger)
|
67
|
+
node = secure!(Node) { nodes(:tiger) }
|
68
|
+
assert_equal 'people/tiger', node.fullpath
|
69
|
+
node = secure!(Node) { nodes(:tiger) }
|
70
|
+
assert_equal 'people/tiger', node[:fullpath] # make sure fullpath is cached
|
71
|
+
|
72
|
+
node = secure!(Node) { nodes(:people) }
|
73
|
+
assert node.update_attributes(:title => 'nice people')
|
74
|
+
assert node.publish
|
75
|
+
assert_equal 'nicePeople', node.node_name # sync node_name
|
76
|
+
node = secure!(Node) { nodes(:tiger) }
|
77
|
+
assert_equal 'nicePeople/tiger', node[:fullpath]
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_rootpath
|
81
|
+
login(:ant)
|
82
|
+
node = secure!(Node) { nodes(:status) }
|
83
|
+
assert_equal 'zena/projects/cleanWater/status', node.rootpath
|
84
|
+
node = secure!(Node) { nodes(:zena) }
|
85
|
+
assert_equal 'zena', node.rootpath
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_basepath
|
89
|
+
login(:tiger)
|
90
|
+
node = secure!(Node) { nodes(:status) }
|
91
|
+
assert_equal 'projects/cleanWater', node.basepath
|
92
|
+
node = secure!(Node) { nodes(:projects) }
|
93
|
+
assert_equal '', node.basepath
|
94
|
+
node = secure!(Node) { nodes(:proposition) }
|
95
|
+
assert_equal '', node.basepath
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_sync_node_name_before_publish_if_single_version
|
99
|
+
login(:ant)
|
100
|
+
node = secure!(Node) { Node.create(:title => 'Eve', :parent_id => nodes_id(:people)) }
|
101
|
+
assert_equal Zena::Status[:red], node.v_status
|
102
|
+
assert_equal 'Eve', node.node_name
|
103
|
+
node.update_attributes(:title => 'Lilith')
|
104
|
+
assert_equal Zena::Status[:red], node.v_status
|
105
|
+
assert_equal 'Lilith', node.node_name
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_sync_node_name_on_title_change_auto_pub_no_sync
|
109
|
+
Site.connection.execute "UPDATE sites set auto_publish = #{Zena::Db::TRUE}, redit_time = 3600 WHERE id = #{sites_id(:zena)}"
|
110
|
+
Version.connection.execute "UPDATE versions set updated_at = '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}' WHERE node_id IN (#{nodes_id(:status)},#{nodes_id(:people)})"
|
111
|
+
login(:tiger)
|
112
|
+
|
113
|
+
node = secure!(Node) { nodes(:status) }
|
114
|
+
assert node.update_attributes(:title => 'simply different')
|
115
|
+
assert_equal 'simplyDifferent', node.node_name
|
116
|
+
visitor.lang = 'fr'
|
117
|
+
# not ref lang
|
118
|
+
node = secure!(Node) { nodes(:people) }
|
119
|
+
assert node.update_attributes(:title => 'des gens sympathiques')
|
120
|
+
assert_equal 'fr', node.v_lang
|
121
|
+
assert_equal 'desGensSympathiques', node.node_name
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_sync_node_name_on_title_change_auto_pub
|
125
|
+
test_site('zena')
|
126
|
+
Site.connection.execute "UPDATE sites set auto_publish = #{Zena::Db::TRUE}, redit_time = 3600 WHERE id = #{sites_id(:zena)}"
|
127
|
+
Version.connection.execute "UPDATE versions set updated_at = '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}' WHERE node_id IN (#{nodes_id(:people)})"
|
128
|
+
login(:tiger)
|
129
|
+
node = secure!(Node) { nodes(:people) }
|
130
|
+
# was in sync, correct lang
|
131
|
+
assert_equal node.node_name, node.title
|
132
|
+
assert node.update_attributes(:title => 'nice people')
|
133
|
+
node = secure!(Node) { nodes(:people) }
|
134
|
+
assert_equal 'nice people', node.title
|
135
|
+
assert_equal 'nicePeople', node.node_name
|
136
|
+
end
|
137
|
+
end
|
data/test/unit/node_test.rb
CHANGED
@@ -1,15 +1,117 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
class NodeTest < Zena::Unit::TestCase
|
4
5
|
|
5
6
|
NEW_DEFAULT = {
|
6
|
-
:
|
7
|
-
:rgroup_id
|
8
|
-
:wgroup_id
|
9
|
-
:dgroup_id
|
10
|
-
:parent_id
|
7
|
+
:node_name => 'hello',
|
8
|
+
:rgroup_id => Zena::FoxyParser::id('zena', 'public'),
|
9
|
+
:wgroup_id => Zena::FoxyParser::id('zena', 'workers'),
|
10
|
+
:dgroup_id => Zena::FoxyParser::id('zena', 'managers'),
|
11
|
+
:parent_id => Zena::FoxyParser::id('zena', 'cleanWater'),
|
11
12
|
}.freeze
|
12
13
|
|
14
|
+
context 'On a node' do
|
15
|
+
subject do
|
16
|
+
secure!(Node) { nodes(:cleanWater) }
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'with a sub-node' do
|
20
|
+
should 'return true on ancestor?' do
|
21
|
+
assert subject.ancestor?(secure!(Node) { nodes(:status) })
|
22
|
+
end
|
23
|
+
end # with a sub-node
|
24
|
+
|
25
|
+
context 'with a node that is not a sub-node' do
|
26
|
+
should 'return false on ancestor?' do
|
27
|
+
assert !subject.ancestor?(secure!(Node) { nodes(:people) })
|
28
|
+
end
|
29
|
+
end # with a node that is not a sub-node
|
30
|
+
|
31
|
+
should 'return true on ancestor? on self' do
|
32
|
+
assert subject.ancestor?(subject)
|
33
|
+
end
|
34
|
+
end # On a node
|
35
|
+
|
36
|
+
context 'A logged in user' do
|
37
|
+
setup do
|
38
|
+
login(:lion)
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'on a node with write access' do
|
42
|
+
subject do
|
43
|
+
secure!(Node) { nodes(:lion) }
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'adding a comment with m_title' do
|
47
|
+
subject do
|
48
|
+
node = secure!(Node) { nodes(:lion) }
|
49
|
+
node.update_attributes(:m_title => 'Amartya Sen', :m_text => 'Equality of What')
|
50
|
+
node
|
51
|
+
end
|
52
|
+
|
53
|
+
should 'create a Comment' do
|
54
|
+
assert_difference('Comment.count', 1) do
|
55
|
+
subject
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
should 'set comment title from m_title' do
|
60
|
+
assert_equal 'Amartya Sen', subject.comments.first.title
|
61
|
+
end
|
62
|
+
|
63
|
+
should 'set author from visitor' do
|
64
|
+
assert_equal users_id(:lion), subject.comments.first.user_id
|
65
|
+
end
|
66
|
+
end # adding a comment with m_title
|
67
|
+
|
68
|
+
context 'setting an indexed field' do
|
69
|
+
subject do
|
70
|
+
node = secure!(Node) { nodes(:art) }
|
71
|
+
node.update_attributes(:origin => 'Dada')
|
72
|
+
node
|
73
|
+
end
|
74
|
+
|
75
|
+
should 'create index entries' do
|
76
|
+
assert_difference('IdxNodesString.count', 1) do
|
77
|
+
subject
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
should 'write field value in index' do
|
82
|
+
subject
|
83
|
+
index = IdxNodesString.find(:first, :conditions => {:key => 'origin', :node_id => subject.id})
|
84
|
+
assert_equal 'origin', index.key
|
85
|
+
assert_equal 'Dada', index.value
|
86
|
+
end
|
87
|
+
|
88
|
+
should 'keep index entries up to date' do
|
89
|
+
subject
|
90
|
+
|
91
|
+
assert_difference('IdxNodesString.count', 0) do
|
92
|
+
subject.update_attributes(:origin => 'Surrealism')
|
93
|
+
end
|
94
|
+
|
95
|
+
index = IdxNodesString.find(:first, :conditions => {:key => 'origin', :node_id => subject.id})
|
96
|
+
assert_equal 'origin', index.key
|
97
|
+
assert_equal 'Surrealism', index.value
|
98
|
+
end
|
99
|
+
|
100
|
+
should 'find indexed nodes with exact search' do
|
101
|
+
subject # create index entry
|
102
|
+
assert node = Node.search_records(:origin => 'Dada').first
|
103
|
+
assert_equal nodes_id(:art), node.id
|
104
|
+
end
|
105
|
+
|
106
|
+
should 'find indexed nodes with hash search' do
|
107
|
+
subject # create index entry
|
108
|
+
assert node = Node.search_records(:origin => 'Dada').first
|
109
|
+
assert_equal nodes_id(:art), node.id
|
110
|
+
end
|
111
|
+
end # setting an indexed field
|
112
|
+
end # on a node with write access
|
113
|
+
end # A logged in user
|
114
|
+
|
13
115
|
def test_rebuild_fullpath
|
14
116
|
Node.connection.execute "UPDATE nodes SET fullpath = NULL, basepath = NULL WHERE id = #{nodes_id(:wiki)}"
|
15
117
|
login(:ant)
|
@@ -36,109 +138,23 @@ class NodeTest < Zena::Unit::TestCase
|
|
36
138
|
|
37
139
|
def test_match_query
|
38
140
|
query = Node.match_query('smala')
|
39
|
-
assert_equal "nodes.
|
141
|
+
assert_equal "nodes.node_name LIKE 'smala%'", query[:conditions]
|
40
142
|
query = Node.match_query('.', :node => nodes(:wiki))
|
41
143
|
assert_equal ["parent_id = ?", nodes_id(:wiki)], query[:conditions]
|
42
144
|
end
|
43
145
|
|
44
|
-
def transform_attributes_zazen_shortcut_v_text
|
45
|
-
login(:lion)
|
46
|
-
[
|
47
|
-
["Hi, this is just a simple \"test\"::w or \"\"::w+_life.rss. OK ?\n\n!:lake+_pv!",
|
48
|
-
"Hi, this is just a simple \"test\":25 or \"\":29_life.rss. OK ?\n\n!24_pv!"],
|
49
|
-
|
50
|
-
["Hi ![30,:lake+]! ![]!",
|
51
|
-
"Hi ![30,24]! ![]!"],
|
52
|
-
|
53
|
-
["Hi !{:bird,:lake+}! !{}!",
|
54
|
-
"Hi !{30,24}! !{}!"],
|
55
|
-
|
56
|
-
["Hi !30!::clean !:bird!::clean !:bird/nice bird!:21 !30_pv/hello ladies!:21",
|
57
|
-
"Hi !30!:21 !30!:21 !30/nice bird!:21 !30_pv/hello ladies!:21"],
|
58
|
-
|
59
|
-
["Hi, this is normal "":1/ just a\n\n* asf\n* asdf ![23,33]!",
|
60
|
-
"Hi, this is normal "":1/ just a\n\n* asf\n* asdf ![23,33]!"],
|
61
|
-
].each do |src,res|
|
62
|
-
assert_equal res, secure(Node) { Node.transform_attributes( 'v_text' => src )['v_text'] }
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_transform_attributes
|
67
|
-
login(:tiger)
|
68
|
-
visitor[:time_zone] = "Europe/Zurich"
|
69
|
-
[
|
70
|
-
[{'parent_id' => 'lake+'},
|
71
|
-
{'parent_id' => nodes_id(:lake_jpg)}],
|
72
|
-
|
73
|
-
[{'d_super_id' => 'lake', 'd_other_id' => '11'},
|
74
|
-
{'d_super_id' => nodes_zip(:lake), 'd_other_id' => 11}],
|
75
|
-
|
76
|
-
[{'tag_ids' => "33,news"},
|
77
|
-
{'tag_ids' => [nodes_id(:art), nodes_id(:news)]}],
|
78
|
-
|
79
|
-
[{'parent_id' => '999', 'tag_ids' => "999,34,art"},
|
80
|
-
{'parent_id' => '999', 'tag_ids' => [nodes_id(:news),nodes_id(:art)]}],
|
81
|
-
|
82
|
-
[{'link' => {'hot' => {'other_id' => '22', 'date' => '2009-7-15 16:58' }}},
|
83
|
-
{'link' => {'hot' => {'other_id' => nodes_id(:status), 'date' => Time.gm(2009,7,15,16,58)}}}], # this should be 14:58 when #255 is fixed (tz support).
|
84
|
-
].each do |src,res|
|
85
|
-
assert_equal res, secure(Node) { Node.transform_attributes( src ) }
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_get_fullpath_rebuild
|
90
|
-
login(:lion)
|
91
|
-
node = secure!(Node) { nodes(:lake) }
|
92
|
-
assert_equal 'projects/cleanWater/lakeAddress', node.fullpath
|
93
|
-
assert node.update_attributes(:parent_id => nodes_id(:collections))
|
94
|
-
assert_equal 'collections/lakeAddress', node.fullpath
|
95
|
-
end
|
96
|
-
|
97
|
-
def test_fullpath_updated_on_parent_rename
|
98
|
-
login(:tiger)
|
99
|
-
node = secure!(Node) { nodes(:tiger) }
|
100
|
-
assert_equal 'people/tiger', node.fullpath
|
101
|
-
node = secure!(Node) { nodes(:tiger) }
|
102
|
-
assert_equal 'people/tiger', node[:fullpath] # make sure fullpath is cached
|
103
|
-
|
104
|
-
node = secure!(Node) { nodes(:people) }
|
105
|
-
assert node.update_attributes(:v_title => 'nice people')
|
106
|
-
assert node.publish
|
107
|
-
assert_equal 'nicePeople', node.name # sync name
|
108
|
-
node = secure!(Node) { nodes(:tiger) }
|
109
|
-
assert_equal 'nicePeople/tiger', node[:fullpath]
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_rootpath
|
113
|
-
login(:ant)
|
114
|
-
node = secure!(Node) { nodes(:status) }
|
115
|
-
assert_equal 'zena/projects/cleanWater/status', node.rootpath
|
116
|
-
node = secure!(Node) { nodes(:zena) }
|
117
|
-
assert_equal 'zena', node.rootpath
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_basepath
|
121
|
-
login(:tiger)
|
122
|
-
node = secure!(Node) { nodes(:status) }
|
123
|
-
assert_equal 'projects/cleanWater', node.basepath
|
124
|
-
node = secure!(Node) { nodes(:projects) }
|
125
|
-
assert_equal '', node.basepath
|
126
|
-
node = secure!(Node) { nodes(:proposition) }
|
127
|
-
assert_equal '', node.basepath
|
128
|
-
end
|
129
|
-
|
130
146
|
def test_ancestors
|
131
147
|
Node.connection.execute "UPDATE nodes SET parent_id = #{nodes_id(:proposition)} WHERE id = #{nodes_id(:bird_jpg)}"
|
132
148
|
login(:tiger)
|
133
149
|
node = secure!(Node) { nodes(:status) }
|
134
|
-
assert_equal ['zena', 'projects', 'cleanWater'], node.ancestors.map { |a| a[:
|
150
|
+
assert_equal ['zena', 'projects', 'cleanWater'], node.ancestors.map { |a| a[:node_name] }
|
135
151
|
node = secure!(Node) { nodes(:zena) }
|
136
152
|
assert_equal [], node.ancestors
|
137
153
|
node = secure!(Node) { nodes(:bird_jpg) }
|
138
154
|
prop = secure!(Node) { nodes(:proposition)}
|
139
155
|
assert_kind_of Node, prop
|
140
156
|
assert prop.can_read?
|
141
|
-
assert_equal ['zena', 'projects', 'secret', 'proposition'], node.ancestors.map { |a| a[:
|
157
|
+
assert_equal ['zena', 'projects', 'secret', 'proposition'], node.ancestors.map { |a| a[:node_name] }
|
142
158
|
end
|
143
159
|
|
144
160
|
def test_ancestors_infinit_loop
|
@@ -152,12 +168,12 @@ class NodeTest < Zena::Unit::TestCase
|
|
152
168
|
login(:tiger)
|
153
169
|
node = secure!(Node) { nodes(:proposition) }
|
154
170
|
assert_kind_of Node, node
|
155
|
-
assert_equal ['zena', 'projects', 'secret'], node.ancestors.map { |a| a[:
|
171
|
+
assert_equal ['zena', 'projects', 'secret'], node.ancestors.map { |a| a[:node_name] } # ant can view 'proposition' but not the project proposition is in
|
156
172
|
end
|
157
173
|
|
158
174
|
def test_create_simplest
|
159
175
|
login(:ant)
|
160
|
-
test_page = secure!(Node) { Node.create(:
|
176
|
+
test_page = secure!(Node) { Node.create(:node_name => 'yoba', :parent_id => nodes_id(:cleanWater), :inherit=>1 ) }
|
161
177
|
assert ! test_page.new_record? , "Not a new record"
|
162
178
|
assert_equal nodes_id(:cleanWater), test_page.parent[:id]
|
163
179
|
assert_equal 'projects/cleanWater/yoba', test_page.fullpath
|
@@ -166,15 +182,6 @@ class NodeTest < Zena::Unit::TestCase
|
|
166
182
|
assert_equal 'projects/cleanWater', parent.fullpath
|
167
183
|
end
|
168
184
|
|
169
|
-
def test_cannot_update_v_status
|
170
|
-
login(:ant)
|
171
|
-
test_page = secure!(Node) { nodes(:status) }
|
172
|
-
assert_equal 2, test_page.version.number
|
173
|
-
assert test_page.update_attributes( :v_status => Zena::Status[:pub], :v_title => "New funky title")
|
174
|
-
assert_equal 3, test_page.version.number
|
175
|
-
assert_equal Zena::Status[:red], test_page.version.status
|
176
|
-
end
|
177
|
-
|
178
185
|
def test_new_bad_parent
|
179
186
|
login(:tiger)
|
180
187
|
attrs = NEW_DEFAULT.dup
|
@@ -208,16 +215,16 @@ class NodeTest < Zena::Unit::TestCase
|
|
208
215
|
assert node.save , "Save succeeds"
|
209
216
|
end
|
210
217
|
|
211
|
-
def
|
218
|
+
def test_page_new_without_node_name
|
212
219
|
login(:tiger)
|
213
|
-
node = secure!(Node) { Node.new(:parent_id=>nodes_id(:cleanWater)) }
|
220
|
+
node = secure!(Node) { Node.new(:parent_id => nodes_id(:cleanWater)) }
|
214
221
|
assert ! node.save, 'Save fails'
|
215
|
-
assert_equal 'can\'t be blank', node.errors[:
|
222
|
+
assert_equal 'can\'t be blank', node.errors[:node_name]
|
216
223
|
end
|
217
224
|
|
218
225
|
def test_new_set_section_id
|
219
226
|
login(:tiger)
|
220
|
-
node = secure!(Page) { Page.create(:parent_id=>nodes_id(:people), :
|
227
|
+
node = secure!(Page) { Page.create(:parent_id => nodes_id(:people), :node_name => 'SuperPage')}
|
221
228
|
assert ! node.new_record?, 'Not a new record'
|
222
229
|
assert_equal nodes_id(:people), node[:section_id]
|
223
230
|
end
|
@@ -256,17 +263,17 @@ class NodeTest < Zena::Unit::TestCase
|
|
256
263
|
assert node.save , "Save succeeds"
|
257
264
|
end
|
258
265
|
|
259
|
-
def
|
266
|
+
def test_page_update_without_node_name
|
260
267
|
login(:tiger)
|
261
268
|
node = secure!(Node) { nodes(:status) }
|
262
|
-
node[:
|
269
|
+
node[:node_name] = nil
|
263
270
|
assert node.save, 'Save succeeds'
|
264
|
-
assert_equal 'statusTitle', node[:
|
271
|
+
assert_equal 'statusTitle', node[:node_name]
|
265
272
|
node = secure!(Node) { nodes(:status) }
|
266
|
-
node[:
|
267
|
-
node.
|
273
|
+
node[:node_name] = nil
|
274
|
+
node.title = ""
|
268
275
|
assert !node.save, 'Save fails'
|
269
|
-
assert_equal 'can\'t be blank', node.errors[:
|
276
|
+
assert_equal 'can\'t be blank', node.errors[:node_name]
|
270
277
|
end
|
271
278
|
|
272
279
|
def test_update_set_section_id
|
@@ -280,23 +287,6 @@ class NodeTest < Zena::Unit::TestCase
|
|
280
287
|
assert_equal nodes_id(:zena), node[:section_id]
|
281
288
|
end
|
282
289
|
|
283
|
-
def test_before_destroy
|
284
|
-
login(:tiger)
|
285
|
-
node = secure!(Node) { nodes(:projects) }
|
286
|
-
assert !node.destroy, "Cannot destroy"
|
287
|
-
assert_equal 'cannot be removed (contains subpages or data)', node.errors[:base]
|
288
|
-
node = secure!(Node) { nodes(:bananas) }
|
289
|
-
assert node.destroy, "Can destroy"
|
290
|
-
end
|
291
|
-
|
292
|
-
def test_cannot_destroy_has_private
|
293
|
-
login(:tiger)
|
294
|
-
node = secure!(Node) { nodes(:lion) }
|
295
|
-
assert_nil node.find(:all, 'pages'), "No subpages"
|
296
|
-
assert !node.destroy, "Cannot destroy"
|
297
|
-
assert_equal 'cannot be removed (contains subpages or data)', node.errors[:base]
|
298
|
-
end
|
299
|
-
|
300
290
|
def test_parent
|
301
291
|
login(:anon)
|
302
292
|
assert_equal nodes_id(:projects), secure!(Node) { nodes(:wiki) }.parent[:id]
|
@@ -339,13 +329,13 @@ class NodeTest < Zena::Unit::TestCase
|
|
339
329
|
def test_new_child
|
340
330
|
login(:ant)
|
341
331
|
node = secure!(Node) { nodes(:cleanWater) }
|
342
|
-
child = node.new_child(
|
332
|
+
child = node.new_child(:node_name => 'status', :class => Page )
|
343
333
|
assert !child.save, "Save fails"
|
344
|
-
assert child.errors[:
|
334
|
+
assert child.errors[:node_name].any?
|
345
335
|
|
346
|
-
child = node.new_child(
|
336
|
+
child = node.new_child(:node_name => 'new_name', :class => Page )
|
347
337
|
assert child.save , "Save succeeds"
|
348
|
-
assert_equal Zena::Status[:red], child.
|
338
|
+
assert_equal Zena::Status[:red], child.v_status
|
349
339
|
assert_equal child[:user_id], users_id(:ant)
|
350
340
|
assert_equal node[:dgroup_id], child[:dgroup_id]
|
351
341
|
assert_equal node[:rgroup_id], child[:rgroup_id]
|
@@ -374,36 +364,22 @@ class NodeTest < Zena::Unit::TestCase
|
|
374
364
|
assert_equal 'Solenopsis Invicta', node.author.fullname
|
375
365
|
end
|
376
366
|
|
377
|
-
def
|
378
|
-
node = nodes(:status)
|
379
|
-
node[:name] = 'bob. and bob.jpg'
|
380
|
-
assert_equal 'jpg', node.ext
|
381
|
-
node[:name] = 'no ext'
|
382
|
-
assert_equal '', node.ext
|
383
|
-
node[:name] = ''
|
384
|
-
assert_equal '', node.ext
|
385
|
-
node[:name] = nil
|
386
|
-
assert_equal '', node.ext
|
387
|
-
end
|
388
|
-
|
389
|
-
def test_set_name_with_title
|
367
|
+
def test_set_node_name_with_title
|
390
368
|
login(:tiger)
|
391
|
-
node = secure!(Node) { Node.create(NEW_DEFAULT.stringify_keys.merge('
|
369
|
+
node = secure!(Node) { Node.create(NEW_DEFAULT.stringify_keys.merge('node_name' => '', 'title' => 'small bed')) }
|
392
370
|
assert_kind_of Node, node
|
393
371
|
assert !node.new_record?
|
394
|
-
assert_equal 'smallBed', node.
|
372
|
+
assert_equal 'smallBed', node.node_name
|
395
373
|
end
|
396
374
|
|
397
|
-
def
|
375
|
+
def test_set_node_name
|
398
376
|
node = nodes(:wiki)
|
399
|
-
node.
|
400
|
-
assert_equal 'JAimeLAilEnAout', node.
|
401
|
-
|
402
|
-
node.
|
403
|
-
assert_equal 'LIEUX', node.name
|
377
|
+
node.node_name = " J'aime l'aïl en août ! "
|
378
|
+
assert_equal 'JAimeLAilEnAout', node.node_name
|
379
|
+
node.node_name = "LIEUX"
|
380
|
+
assert_equal 'LIEUX', node.node_name
|
404
381
|
end
|
405
382
|
|
406
|
-
|
407
383
|
def test_change_project_to_page
|
408
384
|
login(:tiger)
|
409
385
|
node = secure!(Node) { nodes(:cleanWater) }
|
@@ -439,7 +415,7 @@ class NodeTest < Zena::Unit::TestCase
|
|
439
415
|
end
|
440
416
|
|
441
417
|
should 'be allowed to change attributes' do
|
442
|
-
assert @node.update_attributes(:
|
418
|
+
assert @node.update_attributes(:node_name => 'vodou', :event_at => Time.now)
|
443
419
|
end
|
444
420
|
|
445
421
|
should 'not be allowed to set parent' do
|
@@ -452,79 +428,82 @@ class NodeTest < Zena::Unit::TestCase
|
|
452
428
|
context 'A visitor with drive access' do
|
453
429
|
setup do
|
454
430
|
login(:tiger)
|
455
|
-
@node = secure!(Node) { nodes(:wiki) }
|
456
431
|
end
|
457
432
|
|
458
433
|
context 'on a published node with documents' do
|
459
434
|
|
435
|
+
subject do
|
436
|
+
secure!(Node) { nodes(:wiki) }
|
437
|
+
end
|
438
|
+
|
460
439
|
should 'see a published node with published documents' do
|
461
|
-
assert_equal Zena::Status[:pub],
|
440
|
+
assert_equal Zena::Status[:pub], subject.v_status
|
462
441
|
assert_equal Zena::Status[:pub], versions(:bird_jpg_en).status
|
463
442
|
assert_equal Zena::Status[:pub], versions(:flower_jpg_en).status
|
464
443
|
end
|
465
444
|
|
466
445
|
should 'unpublish documents when unpublishing node' do
|
467
|
-
assert
|
446
|
+
assert subject.unpublish
|
468
447
|
assert_equal Zena::Status[:rem], versions(:bird_jpg_en).status
|
469
448
|
assert_equal Zena::Status[:rem], versions(:flower_jpg_en).status
|
470
449
|
end
|
471
450
|
end
|
472
451
|
|
473
452
|
context 'on a removed node with removed documents' do
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
should 'see a removed node with removed documents' do
|
480
|
-
assert_equal Zena::Status[:rem], @node.version.status
|
481
|
-
assert_equal Zena::Status[:rem], versions(:bird_jpg_en).status
|
482
|
-
assert_equal Zena::Status[:rem], versions(:flower_jpg_en).status
|
453
|
+
subject do
|
454
|
+
node = secure!(Node) { nodes(:wiki) }
|
455
|
+
node.unpublish
|
456
|
+
node.reload
|
457
|
+
node
|
483
458
|
end
|
484
459
|
|
485
460
|
should 'publish documents when publishing node' do
|
486
|
-
assert
|
461
|
+
assert subject.publish
|
487
462
|
assert_equal Zena::Status[:pub], versions(:bird_jpg_en).status
|
488
463
|
assert_equal Zena::Status[:pub], versions(:flower_jpg_en).status
|
489
464
|
end
|
490
465
|
end
|
491
466
|
|
492
467
|
context 'on a redaction node with documents in redaction status' do
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
468
|
+
subject do
|
469
|
+
node = secure!(Node) { nodes(:wiki) }
|
470
|
+
node.unpublish
|
471
|
+
node.redit
|
472
|
+
node.reload
|
473
|
+
node
|
497
474
|
end
|
498
475
|
|
499
476
|
should 'see redactions' do
|
500
|
-
assert_equal Zena::Status[:red],
|
477
|
+
assert_equal Zena::Status[:red], subject.v_status
|
501
478
|
assert_equal Zena::Status[:red], versions(:bird_jpg_en).status
|
502
479
|
assert_equal Zena::Status[:red], versions(:flower_jpg_en).status
|
503
480
|
end
|
504
481
|
|
505
482
|
should 'propose documents when proposing node' do
|
506
|
-
assert
|
483
|
+
assert subject.propose
|
507
484
|
assert_equal Zena::Status[:prop_with], versions(:bird_jpg_en).status
|
508
485
|
assert_equal Zena::Status[:prop_with], versions(:flower_jpg_en).status
|
509
486
|
end
|
510
487
|
end
|
511
488
|
|
512
489
|
context 'on a proposition with proposed documents' do
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
490
|
+
subject do
|
491
|
+
node = secure!(Node) { nodes(:wiki) }
|
492
|
+
node.unpublish
|
493
|
+
node.redit
|
494
|
+
node.propose
|
495
|
+
node.reload
|
496
|
+
node
|
518
497
|
end
|
519
498
|
|
520
499
|
should 'see propositions' do
|
521
|
-
assert_equal Zena::Status[:prop],
|
500
|
+
assert_equal Zena::Status[:prop], subject.v_status
|
522
501
|
assert_equal Zena::Status[:prop_with], versions(:bird_jpg_en).status
|
523
502
|
assert_equal Zena::Status[:prop_with], versions(:flower_jpg_en).status
|
524
503
|
end
|
525
504
|
|
526
505
|
should 'refuse documents when refusing node' do
|
527
|
-
assert
|
506
|
+
assert subject.refuse
|
528
507
|
assert_equal Zena::Status[:red], versions(:bird_jpg_en).status
|
529
508
|
assert_equal Zena::Status[:red], versions(:flower_jpg_en).status
|
530
509
|
end
|
@@ -614,13 +593,13 @@ class NodeTest < Zena::Unit::TestCase
|
|
614
593
|
assert @node.save
|
615
594
|
tags = @node.find(:all, 'set_tags')
|
616
595
|
assert_equal 2, tags.size
|
617
|
-
assert_equal 'art', tags[0].
|
618
|
-
assert_equal 'news', tags[1].
|
596
|
+
assert_equal 'art', tags[0].node_name
|
597
|
+
assert_equal 'news', tags[1].node_name
|
619
598
|
@node.rel['set_tag'].other_ids = [nodes_id(:art)]
|
620
599
|
@node.save
|
621
600
|
tags = @node.find(:all, 'set_tags')
|
622
601
|
assert_equal 1, tags.size
|
623
|
-
assert_equal 'art', tags[0].
|
602
|
+
assert_equal 'art', tags[0].node_name
|
624
603
|
end
|
625
604
|
|
626
605
|
def test_tag_update
|
@@ -647,7 +626,7 @@ class NodeTest < Zena::Unit::TestCase
|
|
647
626
|
# do something on a project
|
648
627
|
node = secure!(Node) { nodes(:wiki) }
|
649
628
|
assert_equal 'NPP', node.class.kpath
|
650
|
-
assert node.update_attributes(:
|
629
|
+
assert node.update_attributes(:title=>'new title'), "Can change attributes"
|
651
630
|
# sweep only kpath NPP
|
652
631
|
i = 3
|
653
632
|
assert_equal "content 3", Cache.with(visitor.id, visitor.group_ids, 'NP', 'pages') { "content #{i}" }
|
@@ -656,7 +635,7 @@ class NodeTest < Zena::Unit::TestCase
|
|
656
635
|
# do something on a note
|
657
636
|
node = secure!(Node) { nodes(:proposition) }
|
658
637
|
assert_equal 'NNP', node.vclass.kpath
|
659
|
-
assert node.update_attributes(:
|
638
|
+
assert node.update_attributes(:node_name => 'popo' ), "Can change attributes"
|
660
639
|
# sweep only kpath NN
|
661
640
|
i = 4
|
662
641
|
assert_equal "content 3", Cache.with(visitor.id, visitor.group_ids, 'NP', 'pages') { "content #{i}" }
|
@@ -674,7 +653,7 @@ class NodeTest < Zena::Unit::TestCase
|
|
674
653
|
def test_discussion_lang
|
675
654
|
login(:tiger)
|
676
655
|
node = secure!(Node) { nodes(:status) }
|
677
|
-
assert_equal Zena::Status[:pub], node.
|
656
|
+
assert_equal Zena::Status[:pub], node.v_status
|
678
657
|
discussion = node.discussion
|
679
658
|
assert_kind_of Discussion, discussion
|
680
659
|
assert_equal discussions_id(:outside_discussion_on_status_en), discussion[:id]
|
@@ -697,7 +676,7 @@ class NodeTest < Zena::Unit::TestCase
|
|
697
676
|
login(:ant)
|
698
677
|
node = secure!(Node) { nodes(:status) }
|
699
678
|
assert_nil node.discussion
|
700
|
-
node.update_attributes( :
|
679
|
+
node.update_attributes( :title=>'test' )
|
701
680
|
discussion = node.discussion
|
702
681
|
assert_kind_of Discussion, discussion
|
703
682
|
assert discussion.inside?
|
@@ -706,20 +685,20 @@ class NodeTest < Zena::Unit::TestCase
|
|
706
685
|
def test_inside_discussion
|
707
686
|
login(:tiger)
|
708
687
|
node = secure!(Node) { nodes(:status) }
|
709
|
-
node.update_attributes( :
|
710
|
-
assert_equal Zena::Status[:red], node.
|
688
|
+
node.update_attributes( :title=>'new status' )
|
689
|
+
assert_equal Zena::Status[:red], node.v_status
|
711
690
|
discussion = node.discussion
|
712
691
|
assert_equal discussions_id(:inside_discussion_on_status), discussion[:id]
|
713
692
|
end
|
714
693
|
|
715
694
|
def test_auto_create_discussion
|
716
695
|
login(:tiger)
|
717
|
-
post = secure!(Node) { Node.create_node(:v_status => Zena::Status[:pub], :
|
718
|
-
letter = secure!(Node) { Node.create_node(:v_status => Zena::Status[:pub], :
|
696
|
+
post = secure!(Node) { Node.create_node(:v_status => Zena::Status[:pub], :title => 'a new post', :class => 'Post', :parent_id => nodes_zip(:cleanWater)) }
|
697
|
+
letter = secure!(Node) { Node.create_node(:v_status => Zena::Status[:pub], :title => 'a letter', :class => 'Letter', :parent_id => nodes_zip(:cleanWater)) }
|
719
698
|
assert !post.new_record?, "Not a new record"
|
720
699
|
assert !letter.new_record?, "Not a new record"
|
721
|
-
assert_equal Zena::Status[:pub], post.
|
722
|
-
assert_equal Zena::Status[:pub], letter.
|
700
|
+
assert_equal Zena::Status[:pub], post.v_status, "Published"
|
701
|
+
assert_equal Zena::Status[:pub], letter.v_status, "Published"
|
723
702
|
assert !letter.discussion
|
724
703
|
assert post.discussion
|
725
704
|
assert !post.discussion.new_record?
|
@@ -732,9 +711,9 @@ class NodeTest < Zena::Unit::TestCase
|
|
732
711
|
|
733
712
|
def test_auto_create_discussion
|
734
713
|
login(:tiger)
|
735
|
-
letter = secure!(Node) { Node.create_node(:v_status => Zena::Status[:pub], :
|
714
|
+
letter = secure!(Node) { Node.create_node(:v_status => Zena::Status[:pub], :title => 'a letter', :class => 'Letter', :parent_id => nodes_zip(:cleanWater)) }
|
736
715
|
assert !letter.new_record?, "Not a new record"
|
737
|
-
assert_equal Zena::Status[:pub], letter.
|
716
|
+
assert_equal Zena::Status[:pub], letter.v_status, "Published"
|
738
717
|
login(:lion)
|
739
718
|
letter = secure!(Node) { Node.find(letter.id) }
|
740
719
|
assert letter.can_auto_create_discussion?
|
@@ -768,14 +747,14 @@ class NodeTest < Zena::Unit::TestCase
|
|
768
747
|
|
769
748
|
def test_other_site_id
|
770
749
|
login(:whale)
|
771
|
-
node = secure!(Node) { Node.create(:parent_id=>nodes_id(:ocean), :rgroup_id=>groups_id(:aqua), :wgroup_id=>groups_id(:masters), :dgroup_id=>groups_id(:masters), :
|
750
|
+
node = secure!(Node) { Node.create(:parent_id => nodes_id(:ocean), :rgroup_id => groups_id(:aqua), :wgroup_id => groups_id(:masters), :dgroup_id => groups_id(:masters), :node_name => "fish") }
|
772
751
|
assert !node.new_record?, "Not a new record"
|
773
752
|
assert_equal sites_id(:ocean), node[:site_id]
|
774
753
|
end
|
775
754
|
|
776
755
|
def test_other_site_id_fool_id
|
777
756
|
login(:whale)
|
778
|
-
node = secure!(Node) { Node.create(:parent_id=>nodes_id(:ocean), :rgroup_id=>groups_id(:aqua), :wgroup_id=>groups_id(:masters), :dgroup_id=>groups_id(:masters), :
|
757
|
+
node = secure!(Node) { Node.create(:parent_id => nodes_id(:ocean), :rgroup_id => groups_id(:aqua), :wgroup_id => groups_id(:masters), :dgroup_id => groups_id(:masters), :node_name => "fish", :site_id => sites_id(:zena)) }
|
779
758
|
assert !node.new_record?, "Not a new record"
|
780
759
|
assert_equal sites_id(:ocean), node[:site_id]
|
781
760
|
end
|
@@ -788,10 +767,16 @@ class NodeTest < Zena::Unit::TestCase
|
|
788
767
|
assert_equal original_site_id, node.site_id
|
789
768
|
end
|
790
769
|
|
770
|
+
def test_cannot_set_site_id_with_new_record
|
771
|
+
login(:tiger)
|
772
|
+
node = Node.new(:site_id => 1234)
|
773
|
+
assert_nil node.site_id
|
774
|
+
end
|
775
|
+
|
791
776
|
def test_zip
|
792
|
-
next_zip = Zena::Db.
|
777
|
+
next_zip = Zena::Db.fetch_attribute("SELECT zip FROM zips WHERE site_id = #{sites_id(:zena)}").to_i
|
793
778
|
login(:tiger)
|
794
|
-
node = secure!(Node) { Node.create(:parent_id=>nodes_id(:zena), :
|
779
|
+
node = secure!(Node) { Node.create(:parent_id=>nodes_id(:zena), :node_name => "fly")}
|
795
780
|
assert !node.new_record?, "Not a new record"
|
796
781
|
assert_equal (next_zip + 1), node.zip
|
797
782
|
end
|
@@ -812,7 +797,7 @@ class NodeTest < Zena::Unit::TestCase
|
|
812
797
|
|
813
798
|
def test_create_node
|
814
799
|
login(:ant)
|
815
|
-
node = secure!(Node) { Node.create_node(:parent_id => nodes_zip(:secret), :
|
800
|
+
node = secure!(Node) { Node.create_node(:parent_id => nodes_zip(:secret), :node_name => 'funny') }
|
816
801
|
assert_equal nodes_id(:secret), node[:parent_id]
|
817
802
|
assert node.new_record?, "Not saved"
|
818
803
|
assert_equal 'invalid reference', node.errors[:parent_id]
|
@@ -820,7 +805,7 @@ class NodeTest < Zena::Unit::TestCase
|
|
820
805
|
|
821
806
|
def test_create_node_with__parent_id
|
822
807
|
login(:ant)
|
823
|
-
node = secure!(Node) { Node.create_node(:_parent_id => nodes_id(:secret), :
|
808
|
+
node = secure!(Node) { Node.create_node(:_parent_id => nodes_id(:secret), :node_name => 'funny') }
|
824
809
|
assert_equal nodes_id(:secret), node[:parent_id]
|
825
810
|
assert node.new_record?, "Not saved"
|
826
811
|
assert_equal 'invalid reference', node.errors[:parent_id]
|
@@ -828,36 +813,36 @@ class NodeTest < Zena::Unit::TestCase
|
|
828
813
|
|
829
814
|
def test_create_node_ok
|
830
815
|
login(:tiger)
|
831
|
-
node = secure!(Node) { Node.create_node('parent_id' => nodes_zip(:cleanWater), '
|
816
|
+
node = secure!(Node) { Node.create_node('parent_id' => nodes_zip(:cleanWater), 'node_name' => 'funny') }
|
832
817
|
assert_equal nodes_id(:cleanWater), node[:parent_id]
|
833
|
-
assert_equal 'funny', node[:
|
818
|
+
assert_equal 'funny', node[:node_name]
|
834
819
|
assert !node.new_record?
|
835
820
|
end
|
836
821
|
|
837
822
|
def test_create_or_update_node_create
|
838
823
|
login(:tiger)
|
839
|
-
node = secure!(Node) { Node.create_or_update_node('parent_id' => nodes_zip(:cleanWater), '
|
824
|
+
node = secure!(Node) { Node.create_or_update_node('parent_id' => nodes_zip(:cleanWater), 'node_name' => 'funny') }
|
840
825
|
assert_equal nodes_id(:cleanWater), node[:parent_id]
|
841
|
-
assert_equal 'funny', node[:
|
826
|
+
assert_equal 'funny', node[:node_name]
|
842
827
|
assert !node.new_record?, "Saved"
|
843
828
|
end
|
844
829
|
|
845
830
|
def test_create_or_update_node_update
|
846
831
|
login(:tiger)
|
847
|
-
node = secure!(Node) { Node.create_or_update_node('parent_id' => nodes_zip(:cleanWater), '
|
832
|
+
node = secure!(Node) { Node.create_or_update_node('parent_id' => nodes_zip(:cleanWater), 'node_name' => 'status', 'title'=>"It's all broken") }
|
848
833
|
assert_equal nodes_id(:cleanWater), node[:parent_id]
|
849
834
|
assert_equal nodes_id(:status), node[:id]
|
850
835
|
node = secure!(Node) { nodes(:status) }
|
851
|
-
assert_equal 'status', node[:
|
852
|
-
assert_equal "It's all broken", node.
|
836
|
+
assert_equal 'status', node[:node_name]
|
837
|
+
assert_equal "It's all broken", node.title
|
853
838
|
end
|
854
839
|
|
855
840
|
def test_create_with_klass
|
856
841
|
login(:tiger)
|
857
|
-
node = secure!(Node) { Node.create_node('parent_id' => nodes_zip(:projects), '
|
842
|
+
node = secure!(Node) { Node.create_node('parent_id' => nodes_zip(:projects), 'node_name' => 'funny', 'klass' => 'TextDocument', 'content_type' => 'application/x-javascript') }
|
858
843
|
assert_kind_of TextDocument, node
|
859
844
|
assert_equal nodes_id(:projects), node[:parent_id]
|
860
|
-
assert_equal 'funny', node[:
|
845
|
+
assert_equal 'funny', node[:node_name]
|
861
846
|
assert !node.new_record?, "Saved"
|
862
847
|
end
|
863
848
|
|
@@ -865,7 +850,7 @@ class NodeTest < Zena::Unit::TestCase
|
|
865
850
|
assert_equal Node, Node.get_class('node')
|
866
851
|
assert_equal Node, Node.get_class('nodes')
|
867
852
|
assert_equal Node, Node.get_class('Node')
|
868
|
-
assert_equal
|
853
|
+
assert_equal roles(:Letter), Node.get_class('Letter')
|
869
854
|
assert_equal TextDocument, Node.get_class('TextDocument')
|
870
855
|
end
|
871
856
|
|
@@ -893,67 +878,67 @@ done: \"I am done\""
|
|
893
878
|
|
894
879
|
def test_create_nodes_from_gzip_file
|
895
880
|
login(:tiger)
|
896
|
-
parent = secure!(Project) { Project.create(:
|
881
|
+
parent = secure!(Project) { Project.create(:node_name => 'import', :parent_id => nodes_id(:zena)) }
|
897
882
|
assert !parent.new_record?, "Not a new record"
|
898
883
|
nodes = secure!(Node) { Node.create_nodes_from_folder(:archive => uploaded_archive('simple.zml.gz'), :parent_id => parent[:id] )}.values
|
899
884
|
assert_equal 1, nodes.size
|
900
885
|
simple = nodes[0]
|
901
886
|
assert_kind_of Note, simple
|
902
|
-
assert_equal
|
887
|
+
assert_equal roles(:Post), simple.vclass
|
903
888
|
assert !simple.new_record?
|
904
889
|
end
|
905
890
|
|
906
891
|
def test_create_nodes_from_folder_with_defaults
|
907
892
|
login(:tiger)
|
908
|
-
parent = secure!(Project) { Project.create(:
|
893
|
+
parent = secure!(Project) { Project.create(:node_name => 'import', :parent_id => nodes_id(:zena), :rgroup_id => groups_id(:managers), :wgroup_id => groups_id(:managers)) }
|
909
894
|
assert !parent.new_record?, "Not a new record"
|
910
895
|
result = secure!(Node) { Node.create_nodes_from_folder(:folder => File.join(Zena::ROOT, 'test', 'fixtures', 'import'), :parent_id => parent[:id] )}.values
|
911
896
|
assert_equal 4, result.size
|
912
897
|
|
913
|
-
children = parent.find(:all, 'children order by
|
898
|
+
children = parent.find(:all, 'children order by node_name asc')
|
914
899
|
assert_equal 2, children.size
|
915
|
-
assert_equal '
|
900
|
+
assert_equal 'Photos', children[0].node_name
|
916
901
|
assert_equal groups_id(:managers), children[0].rgroup_id
|
917
|
-
assert_equal 'simple', children[1].
|
902
|
+
assert_equal 'simple', children[1].node_name
|
918
903
|
assert_equal groups_id(:managers), children[1].rgroup_id
|
919
904
|
|
920
905
|
# we use children[1] as parent just to use any empty node
|
921
906
|
result = secure!(Node) { Node.create_nodes_from_folder(:folder => File.join(Zena::ROOT, 'test', 'fixtures', 'import'), :parent_id => children[1][:id], :defaults => { :rgroup_id => groups_id(:public) } )}.values
|
922
907
|
assert_equal 4, result.size
|
923
908
|
|
924
|
-
children = children[1].find(:all, 'children order by
|
909
|
+
children = children[1].find(:all, 'children order by node_name ASC')
|
925
910
|
assert_equal 2, children.size
|
926
|
-
assert_equal '
|
911
|
+
assert_equal 'Photos', children[0].node_name
|
927
912
|
assert_equal groups_id(:public), children[0].rgroup_id
|
928
913
|
end
|
929
914
|
|
930
915
|
def test_create_nodes_from_folder_with_publish
|
931
916
|
login(:tiger)
|
932
917
|
nodes = secure!(Node) { Node.create_nodes_from_folder(:folder => File.join(Zena::ROOT, 'test', 'fixtures', 'import'), :parent_id => nodes_id(:zena) )}.values
|
933
|
-
assert_equal Zena::Status[:red], nodes[0].
|
918
|
+
assert_equal Zena::Status[:red], nodes[0].v_status
|
934
919
|
|
935
920
|
nodes = secure!(Node) { Node.create_nodes_from_folder(:folder => File.join(Zena::ROOT, 'test', 'fixtures', 'import'), :parent_id => nodes_id(:cleanWater), :defaults => { :v_status => Zena::Status[:pub] }) }.values
|
936
|
-
assert_equal Zena::Status[:pub], nodes[0].
|
921
|
+
assert_equal Zena::Status[:pub], nodes[0].v_status
|
937
922
|
end
|
938
923
|
|
939
924
|
def test_create_nodes_from_archive
|
940
925
|
login(:tiger)
|
941
926
|
res = secure!(Node) { Node.create_nodes_from_folder(:archive => uploaded_archive('import.tgz'), :parent_id => nodes_id(:zena)) }.values
|
942
|
-
photos = secure!(Section) { Section.
|
927
|
+
photos = secure!(Section) { Section.find_by_node_name('Photos') }
|
943
928
|
assert_kind_of Section, photos
|
944
|
-
bird = secure!(Node) { Node.
|
929
|
+
bird = secure!(Node) { Node.find_by_parent_id_and_node_name(photos[:id], 'bird') }
|
945
930
|
assert_kind_of Image, bird
|
946
|
-
assert_equal 56183, bird.
|
947
|
-
assert_equal 'Lucy in the sky', bird.
|
931
|
+
assert_equal 56183, bird.size
|
932
|
+
assert_equal 'Lucy in the sky', bird.text
|
948
933
|
visitor.lang = 'fr'
|
949
|
-
bird = secure!(Node) { Node.
|
950
|
-
assert_equal 'Le septième ciel', bird.
|
934
|
+
bird = secure!(Node) { Node.find_by_parent_id_and_node_name(photos[:id], 'bird') }
|
935
|
+
assert_equal 'Le septième ciel', bird.text
|
951
936
|
assert_equal 1, bird[:inherit]
|
952
937
|
assert_equal groups_id(:public), bird[:rgroup_id]
|
953
938
|
assert_equal groups_id(:workers), bird[:wgroup_id]
|
954
939
|
assert_equal groups_id(:managers), bird[:dgroup_id]
|
955
940
|
|
956
|
-
simple = secure!(Node) { Node.
|
941
|
+
simple = secure!(Node) { Node.find_by_parent_id_and_node_name(nodes_id(:zena), 'simple') }
|
957
942
|
assert_equal 0, simple[:inherit]
|
958
943
|
assert_equal groups_id(:managers), simple[:rgroup_id]
|
959
944
|
assert_equal groups_id(:managers), simple[:wgroup_id]
|
@@ -963,7 +948,7 @@ done: \"I am done\""
|
|
963
948
|
def test_create_nodes_from_zip_archive
|
964
949
|
login(:tiger)
|
965
950
|
res = secure!(Node) { Node.create_nodes_from_folder(:archive => uploaded_zip('letter.zip'), :parent_id => nodes_id(:zena), :class => 'Letter') }.values
|
966
|
-
res.sort!{|a,b| a.
|
951
|
+
res.sort!{|a,b| a.node_name <=> b.node_name}
|
967
952
|
letter, bird = res[1], res[0]
|
968
953
|
assert_kind_of Note, letter
|
969
954
|
assert_equal 'Letter', letter.klass
|
@@ -973,17 +958,16 @@ done: \"I am done\""
|
|
973
958
|
preserving_files('test.host/data') do
|
974
959
|
bird = node = nil
|
975
960
|
login(:tiger)
|
976
|
-
node = secure!(Page) { Page.create(:parent_id => nodes_id(:status), :
|
961
|
+
node = secure!(Page) { Page.create(:parent_id => nodes_id(:status), :title => 'Photos', :text => '![]!') }
|
977
962
|
assert !node.new_record?
|
978
|
-
assert_nothing_raised { node = secure!(Node) { Node.find_by_path(
|
979
|
-
assert_raise(ActiveRecord::RecordNotFound) { node = secure!(Node) { Node.find_by_path( 'projects/cleanWater/status/
|
980
|
-
|
981
|
-
assert_no_match %r{I took during my last vacations}, node.version.text
|
963
|
+
assert_nothing_raised { node = secure!(Node) { Node.find_by_path('projects/cleanWater/status/Photos') } }
|
964
|
+
assert_raise(ActiveRecord::RecordNotFound) { node = secure!(Node) { Node.find_by_path( 'projects/cleanWater/status/Photos/bird') } }
|
965
|
+
assert_no_match %r{I took during my last vacations}, node.text
|
982
966
|
v1_id = node.version.id
|
983
|
-
secure!(Node) { Node.create_nodes_from_folder(:archive => uploaded_archive('import.tgz'), :parent_id => nodes_id(:status)) }
|
984
|
-
assert_nothing_raised { node = secure!(Node) { Node.find_by_path(
|
985
|
-
assert_nothing_raised { bird = secure!(Node) { Node.find_by_path(
|
986
|
-
assert_match %r{I took during my last vacations}, node.
|
967
|
+
secure!(Node) { Node.create_nodes_from_folder(:archive => uploaded_archive('import.tgz'), :parent_id => nodes_id(:status)) }
|
968
|
+
assert_nothing_raised { node = secure!(Node) { Node.find_by_path('projects/cleanWater/status/Photos') } }
|
969
|
+
assert_nothing_raised { bird = secure!(Node) { Node.find_by_path('projects/cleanWater/status/Photos/bird') } }
|
970
|
+
assert_match %r{I took during my last vacations}, node.text
|
987
971
|
assert_equal v1_id, node.version.id
|
988
972
|
assert_kind_of Image, bird
|
989
973
|
end
|
@@ -995,10 +979,10 @@ done: \"I am done\""
|
|
995
979
|
visitor.time_zone = 'Asia/Jakarta'
|
996
980
|
assert_equal 'Asia/Jakarta', visitor.time_zone
|
997
981
|
status = secure!(Node) { nodes(:status) }
|
998
|
-
assert status.update_attributes_with_transformation(:v_status => Zena::Status[:pub], :
|
982
|
+
assert status.update_attributes_with_transformation(:v_status => Zena::Status[:pub], :text => "This is a \"link\":#{nodes_zip(:projects)}.", :origin => "A picture: !#{nodes_zip(:bird_jpg)}!")
|
999
983
|
yaml = status.to_yaml
|
1000
|
-
assert_match %r{
|
1001
|
-
assert_match %r{
|
984
|
+
assert_match %r{text:\s+\"?This is a "link":\(\.\./\.\.\)\.}, yaml
|
985
|
+
assert_match %r{origin:\s+\"?A picture: !\(\.\./\.\./wiki/bird\)!}, yaml
|
1002
986
|
assert_no_match %r{log_at}, yaml
|
1003
987
|
end
|
1004
988
|
|
@@ -1006,11 +990,11 @@ done: \"I am done\""
|
|
1006
990
|
login(:tiger)
|
1007
991
|
visitor.time_zone = 'Asia/Jakarta'
|
1008
992
|
prop = secure!(Node) { nodes(:proposition) }
|
1009
|
-
assert prop.update_attributes_with_transformation(:v_status => Zena::Status[:pub], :
|
993
|
+
assert prop.update_attributes_with_transformation(:v_status => Zena::Status[:pub], :text => "This is a \"link\":#{nodes_zip(:projects)}.", :origin => "A picture: !#{nodes_zip(:bird_jpg)}!", :log_at => "2008-10-20 14:53")
|
1010
994
|
assert_equal Time.gm(2008,10,20,7,53), prop.log_at
|
1011
995
|
yaml = prop.to_yaml
|
1012
|
-
assert_match %r{
|
1013
|
-
assert_match %r{
|
996
|
+
assert_match %r{text:\s+\"?This is a "link":\(\.\./\.\.\)\.}, yaml
|
997
|
+
assert_match %r{origin:\s+\"?A picture: !\(\.\./\.\./wiki/bird\)!}, yaml
|
1014
998
|
assert_match %r{log_at:\s+\"?2008-10-20 14:53:00\"?$}, yaml
|
1015
999
|
end
|
1016
1000
|
|
@@ -1019,15 +1003,15 @@ done: \"I am done\""
|
|
1019
1003
|
parent = secure!(Node) { nodes(:cleanWater) }
|
1020
1004
|
children = parent.find(:all, 'children')
|
1021
1005
|
assert_equal 8, children.size
|
1022
|
-
assert_equal 'bananas', children[0].
|
1023
|
-
assert_equal 'crocodiles', children[1].
|
1006
|
+
assert_equal 'bananas', children[0].node_name
|
1007
|
+
assert_equal 'crocodiles', children[1].node_name
|
1024
1008
|
|
1025
1009
|
Node.connection.execute "UPDATE nodes SET position = -1.0 WHERE id = #{nodes_id(:water_pdf)}"
|
1026
1010
|
Node.connection.execute "UPDATE nodes SET position = -0.5 WHERE id = #{nodes_id(:lake)}"
|
1027
1011
|
children = parent.find(:all, 'children')
|
1028
1012
|
assert_equal 8, children.size
|
1029
|
-
assert_equal 'water', children[0].
|
1030
|
-
assert_equal 'lakeAddress', children[1].
|
1013
|
+
assert_equal 'water', children[0].node_name
|
1014
|
+
assert_equal 'lakeAddress', children[1].node_name
|
1031
1015
|
end
|
1032
1016
|
|
1033
1017
|
def test_plural_relation
|
@@ -1042,17 +1026,6 @@ done: \"I am done\""
|
|
1042
1026
|
assert Node.plural_relation?('tagged')
|
1043
1027
|
end
|
1044
1028
|
|
1045
|
-
def test_safe_read
|
1046
|
-
login(:ant)
|
1047
|
-
node = secure!(Node) {Node.find(:first, :conditions => ['id = ?', nodes_id(:lake)], :select => "*, 'foozibar' AS foobar") }
|
1048
|
-
status = secure!(Node) { nodes(:status) }
|
1049
|
-
assert_equal 'lakeAddress', node.safe_read('name')
|
1050
|
-
assert_equal 'The lake we love', node.safe_read('v_title')
|
1051
|
-
assert_equal 'gaspard', status.safe_read('d_assigned')
|
1052
|
-
assert_equal 'Between Tanzania, Congo and Zambia', node.safe_read('c_address')
|
1053
|
-
assert_equal 'foozibar', node.safe_read('foobar')
|
1054
|
-
end
|
1055
|
-
|
1056
1029
|
def test_classes_for_form
|
1057
1030
|
assert_equal [["Page", "Page"],
|
1058
1031
|
[" Project", "Project"],
|
@@ -1069,18 +1042,18 @@ done: \"I am done\""
|
|
1069
1042
|
|
1070
1043
|
def test_allowed_change_to_classes
|
1071
1044
|
node_changes = Node.allowed_change_to_classes.reject{|k| k[/Dummy/]} # In case we are testing after Secure
|
1072
|
-
assert_equal
|
1045
|
+
assert_equal %w{Node Note Letter Post Page Project Section Skin Reference}, node_changes
|
1073
1046
|
|
1074
1047
|
assert_equal node_changes, Page.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1075
1048
|
assert_equal node_changes, Project.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1076
1049
|
assert_equal node_changes, Note.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1077
1050
|
assert_equal node_changes, Reference.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1078
1051
|
|
1079
|
-
assert_equal
|
1052
|
+
assert_equal %w{Document TextDocument Template}, Document.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1080
1053
|
|
1081
1054
|
assert_equal ["Image"], Image.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1082
1055
|
|
1083
|
-
assert_equal ["
|
1056
|
+
assert_equal ["BaseContact"], BaseContact.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1084
1057
|
end
|
1085
1058
|
|
1086
1059
|
def test_match_one_node_only
|
@@ -1109,33 +1082,10 @@ done: \"I am done\""
|
|
1109
1082
|
assert_equal BigDecimal.new("56"), entries[0].value
|
1110
1083
|
end
|
1111
1084
|
|
1112
|
-
def test_icon_by_relation
|
1113
|
-
login(:ant)
|
1114
|
-
node = secure!(Node) { nodes(:cleanWater) } # has an 'icon' relation
|
1115
|
-
icon = node.icon
|
1116
|
-
assert_kind_of Image, icon
|
1117
|
-
assert_equal nodes_id(:lake_jpg), icon[:id]
|
1118
|
-
end
|
1119
|
-
|
1120
|
-
def test_icon_by_first_child
|
1121
|
-
login(:tiger)
|
1122
|
-
node = secure!(Node) { nodes(:wiki) } # has no 'icon' relation
|
1123
|
-
icon = node.icon
|
1124
|
-
assert_kind_of Image, icon
|
1125
|
-
assert_equal nodes_id(:bird_jpg), icon[:id] # first child
|
1126
|
-
# define flower as icon
|
1127
|
-
assert node.update_attributes(:icon_id => nodes_id(:flower_jpg))
|
1128
|
-
node = secure!(Node) { nodes(:wiki) } # reload
|
1129
|
-
icon = node.icon
|
1130
|
-
assert_kind_of Image, icon
|
1131
|
-
assert_equal nodes_id(:flower_jpg), icon[:id] # icon
|
1132
|
-
end
|
1133
|
-
|
1134
|
-
|
1135
1085
|
context 'A class\' native classes hash' do
|
1136
1086
|
should 'be indexed by kpath' do
|
1137
|
-
assert_equal [
|
1138
|
-
assert_equal [
|
1087
|
+
assert_equal [], %w{N ND NDI NDT NDTT NN NP NPP NPS NPSS NR NRC NU NUS} - Node.native_classes.keys
|
1088
|
+
assert_equal [], %w{ND NDI NDT NDTT} - Document.native_classes.keys
|
1139
1089
|
end
|
1140
1090
|
|
1141
1091
|
should 'should point to real (ruby) sub-classes and self' do
|
@@ -1168,8 +1118,8 @@ done: \"I am done\""
|
|
1168
1118
|
assert_equal Node, Node.get_class_from_kpath('N')
|
1169
1119
|
assert_equal Page, Node.get_class_from_kpath('NP')
|
1170
1120
|
assert_equal Image, Node.get_class_from_kpath('NDI')
|
1171
|
-
assert_equal
|
1172
|
-
assert_equal
|
1121
|
+
assert_equal roles(:Post), Node.get_class_from_kpath('NNP')
|
1122
|
+
assert_equal roles(:Letter), Node.get_class_from_kpath('NNL')
|
1173
1123
|
assert_equal TextDocument, Node.get_class_from_kpath('NDT')
|
1174
1124
|
end
|
1175
1125
|
end
|
@@ -1177,20 +1127,20 @@ done: \"I am done\""
|
|
1177
1127
|
|
1178
1128
|
def test_position_on_create
|
1179
1129
|
login(:lion)
|
1180
|
-
node = secure!(Page) { Page.create(:
|
1130
|
+
node = secure!(Page) { Page.create(:node_name => "yoba", :parent_id => nodes_id(:cleanWater), :inherit=>1 ) }
|
1181
1131
|
assert !node.new_record?
|
1182
1132
|
assert_equal 0.0, node.position
|
1183
1133
|
assert node.update_attributes(:position => 5.0)
|
1184
1134
|
assert_equal 5.0, node.position
|
1185
1135
|
node = secure!(Page) { Page.find_by_id(node.id) } # reload
|
1186
1136
|
assert_equal 5.0, node.position
|
1187
|
-
node = secure!(Page) { Page.create(:
|
1137
|
+
node = secure!(Page) { Page.create(:node_name => "babo", :parent_id => nodes_id(:cleanWater), :inherit=>1 ) }
|
1188
1138
|
assert !node.new_record?
|
1189
1139
|
assert_equal 6.0, node.position
|
1190
1140
|
|
1191
1141
|
# position has different scopes depending on first two letters of kpath: 'ND', 'NN', 'NP', 'NR'
|
1192
1142
|
doc = secure!(Document) { Document.create( :parent_id=>nodes_id(:cleanWater),
|
1193
|
-
:
|
1143
|
+
:file => uploaded_fixture('water.pdf', 'application/pdf', 'wat'), :title => "lazy waters.pdf") }
|
1194
1144
|
assert !doc.new_record?
|
1195
1145
|
assert_equal 0.0, doc.position
|
1196
1146
|
|
@@ -1211,24 +1161,6 @@ done: \"I am done\""
|
|
1211
1161
|
assert_equal 0.0, node.position
|
1212
1162
|
end
|
1213
1163
|
|
1214
|
-
def test_add_comment
|
1215
|
-
login(:lion)
|
1216
|
-
node = secure!(Node) { nodes(:lion) }
|
1217
|
-
assert node.can_comment?
|
1218
|
-
assert_nil node.comments
|
1219
|
-
|
1220
|
-
node = secure!(Node) { nodes(:lion) } # reload
|
1221
|
-
assert node.update_attributes(:m_title => 'changed icon', :m_text => 'new icon is "flower"', :icon_id => nodes_id(:flower_jpg))
|
1222
|
-
|
1223
|
-
node = secure!(Node) { nodes(:lion) } # reload
|
1224
|
-
comments = node.comments
|
1225
|
-
assert_equal 1, comments.size
|
1226
|
-
comment = comments[0]
|
1227
|
-
assert_equal 'changed icon', comment[:title]
|
1228
|
-
assert_equal 'new icon is "flower"', comment[:text]
|
1229
|
-
assert_equal 'Panthera Leo Verneyi', comment.author_name
|
1230
|
-
end
|
1231
|
-
|
1232
1164
|
def test_custom_a
|
1233
1165
|
login(:lion)
|
1234
1166
|
node = secure!(Node) { nodes(:status) }
|
@@ -1247,16 +1179,26 @@ done: \"I am done\""
|
|
1247
1179
|
def test_replace_attributes_in_values
|
1248
1180
|
login(:lion)
|
1249
1181
|
node = secure!(Node) { nodes(:status) }
|
1250
|
-
new_attributes = node.replace_attributes_in_values(:foo =>
|
1251
|
-
assert_equal "id: 22,
|
1182
|
+
new_attributes = node.replace_attributes_in_values(:foo => 'id: #{id}, title: #{title}')
|
1183
|
+
assert_equal "id: 22, title: status title", new_attributes[:foo]
|
1252
1184
|
end
|
1253
1185
|
|
1254
1186
|
def test_copy
|
1255
1187
|
login(:lion)
|
1256
1188
|
node = secure!(Node) { nodes(:status) }
|
1257
|
-
|
1258
|
-
|
1259
|
-
|
1189
|
+
attributes = {
|
1190
|
+
:copy_id => nodes_zip(:bird_jpg),
|
1191
|
+
:icon_id => '#{id}',
|
1192
|
+
:m_title => 'Changed icon to "#{title}"',
|
1193
|
+
:m_text => 'By #{visitor.login}'
|
1194
|
+
}
|
1195
|
+
|
1196
|
+
new_attributes = secure(Node) { Node.transform_attributes(attributes) }
|
1197
|
+
assert_equal Hash['icon_id' => nodes_id(:bird_jpg),
|
1198
|
+
'm_title' => 'Changed icon to "bird"',
|
1199
|
+
'm_text' => 'By lion'], new_attributes
|
1200
|
+
|
1201
|
+
assert node.update_attributes_with_transformation(attributes)
|
1260
1202
|
assert_equal nodes_id(:bird_jpg), node.find(:first, 'icon')[:id]
|
1261
1203
|
end
|
1262
1204
|
|
@@ -1266,8 +1208,8 @@ done: \"I am done\""
|
|
1266
1208
|
export_folder = File.join(SITES_ROOT, 'test.host', 'tmp')
|
1267
1209
|
FileUtils::mkpath(export_folder)
|
1268
1210
|
# Add a page and a text document into 'wiki'
|
1269
|
-
assert secure!(Node) { Node.create(:
|
1270
|
-
assert secure!(TextDocument) { TextDocument.create(:
|
1211
|
+
assert secure!(Node) { Node.create(:title=>"Hello World!", :text => "Bonjour", :parent_id => nodes_id(:wiki), :inherit=>1 ) }
|
1212
|
+
assert secure!(TextDocument) { TextDocument.create(:node_name => "yoba", :parent_id => nodes_id(:wiki), :text => "#header { color:red; }\n#footer { color:blue; }", :content_type => 'text/css') }
|
1271
1213
|
wiki = secure!(Node) { nodes(:wiki) }
|
1272
1214
|
assert_equal 4, wiki.find(:all, "children").size
|
1273
1215
|
wiki.export_to_folder(export_folder)
|
@@ -1289,8 +1231,8 @@ done: \"I am done\""
|
|
1289
1231
|
export_folder = File.join(SITES_ROOT, 'test.host', 'tmp')
|
1290
1232
|
FileUtils::mkpath(export_folder)
|
1291
1233
|
# Add a page and a text document into 'wiki'
|
1292
|
-
assert secure!(Node) { Node.create(:
|
1293
|
-
assert secure!(TextDocument) { TextDocument.create(:
|
1234
|
+
assert secure!(Node) { Node.create(:title=>"Hello World!", :text => "Bonjour", :parent_id => nodes_id(:wiki), :inherit=>1 ) }
|
1235
|
+
assert secure!(TextDocument) { TextDocument.create(:node_name => "yoba", :parent_id => nodes_id(:wiki), :text => "#header { color:red; }\n#footer { color:blue; }", :content_type => 'text/css') }
|
1294
1236
|
wiki = secure!(Node) { nodes(:wiki) }
|
1295
1237
|
assert_equal 4, wiki.find(:all, "children").size
|
1296
1238
|
archive = wiki.archive
|
@@ -1322,7 +1264,7 @@ done: \"I am done\""
|
|
1322
1264
|
lion = secure!(Node) { nodes(:lion) }
|
1323
1265
|
people = secure!(Node) { nodes(:people) }
|
1324
1266
|
cleanWater = secure!(Node) { nodes(:cleanWater) }
|
1325
|
-
assert lion.update_attributes(:
|
1267
|
+
assert lion.update_attributes(:title => 'status', :v_status => Zena::Status[:pub])
|
1326
1268
|
assert_equal 'people/status', lion.fullpath
|
1327
1269
|
# path base_node
|
1328
1270
|
{ ['(/projects/cleanWater/status)', nil] => nodes_id(:status),
|
@@ -1337,201 +1279,172 @@ done: \"I am done\""
|
|
1337
1279
|
def test_unparse_assets
|
1338
1280
|
login(:lion)
|
1339
1281
|
@node = secure!(Node) { nodes(:status) }
|
1340
|
-
assert @node.update_attributes(:
|
1341
|
-
assert_equal "Hello this is \"art\":(../../../collections/art). !(../../wiki/bird)!", @node.unparse_assets(@node.
|
1282
|
+
assert @node.update_attributes(:text => "Hello this is \"art\":#{nodes_zip(:art)}. !#{nodes_zip(:bird_jpg)}!")
|
1283
|
+
assert_equal "Hello this is \"art\":(../../../collections/art). !(../../wiki/bird)!", @node.unparse_assets(@node.text, self, 'text')
|
1342
1284
|
end
|
1343
1285
|
|
1344
1286
|
def test_parse_assets
|
1345
1287
|
login(:lion)
|
1346
1288
|
@node = secure!(Node) { nodes(:status) }
|
1347
|
-
assert @node.update_attributes(:
|
1348
|
-
assert_equal "Hello this is \"art\":#{nodes_zip(:art)}.", @node.parse_assets(@node.
|
1289
|
+
assert @node.update_attributes(:text => "Hello this is \"art\":(../../../collections/art).")
|
1290
|
+
assert_equal "Hello this is \"art\":#{nodes_zip(:art)}.", @node.parse_assets(@node.text, self, 'text')
|
1349
1291
|
end
|
1350
1292
|
|
1351
1293
|
context 'Finding safe method type' do
|
1352
1294
|
context 'for safe methods in class' do
|
1353
1295
|
should 'return method name' do
|
1354
|
-
['m_text', 'inherit', 'l_status', 'l_comment', 'm_text', 'inherit'].each do |k|
|
1355
|
-
assert_equal k,
|
1296
|
+
['m_text', 'inherit', 'l_status', 'l_comment', 'm_text', 'inherit', 'v_status'].each do |k|
|
1297
|
+
assert_equal k, BaseContact.safe_method_type([k])[:method]
|
1356
1298
|
end
|
1357
1299
|
end
|
1358
1300
|
end
|
1359
1301
|
|
1360
1302
|
context 'for methods not declared as safe in the class' do
|
1361
1303
|
should 'return nil' do
|
1362
|
-
['puts', 'raise', 'blah', 'system'
|
1363
|
-
assert_nil
|
1304
|
+
['puts', 'raise', 'blah', 'system'].each do |k|
|
1305
|
+
assert_nil BaseContact.safe_method_type([k])
|
1364
1306
|
end
|
1365
1307
|
end
|
1366
1308
|
end
|
1367
1309
|
|
1310
|
+
context 'for id' do
|
1311
|
+
should 'return zip' do
|
1312
|
+
assert_equal Hash[:class=>Number, :method=>'zip'], BaseContact.safe_method_type(['id'])
|
1313
|
+
end
|
1314
|
+
end
|
1315
|
+
|
1368
1316
|
context 'for relation pseudo-methods' do
|
1369
1317
|
should 'use rel and try' do
|
1370
1318
|
['hot_status', 'blah_comment', 'blah_zips', 'blah_id', 'blah_ids'].each do |k|
|
1371
|
-
assert_match %r{rel\[.#{k.gsub(/_.+/,'')}.\]\.try},
|
1319
|
+
assert_match %r{rel\[.#{k.gsub(/_.+/,'')}.\]\.try}, BaseContact.safe_method_type([k])[:method]
|
1372
1320
|
end
|
1373
1321
|
end
|
1374
1322
|
end
|
1375
1323
|
|
1376
|
-
context 'for safe
|
1324
|
+
context 'for safe properties' do
|
1377
1325
|
should 'return version and method name when safe' do
|
1378
|
-
['
|
1379
|
-
assert_equal "
|
1326
|
+
['text', 'title', 'first_name', 'name'].each do |k|
|
1327
|
+
assert_equal "prop['#{k}']", BaseContact.safe_method_type([k])[:method]
|
1380
1328
|
end
|
1381
1329
|
end
|
1382
1330
|
|
1383
|
-
should 'return
|
1384
|
-
['
|
1385
|
-
|
1331
|
+
should 'return nil when unsafe' do
|
1332
|
+
['first_name', 'name'].each do |k|
|
1333
|
+
assert_nil Node.safe_method_type([k])
|
1386
1334
|
end
|
1387
1335
|
end
|
1388
1336
|
end
|
1337
|
+
end
|
1389
1338
|
|
1390
|
-
|
1391
|
-
|
1392
|
-
|
1393
|
-
|
1394
|
-
|
1395
|
-
|
1339
|
+
# FIXME: write test
|
1340
|
+
def test_assets
|
1341
|
+
print 'P'
|
1342
|
+
# sweep_cache (save) => remove asset folder
|
1343
|
+
# render math ?
|
1344
|
+
end
|
1345
|
+
|
1346
|
+
def find_node_by_pseudo(string, base_node = nil)
|
1347
|
+
secure(Node) { Node.find_node_by_pseudo(string, base_node || @node) }
|
1348
|
+
end
|
1349
|
+
|
1350
|
+
def assert_transforms(result, src)
|
1351
|
+
if src.kind_of?(Hash)
|
1352
|
+
assert_equal result, secure(Node) { Node.transform_attributes( src ) }
|
1353
|
+
else
|
1354
|
+
assert_equal result, secure(Node) { Node.transform_attributes( 'text' => src )['text'] }
|
1396
1355
|
end
|
1356
|
+
end
|
1397
1357
|
|
1398
|
-
|
1399
|
-
|
1400
|
-
|
1401
|
-
|
1402
|
-
|
1358
|
+
context 'Transforming attributes' do
|
1359
|
+
context 'with non-ISO date format' do
|
1360
|
+
setup do
|
1361
|
+
I18n.locale = 'fr'
|
1362
|
+
visitor.time_zone = 'Asia/Jakarta'
|
1403
1363
|
end
|
1404
1364
|
|
1405
|
-
|
1406
|
-
|
1407
|
-
|
1408
|
-
|
1365
|
+
subject do
|
1366
|
+
'9-9-2009 15:17'
|
1367
|
+
end
|
1368
|
+
|
1369
|
+
should 'parse event_at date' do
|
1370
|
+
assert_transforms Hash['event_at' => Time.utc(2009,9,9,8,17)], Hash['event_at' => '9-9-2009 15:17']
|
1409
1371
|
end
|
1410
|
-
end
|
1411
|
-
end
|
1412
1372
|
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1373
|
+
should 'parse log_at date' do
|
1374
|
+
assert_transforms Hash['log_at' => Time.utc(2009,9,9,8,17)], Hash['log_at' => '9-9-2009 15:17']
|
1375
|
+
end
|
1416
1376
|
end
|
1417
1377
|
|
1378
|
+
context 'with zazen content' do
|
1379
|
+
setup do
|
1380
|
+
login(:lion)
|
1381
|
+
end
|
1418
1382
|
|
1419
|
-
|
1420
|
-
|
1421
|
-
|
1422
|
-
|
1383
|
+
should 'parse pseudo ids' do
|
1384
|
+
assert_transforms "Hi, this is just a simple \"test\":25 or \"\":29_life.rss. OK ?\n\n!24_pv!",
|
1385
|
+
"Hi, this is just a simple \"test\"::w or \"\"::w+_life.rss. OK ?\n\n!:lake+_pv!"
|
1386
|
+
end
|
1423
1387
|
|
1424
|
-
|
1425
|
-
|
1426
|
-
|
1427
|
-
|
1428
|
-
assert node.update_attributes(:v_title => 'simply different')
|
1429
|
-
assert node.publish
|
1430
|
-
assert_equal 'simplyDifferent', node.name
|
1431
|
-
visitor.lang = 'fr'
|
1432
|
-
# not ref lang
|
1433
|
-
node = secure!(Node) { nodes(:people) }
|
1434
|
-
assert node.update_attributes(:v_title => 'nice people')
|
1435
|
-
assert node.publish
|
1436
|
-
assert_equal 'fr', node.version.lang
|
1437
|
-
assert_equal 'people', node.name
|
1438
|
-
end
|
1388
|
+
should 'parse pseudo ids with offset in gallery' do
|
1389
|
+
assert_transforms "Hi ![30,24]! ![]!",
|
1390
|
+
"Hi ![30,:lake+]! ![]!"
|
1391
|
+
end
|
1439
1392
|
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
1443
|
-
node = secure!(Node) { nodes(:people) }
|
1444
|
-
assert node.update_attributes(:v_title => 'nice people')
|
1445
|
-
assert_equal 'people', node.name
|
1446
|
-
assert_equal Zena::Status[:red], node.version.status
|
1447
|
-
assert node.publish
|
1448
|
-
assert_equal 'nicePeople', node.name
|
1449
|
-
end
|
1393
|
+
should 'parse pseudo ids in doc_list' do
|
1394
|
+
assert_transforms "Hi !{30,24}! !{}!",
|
1395
|
+
"Hi !{:bird,:lake+}! !{}!"
|
1450
1396
|
|
1451
|
-
|
1452
|
-
login(:tiger)
|
1453
|
-
# was in sync, correct lang
|
1454
|
-
people = secure!(Node) { nodes(:people) }
|
1455
|
-
node = secure!(Page) { Page.create(:v_title => 'nice people', :parent_id => people.parent_id)}
|
1456
|
-
assert !node.new_record?
|
1457
|
-
assert_equal 'nicePeople', node.name
|
1458
|
-
# would sync to 'nicePeople'
|
1459
|
-
assert people.update_attributes(:v_title => 'nice people')
|
1460
|
-
assert_equal 'people', people.name
|
1461
|
-
assert people.publish
|
1462
|
-
assert_equal 'nicePeople-1', people.name
|
1463
|
-
end
|
1397
|
+
end
|
1464
1398
|
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1468
|
-
|
1469
|
-
assert_equal 'Eve', node.name
|
1470
|
-
node.update_attributes(:v_title => 'Lilith')
|
1471
|
-
assert_equal Zena::Status[:red], node.version.status
|
1472
|
-
assert_equal 'Lilith', node.name
|
1473
|
-
end
|
1399
|
+
should 'parse pseudo ids in links' do
|
1400
|
+
assert_transforms "Hi !30!:21 !30!:21 !30/nice bird!:21 !30_pv/hello ladies!:21",
|
1401
|
+
"Hi !30!::clean !:bird!::clean !:bird/nice bird!:21 !30_pv/hello ladies!:21"
|
1402
|
+
end
|
1474
1403
|
|
1475
|
-
|
1476
|
-
|
1477
|
-
|
1478
|
-
|
1404
|
+
should 'not alter existing code without pseudo ids' do
|
1405
|
+
assert_transforms "Hi, this is normal "":1/ just a\n\n* asf\n* asdf ![23,33]!",
|
1406
|
+
"Hi, this is normal "":1/ just a\n\n* asf\n* asdf ![23,33]!"
|
1407
|
+
end
|
1408
|
+
end # with zazen content
|
1479
1409
|
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1484
|
-
# not ref lang
|
1485
|
-
node = secure!(Node) { nodes(:people) }
|
1486
|
-
assert node.update_attributes(:v_title => 'nice people')
|
1487
|
-
assert_equal 'fr', node.version.lang
|
1488
|
-
assert_equal 'people', node.name
|
1489
|
-
end
|
1410
|
+
context 'with ids' do
|
1411
|
+
setup do
|
1412
|
+
login(:tiger)
|
1413
|
+
end
|
1490
1414
|
|
1491
|
-
|
1492
|
-
|
1493
|
-
|
1494
|
-
|
1495
|
-
login(:tiger)
|
1496
|
-
node = secure!(Node) { nodes(:people) }
|
1497
|
-
# was in sync, correct lang
|
1498
|
-
assert_equal node.name, node.version.title
|
1499
|
-
assert node.update_attributes(:v_title => 'nice people')
|
1500
|
-
node = secure!(Node) { nodes(:people) }
|
1501
|
-
assert_equal 'nice people', node.version.title
|
1502
|
-
assert_equal 'nicePeople', node.name
|
1503
|
-
end
|
1415
|
+
should 'parse pseudo_ids in parent_id' do
|
1416
|
+
assert_transforms Hash['parent_id' => nodes_id(:lake_jpg)],
|
1417
|
+
Hash['parent_id' => 'lake+']
|
1418
|
+
end
|
1504
1419
|
|
1505
|
-
|
1506
|
-
|
1507
|
-
|
1508
|
-
|
1509
|
-
# render math ?
|
1510
|
-
end
|
1420
|
+
should 'parse pseudo_ids in links' do
|
1421
|
+
assert_transforms Hash['tag_ids' => [nodes_id(:art), nodes_id(:news)]],
|
1422
|
+
Hash['tag_ids' => '33,news']
|
1423
|
+
end
|
1511
1424
|
|
1512
|
-
|
1513
|
-
|
1514
|
-
|
1425
|
+
should 'leave single bad ids' do
|
1426
|
+
assert_transforms Hash['parent_id' => '999', 'hot_id' => '999'],
|
1427
|
+
Hash['parent_id' => '999', 'hot_id' => '999']
|
1428
|
+
end
|
1515
1429
|
|
1516
|
-
|
1517
|
-
|
1518
|
-
|
1519
|
-
|
1520
|
-
assert_equal Time.utc(2009,9,9,8,17), v.event_at
|
1521
|
-
end
|
1430
|
+
should 'remove bad values from id lists' do
|
1431
|
+
assert_transforms Hash['tag_ids' => [nodes_id(:news),nodes_id(:art)]],
|
1432
|
+
Hash['tag_ids' => '999,34,art']
|
1433
|
+
end
|
1522
1434
|
|
1523
|
-
|
1524
|
-
|
1525
|
-
|
1526
|
-
|
1527
|
-
|
1528
|
-
|
1435
|
+
should 'parse dates and ids in rel' do
|
1436
|
+
# this should be 14:58 when #255 is fixed (tz support).
|
1437
|
+
assert_transforms Hash['link' => {'hot' => {'other_id' => nodes_id(:status), 'date' => Time.gm(2009,7,15,16,58)}}],
|
1438
|
+
Hash['link' => {'hot' => {'other_id' => '22', 'date' => '2009-7-15 16:58' }}]
|
1439
|
+
end
|
1440
|
+
end # with ids
|
1441
|
+
end # Transforming attributes
|
1529
1442
|
|
1530
1443
|
def test_parse_keys
|
1531
1444
|
node = secure(Node) { nodes(:status) }
|
1532
|
-
assert_equal
|
1445
|
+
assert_equal %w{archive problems summary text title}, node.parse_keys.sort
|
1533
1446
|
|
1534
1447
|
note = secure(Node) { nodes(:opening) }
|
1535
|
-
assert_equal
|
1448
|
+
assert_equal %w{text title}, note.parse_keys.sort
|
1536
1449
|
end
|
1537
1450
|
end
|