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
@@ -24,7 +24,7 @@ class CachedPageTest < Zena::Unit::TestCase
24
24
  assert File.exists?(path), "Cache file created"
25
25
  data = File.open(path) {|f| f.read }
26
26
  assert_equal "this is the cached content", data
27
- assert_equal [nodes_id(:status).to_s, nodes_id(:bird_jpg).to_s], cache.node_ids
27
+ assert_equal [nodes_id(:status), nodes_id(:bird_jpg)], cache.node_ids
28
28
  # test expire
29
29
  login(:tiger)
30
30
  node = secure!(Node) { nodes(:status) }
@@ -88,7 +88,7 @@ class CachedPageTest < Zena::Unit::TestCase
88
88
  assert File.exists?(path), "Cache file created"
89
89
  data = File.open(path) {|f| f.read }
90
90
  assert_equal "this is the cached content", data
91
- assert_equal [nodes_id(:status).to_s, nodes_id(:bird_jpg).to_s], cache.node_ids
91
+ assert_equal [nodes_id(:status), nodes_id(:bird_jpg)], cache.node_ids
92
92
  # test expire
93
93
  CachedPage.expire_old
94
94
  assert !File.exists?(path), "Cache file removed"
@@ -124,7 +124,6 @@ class CommentTest < Zena::Unit::TestCase
124
124
  comment = comments(:public_says_in_en)
125
125
  prop_reply = secure!(Comment) { Comment.create(:discussion_id => comment[:discussion_id], :reply_to=>comment[:id], :title=>'bob', :author_name=>'any', :text=>'blah') }
126
126
 
127
- err prop_reply
128
127
  assert !prop_reply.new_record?, "Not a new record"
129
128
  assert_equal Zena::Status[:prop], prop_reply[:status]
130
129
 
@@ -7,22 +7,34 @@ class DocumentTest < Zena::Unit::TestCase
7
7
  without_files('/test.host/data') do
8
8
  login(:ant)
9
9
  doc = secure!(Document) { Document.create( :parent_id=>nodes_id(:cleanWater),
10
- :name=>'report',
11
- :c_file => uploaded_pdf('water.pdf') ) }
10
+ :c_file => uploaded_pdf('water.pdf', 'report.pdf') ) }
12
11
  assert_kind_of Document , doc
13
- assert ! doc.new_record? , "Not a new record"
14
- assert_equal "report", doc.name
15
- assert_equal "report", doc.version.title
16
- assert_equal "report.pdf", doc.filename
12
+ assert ! doc.new_record?
13
+ assert_equal 'report', doc.name
14
+ assert_equal 'projects/cleanWater/report', doc.fullpath
15
+ assert_equal 'report', doc.version.title
16
+ assert_equal 'report.pdf', doc.filename
17
17
  assert_equal 'pdf', doc.version.content.ext
18
- assert ! doc.version.new_record? , "Version is not a new record"
19
- assert_not_nil doc.version.content.id , "Content id is set"
20
- assert_kind_of DocumentContent , doc.version.content
18
+ assert ! doc.version.new_record?
19
+ assert_not_nil doc.version.content.id
20
+ assert_kind_of DocumentContent, doc.version.content
21
21
  assert File.exist?(doc.version.content.filepath)
22
22
  assert_equal File.stat(doc.version.content.filepath).size, doc.version.content.size
23
23
  end
24
24
  end
25
25
 
26
+ def test_create_same_name
27
+ without_files('/test.host/data') do
28
+ login(:tiger)
29
+ node = secure!(Document) { Document.create( :parent_id => nodes_id(:cleanWater),
30
+ :v_title => 'lake',
31
+ :c_file => uploaded_pdf('water.pdf') ) }
32
+ assert !node.new_record?
33
+ assert_equal 'lake-1', node.name
34
+ assert_equal 'lake-1', node.version.title
35
+ end
36
+ end
37
+
26
38
  def test_create_with_bad_filename
27
39
  preserving_files('/test.host/data') do
28
40
  login(:ant)
@@ -176,7 +188,7 @@ class DocumentTest < Zena::Unit::TestCase
176
188
  without_files('/test.host/data') do
177
189
  login(:ant)
178
190
  doc = secure!(Document) { Document.create( :parent_id=>nodes_id(:cleanWater),
179
- :c_file => uploaded_file("some.txt", 'application/octet-stream', "super.zz") ) }
191
+ :c_file => uploaded_fixture("some.txt", 'application/octet-stream', "super.zz") ) }
180
192
  assert_kind_of Document , doc
181
193
  assert ! doc.new_record? , "Not a new record"
182
194
  assert_equal "super", doc.name
@@ -219,7 +231,7 @@ class DocumentTest < Zena::Unit::TestCase
219
231
  without_files('/test.host/data') do
220
232
  login(:ant)
221
233
  doc = secure!(Document) { Document.create( :parent_id=>nodes_id(:cleanWater),
222
- :c_file => uploaded_file('water.pdf', 'application/pdf', 'wat'), :v_title => "lazy waters.pdf") }
234
+ :c_file => uploaded_fixture('water.pdf', 'application/pdf', 'wat'), :v_title => "lazy waters.pdf") }
223
235
  assert_kind_of Document , doc
224
236
  assert ! doc.new_record? , "Not a new record"
225
237
  assert_equal "lazyWaters", doc.name
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class PingHelperTest < ActionView::TestCase
4
+ end
@@ -41,16 +41,20 @@ class MultiVersionTest < Zena::Unit::TestCase
41
41
  context 'when there is only a redaction for the current language' do
42
42
  setup do
43
43
  login(:tiger)
44
- version = secure!(Version) { versions(:opening_fr) }
45
- node = version.node
46
- assert node.destroy_version
47
- assert_equal [:opening_red_fr, :opening_en].map{|s| versions_id(s)}.sort, node.versions.map{|v| v.id}.sort
48
- login(:anon)
44
+ version = secure!(Version) { versions(:opening_en) }
45
+ @node = version.node
46
+ @node.destroy_version
49
47
  end
50
48
 
51
49
  should 'see a default publication' do
50
+ login(:anon)
52
51
  node = secure!(Node) { nodes(:opening) }
53
- assert_equal versions_id(:opening_en), node.version.id
52
+ assert_equal versions_id(:opening_fr), node.version.id
53
+ end
54
+
55
+ should 'see other redaction an publication in another language ' do
56
+ login(:tiger)
57
+ assert_equal [:opening_red_fr, :opening_fr].map{|s| versions_id(s)}.sort, @node.versions.map{|v| v.id}.sort
54
58
  end
55
59
  end
56
60
  end # A visitor without write access
@@ -81,18 +85,22 @@ class MultiVersionTest < Zena::Unit::TestCase
81
85
  context 'in a language not supported' do
82
86
  setup do
83
87
  login(:tiger)
84
- version = secure!(Version) { versions(:opening_fr) }
85
- node = version.node
86
- assert node.destroy_version
87
- assert_equal [:opening_red_fr, :opening_en].map{|s| versions_id(s)}.sort, node.versions.map{|v| v.id}.sort
88
- login(:ant)
88
+ version = secure!(Version) { versions(:opening_en) }
89
+ @node = version.node
90
+ @node.destroy_version
89
91
  end
90
92
 
91
93
  should 'see redaction from another language' do
94
+ login(:ant)
92
95
  visitor.lang = 'de'
93
96
  node = secure!(Node) { nodes(:opening) }
94
97
  assert_equal versions_id(:opening_red_fr), node.version.id
95
98
  end
99
+
100
+ should 'see redaction and publication from another language' do
101
+ login(:tiger)
102
+ assert_equal [:opening_red_fr, :opening_fr].map{|s| versions_id(s)}.sort, @node.versions.map{|v| v.id}.sort
103
+ end
96
104
  end
97
105
 
98
106
  should 'see a redaction if there are no publications' do
@@ -118,7 +126,7 @@ class MultiVersionTest < Zena::Unit::TestCase
118
126
  login(:ant)
119
127
  visitor.status = User::Status[:moderated]
120
128
  end
121
-
129
+
122
130
  context 'on an unpublished node' do
123
131
  setup do
124
132
  @node = secure!(Node) { nodes(:nature) }
@@ -128,7 +136,7 @@ class MultiVersionTest < Zena::Unit::TestCase
128
136
  assert_equal versions_id(:nature_red_en), @node.version.id
129
137
  end
130
138
  end
131
-
139
+
132
140
  context 'on a published node with a redaction' do
133
141
  setup do
134
142
  visitor.lang = 'fr'
@@ -139,8 +147,8 @@ class MultiVersionTest < Zena::Unit::TestCase
139
147
  assert_equal versions_id(:opening_red_fr), @node.version.id
140
148
  end
141
149
  end
142
-
143
-
150
+
151
+
144
152
  end
145
153
  # =========== UPDATE VERSION TESTS =============
146
154
 
@@ -514,7 +522,7 @@ class MultiVersionTest < Zena::Unit::TestCase
514
522
  assert @node.update_attributes(:v_title => 'Larry Summers is a jerk.')
515
523
  end
516
524
  end
517
-
525
+
518
526
  should 'replace old publication autopublishing' do
519
527
  @node.update_attributes(:v_title => 'Is not very apt at the high end.')
520
528
  assert_equal Zena::Status[:rep], versions(:collections_en).status
@@ -10,15 +10,28 @@ class NodeTest < Zena::Unit::TestCase
10
10
  :parent_id => Zena::FoxyParser::id('zena', 'cleanWater'),
11
11
  }.freeze
12
12
 
13
- def test_find_by_path
13
+ def test_rebuild_fullpath
14
14
  Node.connection.execute "UPDATE nodes SET fullpath = NULL, basepath = NULL WHERE id = #{nodes_id(:wiki)}"
15
15
  login(:ant)
16
16
  node = nodes(:wiki)
17
17
  assert_nil node[:fullpath]
18
- node = secure!(Node) { Node.find_by_path('projects/wiki') }
18
+ node.send(:rebuild_fullpath)
19
19
  assert_equal 'projects/wiki', node.fullpath
20
+ end
21
+
22
+ def test_rebuild_fullpath_in_custom_base
23
+ Node.connection.execute "UPDATE nodes SET fullpath = NULL, basepath = NULL WHERE id = #{nodes_id(:status)}"
24
+ login(:ant)
25
+ node = nodes(:status)
26
+ assert_nil node[:fullpath]
27
+ node.send(:rebuild_fullpath)
28
+ assert_equal 'projects/cleanWater/status', node.fullpath
29
+ end
30
+
31
+ def test_find_by_path
32
+ login(:ant)
20
33
  node = secure!(Node) { Node.find_by_path('projects/wiki') }
21
- assert_equal 'projects/wiki', node[:fullpath]
34
+ assert_equal nodes_id(:wiki), node.id
22
35
  end
23
36
 
24
37
  def test_match_query
@@ -73,38 +86,12 @@ class NodeTest < Zena::Unit::TestCase
73
86
  end
74
87
  end
75
88
 
76
- def test_get_fullpath
77
- Node.connection.execute "UPDATE nodes SET fullpath = NULL, basepath = NULL WHERE id IN (#{nodes_id(:lake)},#{nodes_id(:cleanWater)})"
78
- login(:ant)
79
- node = secure!(Node) { nodes(:lake) }
80
- parent = node.parent
81
- assert_nil parent[:fullpath]
82
- assert_nil node[:fullpath]
83
- assert_equal 'projects/cleanWater/lakeAddress', node.fullpath
84
- node.reload
85
- assert_equal 'projects/cleanWater/lakeAddress', node[:fullpath]
86
- parent.reload
87
- assert_equal 'projects/cleanWater', parent[:fullpath]
88
- end
89
-
90
89
  def test_get_fullpath_rebuild
91
- login(:ant)
90
+ login(:lion)
92
91
  node = secure!(Node) { nodes(:lake) }
93
92
  assert_equal 'projects/cleanWater/lakeAddress', node.fullpath
94
- Node.connection.execute "UPDATE nodes SET parent_id = #{nodes_id(:collections)} WHERE id = #{node[:id]}"
95
- node.reload
96
- assert_equal 'projects/cleanWater/lakeAddress', node.fullpath
97
- assert_equal 'collections/lakeAddress', node.fullpath(true)
98
- end
99
-
100
- def test_get_fullpath_after_private
101
- Node.connection.execute "UPDATE nodes SET parent_id = #{nodes_id(:ant)} WHERE id = #{nodes_id(:status)}" # put 'status' page inside private 'ant' page
102
- node = nil
103
- login(:tiger)
104
- assert_nothing_raised { node = secure!(Node) { nodes(:status) } }
105
- assert_kind_of Node, node
106
- assert_nothing_raised { node = secure!(Node) { Node.find_by_path('people/ant') } }
107
- assert_nothing_raised { node = secure!(Node) { Node.find_by_path('people/ant/status')}}
93
+ assert node.update_attributes(:parent_id => nodes_id(:collections))
94
+ assert_equal 'collections/lakeAddress', node.fullpath
108
95
  end
109
96
 
110
97
  def test_fullpath_updated_on_parent_rename
@@ -119,8 +106,7 @@ class NodeTest < Zena::Unit::TestCase
119
106
  assert node.publish
120
107
  assert_equal 'nicePeople', node.name # sync name
121
108
  node = secure!(Node) { nodes(:tiger) }
122
- assert_nil node[:fullpath] # cache empty
123
- assert_equal 'nicePeople/tiger', node.fullpath
109
+ assert_equal 'nicePeople/tiger', node[:fullpath]
124
110
  end
125
111
 
126
112
  def test_rootpath
@@ -174,6 +160,10 @@ class NodeTest < Zena::Unit::TestCase
174
160
  test_page = secure!(Node) { Node.create(:name=>"yoba", :parent_id => nodes_id(:cleanWater), :inherit=>1 ) }
175
161
  assert ! test_page.new_record? , "Not a new record"
176
162
  assert_equal nodes_id(:cleanWater), test_page.parent[:id]
163
+ assert_equal 'projects/cleanWater/yoba', test_page.fullpath
164
+ assert_equal 'projects/cleanWater', test_page.basepath
165
+ parent = secure!(Node) { nodes(:cleanWater) }
166
+ assert_equal 'projects/cleanWater', parent.fullpath
177
167
  end
178
168
 
179
169
  def test_cannot_update_v_status
@@ -637,7 +627,7 @@ class NodeTest < Zena::Unit::TestCase
637
627
  login(:lion)
638
628
  node = secure!(Node) { nodes(:art) }
639
629
  assert node.update_attributes('tagged_ids' => [nodes_id(:status), nodes_id(:people)])
640
- assert_equal 2, node.find(:all, 'tagged').size
630
+ assert_equal 2, node.find(:all, 'tagged', :skip_rubyless => true).size
641
631
  stat = secure!(Node) { nodes(:status) }
642
632
  peop = secure!(Node) { nodes(:people) }
643
633
  assert_equal node[:id], stat.find(:first, 'set_tags')[:id]
@@ -994,9 +984,9 @@ done: \"I am done\""
994
984
  end
995
985
 
996
986
  def test_to_yaml
997
- test_site('zena')
998
- User.connection.execute "UPDATE users SET time_zone = 'Asia/Jakarta' WHERE id = #{users_id(:tiger)}"
987
+ #test_site('zena')
999
988
  login(:tiger)
989
+ visitor.time_zone = 'Asia/Jakarta'
1000
990
  assert_equal 'Asia/Jakarta', visitor.time_zone
1001
991
  status = secure!(Node) { nodes(:status) }
1002
992
  assert status.update_attributes_with_transformation(:v_status => Zena::Status[:pub], :v_text => "This is a \"link\":#{nodes_zip(:projects)}.", :d_foo => "A picture: !#{nodes_zip(:bird_jpg)}!")
@@ -1004,7 +994,11 @@ done: \"I am done\""
1004
994
  assert_match %r{v_text:\s+\"?This is a "link":\(\.\./\.\.\)\.}, yaml
1005
995
  assert_match %r{d_foo:\s+\"?A picture: !\(\.\./\.\./wiki/bird\)!}, yaml
1006
996
  assert_no_match %r{log_at}, yaml
997
+ end
1007
998
 
999
+ def test_to_yaml_with_change_log_at
1000
+ login(:tiger)
1001
+ visitor.time_zone = 'Asia/Jakarta'
1008
1002
  prop = secure!(Node) { nodes(:proposition) }
1009
1003
  assert prop.update_attributes_with_transformation(:v_status => Zena::Status[:pub], :v_text => "This is a \"link\":#{nodes_zip(:projects)}.", :d_foo => "A picture: !#{nodes_zip(:bird_jpg)}!", :log_at => "2008-10-20 14:53")
1010
1004
  assert_equal Time.gm(2008,10,20,7,53), prop.log_at
@@ -1090,61 +1084,6 @@ done: \"I am done\""
1090
1084
  assert_equal nodes_id(:opening), match[0][:id]
1091
1085
  end
1092
1086
 
1093
- def find_nodes_with_pagination_in_cleanWaterProject(page, per_page = 3, opts=nil)
1094
- previous_page, collection, next_page = nil, nil, nil
1095
- opts ||= {:conditions => ['project_id = ?', nodes_id(:cleanWater)], :order=>'name ASC'}
1096
- collection = secure(Node) do
1097
- previous_page, collection, next_page = Node.find_with_pagination(:all, opts.merge(:page=>page, :per_page=>per_page))
1098
- collection
1099
- end
1100
- [previous_page, collection, next_page]
1101
- end
1102
-
1103
- def test_find_with_pagination_page_1
1104
- login(:tiger)
1105
- previous_page, collection, next_page = find_nodes_with_pagination_in_cleanWaterProject(1,3)
1106
- assert_nil previous_page
1107
- assert_equal 2, next_page
1108
- assert_equal 3, collection.size
1109
- assert_equal [:bananas, :crocodiles, :lake_jpg].map{|s| nodes_id(s)}, collection.map{|r| r[:id]}
1110
- end
1111
-
1112
- def test_find_with_pagination_page_2
1113
- login(:tiger)
1114
- previous_page, collection, next_page = find_nodes_with_pagination_in_cleanWaterProject(2,3)
1115
- assert_equal 1, previous_page
1116
- assert_equal 3, next_page
1117
- assert_equal 3, collection.size
1118
- assert_equal [:lake, :opening, :status].map{|s| nodes_id(s)}, collection.map{|r| r[:id]}
1119
- end
1120
-
1121
- def test_find_with_pagination_page_3
1122
- login(:tiger)
1123
- previous_page, collection, next_page = find_nodes_with_pagination_in_cleanWaterProject(3,3)
1124
- assert_equal 2, previous_page
1125
- assert_nil next_page
1126
- assert_equal 2, collection.size
1127
- assert_equal [:track, :water_pdf].map{|s| nodes_id(s)}, collection.map{|r| r[:id]}
1128
- end
1129
-
1130
- def test_find_with_pagination_page_4
1131
- login(:tiger)
1132
- previous_page, collection, next_page = find_nodes_with_pagination_in_cleanWaterProject(4,3)
1133
- assert_equal 3, previous_page
1134
- assert_nil next_page
1135
- assert_nil collection
1136
- end
1137
-
1138
- def test_find_match_with_pagination
1139
- login(:tiger)
1140
- previous_page, match, next_page, count_all = secure!(Node) { Node.find_with_pagination(:all, Node.match_query('opening').merge(:page => 1, :per_page => 3)) }
1141
- assert_equal 1, match.size
1142
- assert_equal 1, count_all
1143
- assert_nil previous_page
1144
- assert_nil next_page
1145
- assert_equal nodes_id(:opening), match[0][:id]
1146
- end
1147
-
1148
1087
  def test_data
1149
1088
  login(:ant)
1150
1089
  node = secure!(Node) { nodes(:cleanWater) }
@@ -1245,7 +1184,7 @@ done: \"I am done\""
1245
1184
 
1246
1185
  # position has different scopes depending on first two letters of kpath: 'ND', 'NN', 'NP', 'NR'
1247
1186
  doc = secure!(Document) { Document.create( :parent_id=>nodes_id(:cleanWater),
1248
- :c_file => uploaded_file('water.pdf', 'application/pdf', 'wat'), :v_title => "lazy waters.pdf") }
1187
+ :c_file => uploaded_fixture('water.pdf', 'application/pdf', 'wat'), :v_title => "lazy waters.pdf") }
1249
1188
  assert !doc.new_record?
1250
1189
  assert_equal 0.0, doc.position
1251
1190
 
@@ -1,6 +1,15 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class NoteTest < Zena::Unit::TestCase
4
+
5
+ def test_create_simplest
6
+ login(:ant)
7
+ test_page = secure!(Note) { Note.create(:name=>"yoba", :parent_id => nodes_id(:cleanWater), :inherit=>1 ) }
8
+ assert ! test_page.new_record? , "Not a new record"
9
+ assert_equal nodes_id(:cleanWater), test_page.parent[:id]
10
+ assert_equal 'projects/cleanWater/yoba', test_page.fullpath
11
+ assert_equal 'projects/cleanWater', test_page.basepath
12
+ end
4
13
 
5
14
  def test_create_with_name
6
15
  login(:tiger)
@@ -73,7 +73,7 @@ class PageTest < Zena::Unit::TestCase
73
73
  assert_equal node[:id], bird[:parent_id]
74
74
  assert node.update_attributes(:custom_base => true)
75
75
  assert_equal 'projects/aWikiWithZena', node.basepath
76
- bird = secure!(Node) { nodes(:bird_jpg)} # avoid @parent caching
77
- assert_equal 'projects/aWikiWithZena', bird.basepath(true)
76
+ bird = secure!(Node) { nodes(:bird_jpg)}
77
+ assert_equal 'projects/aWikiWithZena', bird.basepath
78
78
  end
79
79
  end
@@ -74,7 +74,7 @@ class SecureTest < Zena::Unit::TestCase
74
74
  context 'loaded without secure' do
75
75
  setup do
76
76
  @node = nodes(:secret)
77
- @visitor.visit(@node)
77
+ #@visitor.visit(@node)
78
78
  end
79
79
 
80
80
  should 'receive false when asking can_read?' do
@@ -256,7 +256,7 @@ class SecureTest < Zena::Unit::TestCase
256
256
  context 'without secure' do
257
257
  should 'not be allowed to build new children' do
258
258
  node = Node.new(defaults)
259
- assert !node.save
259
+ assert_raise ActiveRecord::RecordInvalid do node.save! end
260
260
  assert_equal 'record not secured', node.errors[:base]
261
261
  end
262
262
 
@@ -926,14 +926,4 @@ class SecureTest < Zena::Unit::TestCase
926
926
  end
927
927
  end # A visitor with reader status
928
928
 
929
- context 'A visitor with deleted status' do
930
- setup do
931
- User.connection.execute "UPDATE users SET status = #{User::Status[:deleted]} WHERE id = #{users_id(:tiger)} AND site_id = #{sites_id(:zena)}"
932
- end
933
-
934
- should 'not be able to login' do
935
- login(:tiger)
936
- assert_equal users(:anon), visitor
937
- end
938
- end # A visitor with deleted status
939
929
  end
@@ -2,34 +2,28 @@ require 'test_helper'
2
2
 
3
3
  class SiteTest < Zena::Unit::TestCase
4
4
 
5
- def test_create_site
6
- site = nil
7
- assert_nothing_raised { site = Site.create_for_host('super.host', 'secret') }
8
- site = Site.find(site[:id]) # reload
9
- assert_equal "Anonymous User", site.anon.fullname
10
- assert_not_equal users(:anon), site.anon[:id]
11
- assert admin = User.login('admin', 'secret', 'super.host'), "Admin user can login"
12
-
13
- assert_equal 3, admin.group_ids.size
14
- root = secure!(Node) { Node.find(site[:root_id]) }
15
- assert_kind_of Project, root
16
- assert_equal Zena::Status[:pub], root.version.status
17
- assert_equal 'default', root.skin
5
+ context 'on site creation' do
6
+ setup do
7
+ @site = Site.create_for_host('super.host', 'secret')
8
+ end
18
9
 
19
- assert Time.now >= root.publish_from
20
- User.make_visitor(:host => 'super.host') # anonymous
10
+ should 'populate super user' do
11
+ assert_equal "Super User", @site.su.fullname
12
+ assert_not_equal users(:su), @site.su[:id]
13
+ end
21
14
 
22
- assert secure!(Node) { Node.find(site[:root_id]) }
23
- assert_nothing_raised { Zena::Db.next_zip(site[:id]) }
15
+ should 'populate anonymous user' do
16
+ assert_equal "Anonymous User", @site.anon.fullname
17
+ assert_not_equal users(:anon), @site.anon[:id]
18
+ end
24
19
 
25
- admin = secure!(User) { User.find(admin[:id]) }
26
- assert_kind_of Contact, admin.contact
27
- anon = secure!(User) { User.find(site.anon[:id]) }
28
- assert_kind_of Contact, anon.contact
20
+ should 'populate 2 admin users' do
21
+ assert_equal 2, @site.admin_user_ids.size
22
+ end
29
23
 
30
- skin = secure!(Skin) { Skin.find_by_name('default') }
31
- assert_kind_of Skin, skin
32
- assert_equal 'default', skin.skin
24
+ should 'return a new project as root node' do
25
+ assert_kind_of Project, @site.root_node
26
+ end
33
27
  end
34
28
 
35
29
  def test_create_site_with_opts
@@ -233,4 +227,29 @@ class SiteTest < Zena::Unit::TestCase
233
227
  assert_equal Hash['w'=>{'fr' => versions_id(:opening_red_fr), 'en' => versions_id(:opening_en)},
234
228
  'r'=>{'fr' => versions_id(:opening_fr), 'en' => versions_id(:opening_en)}], opening.vhash
235
229
  end
230
+
231
+ def test_rebuild_fullpath
232
+ login(:tiger)
233
+ Node.connection.execute "UPDATE nodes SET fullpath = NULL"
234
+ visitor.site.rebuild_fullpath
235
+ status = secure(Node) { nodes(:status) }
236
+ opening = secure(Node) { nodes(:opening) }
237
+ cleanWater = secure(Node) { nodes(:cleanWater) }
238
+ art = secure(Node) { nodes(:art) }
239
+ assert_equal 'projects/cleanWater/status', status.fullpath
240
+ assert_equal 'projects/cleanWater', status.basepath
241
+ assert_equal false, status.custom_base
242
+
243
+ assert_equal 'projects/cleanWater/opening', opening.fullpath
244
+ assert_equal 'projects/cleanWater', opening.basepath
245
+ assert_equal false, opening.custom_base
246
+
247
+ assert_equal 'projects/cleanWater', cleanWater.fullpath
248
+ assert_equal 'projects/cleanWater', cleanWater.basepath
249
+ assert_equal true, cleanWater.custom_base
250
+
251
+ assert_equal 'collections/art', art.fullpath
252
+ assert_equal '', art.basepath
253
+ assert_equal false, art.custom_base
254
+ end
236
255
  end