zena 0.15.2 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
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