zena 0.15.2 → 0.16.0

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