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
@@ -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