motiro 0.6.3

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 (309) hide show
  1. data/LICENSE +280 -0
  2. data/README +28 -0
  3. data/README.en +175 -0
  4. data/README.pt-br +175 -0
  5. data/Rakefile +10 -0
  6. data/app/controllers/account_controller.rb +62 -0
  7. data/app/controllers/application.rb +72 -0
  8. data/app/controllers/edition_controller.rb +13 -0
  9. data/app/controllers/javascript_controller.rb +21 -0
  10. data/app/controllers/report_controller.rb +79 -0
  11. data/app/controllers/root_controller.rb +7 -0
  12. data/app/controllers/wiki_controller.rb +102 -0
  13. data/app/core/cache_reporter.rb +53 -0
  14. data/app/core/cache_reporter_fetcher.rb +33 -0
  15. data/app/core/chief_editor.rb +69 -0
  16. data/app/core/reporter.rb +105 -0
  17. data/app/core/reporter_driver.rb +36 -0
  18. data/app/core/reporter_fetcher.rb +39 -0
  19. data/app/core/settings.rb +43 -0
  20. data/app/core/version.rb +1 -0
  21. data/app/core/wiki_page_not_found.rb +33 -0
  22. data/app/core/wiki_reporter.rb +83 -0
  23. data/app/helpers/account_helper.rb +2 -0
  24. data/app/helpers/application_helper.rb +68 -0
  25. data/app/helpers/default_page_provider.rb +28 -0
  26. data/app/helpers/report_helper.rb +2 -0
  27. data/app/helpers/root_helper.rb +2 -0
  28. data/app/helpers/wiki_helper.rb +3 -0
  29. data/app/models/change.rb +96 -0
  30. data/app/models/diff_table_builder.rb +285 -0
  31. data/app/models/event.rb +18 -0
  32. data/app/models/headline.rb +109 -0
  33. data/app/models/page.rb +114 -0
  34. data/app/models/page_sweeper.rb +26 -0
  35. data/app/models/user.rb +85 -0
  36. data/app/ports/chdir_runner.rb +36 -0
  37. data/app/ports/reporter_loader.rb +9 -0
  38. data/app/ports/runner.rb +64 -0
  39. data/app/reporters/darcs_connection.rb +54 -0
  40. data/app/reporters/darcs_reporter.rb +104 -0
  41. data/app/reporters/darcs_settings.rb +9 -0
  42. data/app/reporters/darcs_temp_repo.rb +40 -0
  43. data/app/reporters/events_reporter.rb +28 -0
  44. data/app/reporters/features_reporter.rb +24 -0
  45. data/app/reporters/subversion_reporter.rb +203 -0
  46. data/app/reporters/svn_connection.rb +62 -0
  47. data/app/reporters/svn_settings.rb +40 -0
  48. data/app/views/account/_authorization.rhtml +54 -0
  49. data/app/views/account/_availability.rhtml +5 -0
  50. data/app/views/account/availability.rhtml +1 -0
  51. data/app/views/account/login.rhtml +22 -0
  52. data/app/views/account/logout.rhtml +10 -0
  53. data/app/views/javascript/motiro.rjs +132 -0
  54. data/app/views/javascript/niftycube.rjs +300 -0
  55. data/app/views/layouts/_bottom.rhtml +5 -0
  56. data/app/views/layouts/_header.rhtml +7 -0
  57. data/app/views/layouts/_top.rhtml +25 -0
  58. data/app/views/layouts/application.rhtml +3 -0
  59. data/app/views/layouts/scaffold.rhtml +13 -0
  60. data/app/views/layouts/wiki_edit.rhtml +26 -0
  61. data/app/views/report/list.rhtml +32 -0
  62. data/app/views/report/older.rhtml +26 -0
  63. data/app/views/report/rss.rxml +29 -0
  64. data/app/views/report/show.rhtml +20 -0
  65. data/app/views/root/index.rhtml +33 -0
  66. data/app/views/wiki/_editbar.rhtml +26 -0
  67. data/app/views/wiki/_properties_edit.rhtml +5 -0
  68. data/app/views/wiki/_properties_show.rhtml +5 -0
  69. data/app/views/wiki/edit.rhtml +56 -0
  70. data/app/views/wiki/properties_edit.rhtml +1 -0
  71. data/app/views/wiki/show.rhtml +9 -0
  72. data/bin/motiro +44 -0
  73. data/config/boot.rb +19 -0
  74. data/config/database.yml +14 -0
  75. data/config/environment.rb +64 -0
  76. data/config/environments/development.rb +20 -0
  77. data/config/environments/production.rb +19 -0
  78. data/config/environments/test.rb +19 -0
  79. data/config/motiro.yml +43 -0
  80. data/config/routes.rb +79 -0
  81. data/db/migrate/005_globalize_migration.rb +11363 -0
  82. data/db/migrate/006_remove_headline_title.rb +14 -0
  83. data/db/migrate/007_stretch_rid.rb +11 -0
  84. data/db/migrate/008_add_page_editors.rb +12 -0
  85. data/db/migrate/009_add_page_original_author.rb +12 -0
  86. data/db/migrate/010_remove_empty_string_defaults_from_pages.rb +17 -0
  87. data/db/migrate/011_add_title_and_kind_to_pages.rb +13 -0
  88. data/db/migrate/012_page_modification_info.rb +13 -0
  89. data/db/migrate/013_nullify_initial_page_attributes.rb +21 -0
  90. data/db/migrate/014_events_are_wiki_pages.rb +13 -0
  91. data/db/migrate/015_migrate_previous_event_data.rb +23 -0
  92. data/db/migrate/1_initial_structure.rb +36 -0
  93. data/db/migrate/2_add_authentication.rb +12 -0
  94. data/db/migrate/3_drop_articles.rb +26 -0
  95. data/db/migrate/4_add_page_editing.rb +14 -0
  96. data/db/motirodb.sqlite.initial +0 -0
  97. data/db/schema_version +1 -0
  98. data/db/translation/pt-BR.rb +76 -0
  99. data/doc/README_FOR_APP +2 -0
  100. data/installer/rails_installer_defaults.yml +5 -0
  101. data/lib/import_translations.rb +154 -0
  102. data/lib/login_system.rb +89 -0
  103. data/lib/relative_time.rb +48 -0
  104. data/lib/string_extensions.rb +10 -0
  105. data/lib/stub_hash.rb +22 -0
  106. data/lib/tasks/packaging.rake +93 -0
  107. data/lib/tasks/testing.rake +32 -0
  108. data/lib/tick_daemon.rb +41 -0
  109. data/lib/translator.rb +67 -0
  110. data/lib/wiki_renderer.rb +42 -0
  111. data/lib/wiki_url_generator.rb +29 -0
  112. data/log/.keepdir +0 -0
  113. data/public/404.html +8 -0
  114. data/public/500.html +8 -0
  115. data/public/dispatch.cgi +10 -0
  116. data/public/dispatch.fcgi +24 -0
  117. data/public/dispatch.rb +10 -0
  118. data/public/favicon.ico +0 -0
  119. data/public/images/calendar.png +0 -0
  120. data/public/images/rss.png +0 -0
  121. data/public/javascripts/controls.js +750 -0
  122. data/public/javascripts/dragdrop.js +584 -0
  123. data/public/javascripts/effects.js +854 -0
  124. data/public/javascripts/prototype.js +1785 -0
  125. data/public/robots.txt +1 -0
  126. data/public/stylesheets/motiro.css +269 -0
  127. data/public/stylesheets/niftyCorners.css +35 -0
  128. data/public/stylesheets/scaffold.css +74 -0
  129. data/script/about +3 -0
  130. data/script/breakpointer +3 -0
  131. data/script/console +3 -0
  132. data/script/destroy +3 -0
  133. data/script/generate +3 -0
  134. data/script/performance/benchmarker +3 -0
  135. data/script/performance/profiler +3 -0
  136. data/script/plugin +3 -0
  137. data/script/process/reaper +3 -0
  138. data/script/process/spawner +3 -0
  139. data/script/process/spinner +3 -0
  140. data/script/runner +3 -0
  141. data/script/server +3 -0
  142. data/script/ticker +29 -0
  143. data/test/acceptance/account_test.rb +186 -0
  144. data/test/acceptance/darcs_test.rb +62 -0
  145. data/test/acceptance/events_test.rb +47 -0
  146. data/test/acceptance/main_page_test.rb +92 -0
  147. data/test/acceptance/subversion_test.rb +319 -0
  148. data/test/acceptance/ts_all_suites.rb +27 -0
  149. data/test/acceptance/wiki_test.rb +202 -0
  150. data/test/contract/darcs_test.rb +51 -0
  151. data/test/contract/remote_darcs_test.rb +61 -0
  152. data/test/contract/svn_test.rb +53 -0
  153. data/test/fixtures/changes.yml +25 -0
  154. data/test/fixtures/headlines.yml +45 -0
  155. data/test/fixtures/pages.yml +98 -0
  156. data/test/fixtures/users.yml +31 -0
  157. data/test/functional/account_controller_test.rb +96 -0
  158. data/test/functional/report_controller_test.rb +113 -0
  159. data/test/functional/report_features_test.rb +38 -0
  160. data/test/functional/report_subversion_test.rb +79 -0
  161. data/test/functional/root_controller_test.rb +127 -0
  162. data/test/functional/wiki_controller_test.rb +280 -0
  163. data/test/lib/acceptance_test_case.rb +43 -0
  164. data/test/lib/configuration.rb +53 -0
  165. data/test/lib/darcs_excerpts.rb +181 -0
  166. data/test/lib/darcs_repo.rb +77 -0
  167. data/test/lib/live_mode_test.rb +51 -0
  168. data/test/lib/local_svn.rb +157 -0
  169. data/test/lib/netutils.rb +42 -0
  170. data/test/lib/platform_thread.rb +62 -0
  171. data/test/lib/repoutils.rb +23 -0
  172. data/test/lib/selenium_extensions.rb +32 -0
  173. data/test/lib/stubio.rb +37 -0
  174. data/test/lib/svn_excerpts.rb +288 -0
  175. data/test/lib/test_configuration.rb +14 -0
  176. data/test/lib/webserver.rb +71 -0
  177. data/test/meta/configuration_test.rb +72 -0
  178. data/test/meta/darcs_repo_test.rb +118 -0
  179. data/test/meta/local_svn_test.rb +125 -0
  180. data/test/meta/platform_thread_test.rb +46 -0
  181. data/test/meta/stubio_test.rb +44 -0
  182. data/test/mocks/headline.rb +34 -0
  183. data/test/mocks/svn_reporter.rb +29 -0
  184. data/test/stubs/svn_settings.rb +19 -0
  185. data/test/stubs/url_generator.rb +24 -0
  186. data/test/test_helper.rb +36 -0
  187. data/test/unit/cache_reporter_fetcher_test.rb +46 -0
  188. data/test/unit/cache_reporter_test.rb +97 -0
  189. data/test/unit/caching_test.rb +78 -0
  190. data/test/unit/change_test.rb +152 -0
  191. data/test/unit/chdir_runner_test.rb +77 -0
  192. data/test/unit/chief_editor_test.rb +234 -0
  193. data/test/unit/darcs_connection_test.rb +109 -0
  194. data/test/unit/darcs_reporter_test.rb +146 -0
  195. data/test/unit/darcs_settings_test.rb +37 -0
  196. data/test/unit/darcs_temp_repo_test.rb +51 -0
  197. data/test/unit/default_page_provider_test.rb +46 -0
  198. data/test/unit/diff_table_builder_test.rb +602 -0
  199. data/test/unit/headline_test.rb +259 -0
  200. data/test/unit/page_test.rb +145 -0
  201. data/test/unit/relative_time_test.rb +56 -0
  202. data/test/unit/reporter_driver_test.rb +85 -0
  203. data/test/unit/reporter_fetcher_test.rb +31 -0
  204. data/test/unit/reporter_test.rb +81 -0
  205. data/test/unit/runner_test.rb +93 -0
  206. data/test/unit/settings_test.rb +55 -0
  207. data/test/unit/string_extensions_test.rb +10 -0
  208. data/test/unit/svn_connection_test.rb +183 -0
  209. data/test/unit/svn_reporter_interaction_test.rb +38 -0
  210. data/test/unit/svn_reporter_test.rb +286 -0
  211. data/test/unit/svn_settings_test.rb +86 -0
  212. data/test/unit/translator_test.rb +96 -0
  213. data/test/unit/user_test.rb +125 -0
  214. data/test/unit/wiki_renderer_test.rb +87 -0
  215. data/test/unit/wiki_reporter_test.rb +94 -0
  216. data/test/unit/wiki_url_generator_test.rb +31 -0
  217. data/vendor/motiro-installer.rb +159 -0
  218. data/vendor/plugins/globalize/LICENSE +9 -0
  219. data/vendor/plugins/globalize/README +49 -0
  220. data/vendor/plugins/globalize/data/country_data.csv +240 -0
  221. data/vendor/plugins/globalize/data/language_data.csv +188 -0
  222. data/vendor/plugins/globalize/data/translation_data.csv +3421 -0
  223. data/vendor/plugins/globalize/generators/globalize/USAGE +10 -0
  224. data/vendor/plugins/globalize/generators/globalize/globalize_generator.rb +42 -0
  225. data/vendor/plugins/globalize/generators/globalize/templates/migration.rb.gz +0 -0
  226. data/vendor/plugins/globalize/generators/globalize/templates/tiny_migration.rb.gz +0 -0
  227. data/vendor/plugins/globalize/init.rb +30 -0
  228. data/vendor/plugins/globalize/lib/globalize/localization/core_ext.rb +170 -0
  229. data/vendor/plugins/globalize/lib/globalize/localization/core_ext_hooks.rb +33 -0
  230. data/vendor/plugins/globalize/lib/globalize/localization/db_translate.rb +494 -0
  231. data/vendor/plugins/globalize/lib/globalize/localization/db_view_translator.rb +152 -0
  232. data/vendor/plugins/globalize/lib/globalize/localization/locale.rb +173 -0
  233. data/vendor/plugins/globalize/lib/globalize/localization/rfc_3066.rb +40 -0
  234. data/vendor/plugins/globalize/lib/globalize/models/country.rb +24 -0
  235. data/vendor/plugins/globalize/lib/globalize/models/currency.rb +188 -0
  236. data/vendor/plugins/globalize/lib/globalize/models/language.rb +84 -0
  237. data/vendor/plugins/globalize/lib/globalize/models/model_translation.rb +4 -0
  238. data/vendor/plugins/globalize/lib/globalize/models/translation.rb +9 -0
  239. data/vendor/plugins/globalize/lib/globalize/models/view_translation.rb +14 -0
  240. data/vendor/plugins/globalize/lib/globalize/rails/action_mailer.rb +125 -0
  241. data/vendor/plugins/globalize/lib/globalize/rails/action_view.rb +79 -0
  242. data/vendor/plugins/globalize/lib/globalize/rails/active_record.rb +129 -0
  243. data/vendor/plugins/globalize/lib/globalize/rails/active_record_helper.rb +33 -0
  244. data/vendor/plugins/globalize/populators/pop_dates.rb +81 -0
  245. data/vendor/plugins/globalize/populators/pop_migration.rb +18 -0
  246. data/vendor/plugins/globalize/populators/pop_pluralization.rb +26 -0
  247. data/vendor/plugins/globalize/populators/pop_seps.rb +32 -0
  248. data/vendor/plugins/globalize/tasks/data.rake +130 -0
  249. data/vendor/plugins/globalize/test/action_mailer_test/globalize_mailer/test.en-US.plain.text.rhtml +1 -0
  250. data/vendor/plugins/globalize/test/action_mailer_test/globalize_mailer/test.en.plain.text.rhtml +1 -0
  251. data/vendor/plugins/globalize/test/action_mailer_test/globalize_mailer/test.he.plain.text.rhtml +1 -0
  252. data/vendor/plugins/globalize/test/action_mailer_test/globalize_mailer/test.plain.text.rhtml +1 -0
  253. data/vendor/plugins/globalize/test/action_mailer_test.rb +54 -0
  254. data/vendor/plugins/globalize/test/config/database.yml.default +16 -0
  255. data/vendor/plugins/globalize/test/config/database.yml.example +22 -0
  256. data/vendor/plugins/globalize/test/core_ext_test.rb +61 -0
  257. data/vendor/plugins/globalize/test/currency_test.rb +141 -0
  258. data/vendor/plugins/globalize/test/date_helper_test.rb +634 -0
  259. data/vendor/plugins/globalize/test/db/schema.rb +90 -0
  260. data/vendor/plugins/globalize/test/db_translation_test.rb +374 -0
  261. data/vendor/plugins/globalize/test/fixtures/globalize_categories.yml +7 -0
  262. data/vendor/plugins/globalize/test/fixtures/globalize_categories_products.yml +7 -0
  263. data/vendor/plugins/globalize/test/fixtures/globalize_countries.yml +41 -0
  264. data/vendor/plugins/globalize/test/fixtures/globalize_languages.yml +64 -0
  265. data/vendor/plugins/globalize/test/fixtures/globalize_manufacturers.yml +5 -0
  266. data/vendor/plugins/globalize/test/fixtures/globalize_products.yml +29 -0
  267. data/vendor/plugins/globalize/test/fixtures/globalize_simples.yml +5 -0
  268. data/vendor/plugins/globalize/test/fixtures/globalize_translations.yml +354 -0
  269. data/vendor/plugins/globalize/test/locale_test.rb +27 -0
  270. data/vendor/plugins/globalize/test/mime_responds_test.rb +358 -0
  271. data/vendor/plugins/globalize/test/model_test.rb +17 -0
  272. data/vendor/plugins/globalize/test/standard_data_test_helper.rb +33 -0
  273. data/vendor/plugins/globalize/test/test_helper.rb +19 -0
  274. data/vendor/plugins/globalize/test/test_standard_data.rb +54 -0
  275. data/vendor/plugins/globalize/test/validation_test.rb +29 -0
  276. data/vendor/plugins/globalize/test/view_picking_test.rb +49 -0
  277. data/vendor/plugins/globalize/test/view_translation_test.rb +237 -0
  278. data/vendor/plugins/globalize/test/views/layouts/standard.rhtml +1 -0
  279. data/vendor/plugins/globalize/test/views/respond_to/all_types_with_layout.rhtml +1 -0
  280. data/vendor/plugins/globalize/test/views/respond_to/all_types_with_layout.rjs +1 -0
  281. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.en.rhtml +1 -0
  282. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.en.rjs +1 -0
  283. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.en.rxml +1 -0
  284. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.fr.rhtml +1 -0
  285. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.fr.rjs +1 -0
  286. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.fr.rxml +1 -0
  287. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.rhtml +1 -0
  288. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.rjs +1 -0
  289. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.rxml +1 -0
  290. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.en.rhtml +1 -0
  291. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.en.rjs +1 -0
  292. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.en.rxml +1 -0
  293. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.fr.rhtml +1 -0
  294. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.fr.rjs +1 -0
  295. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.fr.rxml +1 -0
  296. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.rhtml +1 -0
  297. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.rjs +1 -0
  298. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.rxml +1 -0
  299. data/vendor/plugins/globalize/test/views/test.he-IL.rhtml +1 -0
  300. data/vendor/plugins/globalize/test/views/test.rhtml +1 -0
  301. data/vendor/plugins/globalize/test/views/test2.he.rhtml +1 -0
  302. data/vendor/plugins/globalize/test/views/test2.rhtml +1 -0
  303. data/vendor/plugins/test_xml/MIT-LICENSE +20 -0
  304. data/vendor/plugins/test_xml/README +20 -0
  305. data/vendor/plugins/test_xml/Rakefile +22 -0
  306. data/vendor/plugins/test_xml/init.rb +7 -0
  307. data/vendor/plugins/test_xml/lib/xml_assertions.rb +22 -0
  308. data/vendor/plugins/test_xml/test/test_xml_test.rb +40 -0
  309. metadata +505 -0
@@ -0,0 +1,125 @@
1
+ # Motiro - A project tracking tool
2
+ # Copyright (C) 2006-2007 Thiago Arrais
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ require File.dirname(__FILE__) + '/../test_helper'
19
+
20
+ require 'local_svn'
21
+
22
+ class LocalSubversionRepositoryTest < Test::Unit::TestCase
23
+
24
+ def setup
25
+ @repo = LocalSubversionRepository.new
26
+ end
27
+
28
+ def test_readable_to_anonymous
29
+ assert_equal '', execute("svn ls #{@repo.url}") # no error message
30
+ end
31
+
32
+ def test_create_and_destroy
33
+ @repo.destroy
34
+
35
+ assert '' != execute("svn ls #{@repo.url}") # some error message
36
+ end
37
+
38
+ def test_make_remote_dir
39
+ @repo.mkdir('testdir', 'directory for tests created')
40
+
41
+ assert "testdir/\n" == execute("svn ls #{@repo.url}")
42
+ end
43
+
44
+ def test_make_local_dir
45
+ @repo.mkdir('not_yet_commited_dir')
46
+
47
+ assert '' == execute("svn ls #{@repo.url}")
48
+
49
+ @repo.commit('created a new dir')
50
+
51
+ assert_equal "not_yet_commited_dir/\n", execute("svn ls #{@repo.url}")
52
+ end
53
+
54
+ def test_add_file
55
+ @repo.add_file('local_file.txt', "the file is stored locally until\n" +
56
+ "I choose to commit it")
57
+
58
+ assert '' == execute("svn ls #{@repo.url}")
59
+
60
+ @repo.commit('added a file')
61
+
62
+ assert_equal "local_file.txt\n", execute("svn ls #{@repo.url}")
63
+ end
64
+
65
+ def test_modify_file_with_put
66
+ @repo.put_file('local_file.txt', "this is line number 1\n" +
67
+ "this is line number 2\n")
68
+
69
+ assert '' == execute("svn ls #{@repo.url}")
70
+
71
+ @repo.commit('added a new file')
72
+
73
+ assert_equal "local_file.txt\n", execute("svn ls #{@repo.url}")
74
+
75
+ @repo.put_file('local_file.txt', "this is line number 1\n" +
76
+ "this is the new line number 2\n")
77
+
78
+ @repo.commit('added a new file')
79
+
80
+ regexp = Regexp.new("Index: local_file.txt\n" +
81
+ "===================================================================\n" +
82
+ "--- local_file.txt\t\\([^1]+1\\)\n" +
83
+ "\\+\\+\\+ local_file.txt\t\\([^2]+2\\)\n" +
84
+ "@@ -1,2 \\+1,2 @@\n" +
85
+ " this is line number 1\n" +
86
+ "-this is line number 2\n" +
87
+ "\\+this is the new line number 2")
88
+
89
+ assert_not_nil regexp.match(execute("svn diff -r1:2 #{@repo.url}"))
90
+ end
91
+
92
+ def test_remote_copy
93
+ @repo.add_file('fileA.txt', 'contents')
94
+ @repo.commit('added file A')
95
+
96
+ @repo.copy('fileA.txt', 'fileB.txt', 'copied file A to B')
97
+
98
+ assert_equal "fileA.txt\nfileB.txt\n", execute("svn ls #{@repo.url}")
99
+ regexp = /A \/fileB.txt \(\w+ \/fileA.txt:1\)$/
100
+ assert_not_nil regexp.match(execute("svn log #{@repo.url} -vr2"))
101
+ end
102
+
103
+ def test_remote_move
104
+ @repo.add_file('fileA.txt', 'contents')
105
+ @repo.commit('added file A')
106
+
107
+ @repo.move('fileA.txt', 'fileC.txt', 'moved file A to C')
108
+
109
+ assert_equal "fileC.txt\n", execute("svn ls #{@repo.url}")
110
+ regexp = /A \/fileC.txt \(\w+ \/fileA.txt:1\)$/
111
+ assert_not_nil regexp.match(execute("svn log #{@repo.url} -vr2"))
112
+ end
113
+
114
+ def teardown
115
+ @repo.destroy
116
+ end
117
+
118
+ private
119
+
120
+ def execute(command_line)
121
+ pio = IO.popen("#{command_line} 2>&1")
122
+ return pio.read
123
+ end
124
+
125
+ end
@@ -0,0 +1,46 @@
1
+ # Motiro - A project tracking tool
2
+ # Copyright (C) 2006-2007 Thiago Arrais
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ require File.dirname(__FILE__) + '/../test_helper'
19
+
20
+ require 'platform_thread'
21
+
22
+ class PlatformThreadTest < Test::Unit::TestCase
23
+
24
+ def test_uses_win32_process_under_win32
25
+ FlexMock.use 'platform', 'process' do |platform, process|
26
+ platform.should_receive(:OS).and_return(:win32).zero_or_more_times
27
+ process.should_receive(:fork_win32_process).and_return(333).once
28
+ process.should_receive(:kill_win32_process).with(9, 333).once
29
+
30
+ thr = PlatformThread.new(platform, process) do; end
31
+ thr.kill
32
+ end
33
+ end
34
+
35
+ def test_uses_threads_under_unix
36
+ FlexMock.use 'platform', 'process', 'thread' do |platform, process, thread|
37
+ platform.should_receive(:OS).and_return(:unix).zero_or_more_times
38
+ process.should_receive(:new_thread).and_return(thread).once
39
+ thread.should_receive(:kill).once
40
+
41
+ thr = PlatformThread.new(platform, process) do; end
42
+ thr.kill
43
+ end
44
+ end
45
+
46
+ end
@@ -0,0 +1,44 @@
1
+ # Motiro - A project tracking tool
2
+ # Copyright (C) 2006-2007 Thiago Arrais
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ require File.dirname(__FILE__) + '/../test_helper'
19
+
20
+ require 'stubio'
21
+
22
+ class StubIOTest < Test::Unit::TestCase
23
+
24
+ attr_accessor :stbio
25
+
26
+ def setup
27
+ @stbio = StubIO.new(initial_value)
28
+ end
29
+
30
+ def test_can_read_initial_value
31
+ assert_equal initial_value, stbio.read
32
+ end
33
+
34
+ def test_read_initial_value_with_read_and_received_input_with_string
35
+ stbio << received_input
36
+
37
+ assert_equal initial_value, stbio.read
38
+ assert_equal received_input, stbio.string
39
+ end
40
+
41
+ def initial_value; 'initial value'; end
42
+ def received_input; 'received input'; end
43
+
44
+ end
@@ -0,0 +1,34 @@
1
+ require 'test/unit'
2
+
3
+ require 'models/headline'
4
+
5
+ class MockHeadline < Headline
6
+
7
+ include Test::Unit::Assertions
8
+
9
+ @@obj_count = 0
10
+
11
+ def initialize
12
+ super(:author => 'unknown',
13
+ :happened_at => [2006 + @@obj_count, 3, 8],
14
+ :description => 'untitled')
15
+ @expected_times_save_called = 0
16
+ @actual_times_save_called = 0
17
+
18
+ @@obj_count += 1
19
+ end
20
+
21
+ def expect_save
22
+ @expected_times_save_called += 1
23
+ end
24
+
25
+ def save
26
+ @actual_times_save_called += 1
27
+ super
28
+ end
29
+
30
+ def verify
31
+ assert_equal @expected_times_save_called, @actual_times_save_called
32
+ end
33
+
34
+ end
@@ -0,0 +1,29 @@
1
+ require 'test/unit'
2
+
3
+ require 'core/reporter'
4
+
5
+ class MockSubversionReporter < MotiroReporter
6
+
7
+ include Test::Unit::Assertions
8
+
9
+ def initialize
10
+ @actual_times_latest_headlines_called = 0
11
+ @expected_times_latest_headlines_called = 0
12
+ end
13
+
14
+ def expect_latest_headlines(&action)
15
+ @action = action if block_given?
16
+ @expected_times_latest_headlines_called += 1
17
+ end
18
+
19
+ def latest_headlines
20
+ @actual_times_latest_headlines_called += 1
21
+ @action.call
22
+ end
23
+
24
+ def verify
25
+ assert_equal @expected_times_latest_headlines_called,
26
+ @actual_times_latest_headlines_called
27
+ end
28
+
29
+ end
@@ -0,0 +1,19 @@
1
+ class StubConnectionSettingsProvider
2
+
3
+ def initialize(params=Hash.new)
4
+ @confs = { :repo => 'http://svn.fake.domain.org/fake_repo',
5
+ :package_size => 5,
6
+ :update_interval => 10,
7
+ :active_reporter_ids => ['subversion'] }
8
+ @confs.update(params)
9
+ end
10
+
11
+ def repo_url
12
+ @confs[:repo]
13
+ end
14
+
15
+ def method_missing(method_id)
16
+ @confs[method_id]
17
+ end
18
+
19
+ end
@@ -0,0 +1,24 @@
1
+ # Motiro - A project tracking tool
2
+ # Copyright (C) 2006-2007 Thiago Arrais
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ class TestingUrlGenerator
19
+
20
+ def generate_url_for(page_name)
21
+ "http://test.host/wiki/show/#{page_name}"
22
+ end
23
+
24
+ end
@@ -0,0 +1,36 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+
3
+ $:.push File.expand_path(File.dirname(__FILE__))
4
+ $:.push File.expand_path(File.dirname(__FILE__) + '/lib')
5
+ $:.push File.expand_path(File.dirname(__FILE__) + '/../app')
6
+
7
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
8
+ require 'test_help'
9
+
10
+ require 'rubygems'
11
+ require 'flexmock'
12
+
13
+ class Test::Unit::TestCase
14
+ # Transactional fixtures accelerate your tests by wrapping each test method
15
+ # in a transaction that's rolled back on completion. This ensures that the
16
+ # test database remains unchanged so your fixtures don't have to be reloaded
17
+ # between every test method. Fewer database queries means faster tests.
18
+ #
19
+ # Read Mike Clark's excellent walkthrough at
20
+ # http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
21
+ #
22
+ # Every Active Record database supports transactions except MyISAM tables
23
+ # in MySQL. Turn off transactional fixtures in this case; however, if you
24
+ # don't care one way or the other, switching from MyISAM to InnoDB tables
25
+ # is recommended.
26
+ self.use_transactional_fixtures = false
27
+
28
+ # Instantiated fixtures are slow, but give you @david where otherwise you
29
+ # would need people(:david). If you don't want to migrate your existing
30
+ # test cases which use the @david style and don't mind the speed hit (each
31
+ # instantiated fixtures translates to a database query per test method),
32
+ # then set this back to true.
33
+ self.use_instantiated_fixtures = false
34
+
35
+ # Add more helper methods to be used by all tests here...
36
+ end
@@ -0,0 +1,46 @@
1
+ # Motiro - A project tracking tool
2
+ # Copyright (C) 2006-2007 Thiago Arrais
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ require File.dirname(__FILE__) + '/../test_helper'
19
+
20
+ require 'stub_hash'
21
+
22
+ require 'core/cache_reporter_fetcher'
23
+
24
+ class CacheReporterFetcherTest < Test::Unit::TestCase
25
+
26
+ def test_fetched_reporters_are_cache_reporters
27
+ underlying_reporter = { :cache? => true, :name => 'mock_reporter'}
28
+ underlying_fetcher = {:active_reporters => [underlying_reporter] }
29
+
30
+ reporters = CacheReporterFetcher.new(underlying_fetcher).active_reporters
31
+
32
+ assert_equal 1, reporters.size
33
+ assert_equal CacheReporter, reporters.first.class
34
+ assert_equal 'mock_reporter', reporters.first.name
35
+ end
36
+
37
+ def test_bypass_caching_for_reporters_who_dont_want_caching
38
+ underlying_reporter = { :cache? => false, :name => 'mock_reporter'}
39
+ underlying_fetcher = {:active_reporters => [underlying_reporter] }
40
+
41
+ reporters = CacheReporterFetcher.new(underlying_fetcher).active_reporters
42
+
43
+ assert_equal underlying_reporter, reporters.first
44
+ end
45
+
46
+ end
@@ -0,0 +1,97 @@
1
+ # Motiro - A project tracking tool
2
+ # Copyright (C) 2006-2007 Thiago Arrais
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ require File.dirname(__FILE__) + '/../test_helper'
19
+
20
+ require 'stub_hash'
21
+ require 'stubs/svn_settings'
22
+ require 'mocks/headline'
23
+
24
+ require 'core/cache_reporter'
25
+
26
+ class CacheReporterTest < Test::Unit::TestCase
27
+
28
+ def test_latest_headlines
29
+ FlexMock.use do |mock_headline_class|
30
+ settings = StubConnectionSettingsProvider.new(:package_size => 6)
31
+ underlying_reporter = {:name => 'mail_list' }
32
+
33
+ mock_headline_class.should_receive(:latest).
34
+ with(6, 'mail_list').
35
+ once
36
+
37
+ reporter = CacheReporter.new(underlying_reporter, settings, mock_headline_class)
38
+ reporter.latest_headlines
39
+ end
40
+ end
41
+
42
+ def test_retrieve_all_headlines
43
+ FlexMock.use do |mock_headline_class|
44
+ settings = StubConnectionSettingsProvider.new(:package_size => 6)
45
+ underlying_reporter = {:name => 'mail_list'}
46
+
47
+ mock_headline_class.should_receive(:find).
48
+ with(:all, :conditions => ['reported_by = ?', 'mail_list'],
49
+ :order => 'happened_at DESC').
50
+ once
51
+
52
+ reporter = CacheReporter.new(underlying_reporter, settings, mock_headline_class)
53
+ reporter.headlines
54
+ end
55
+ end
56
+
57
+ def test_headline
58
+ FlexMock.use do |mock_headline_class|
59
+ settings = StubConnectionSettingsProvider.new(:package_size => 6)
60
+ underlying_reporter = {:name => 'mail_list' }
61
+
62
+ mock_headline_class.should_receive(:find_with_reporter_and_rid).
63
+ with('mail_list', 'm18').
64
+ returns(MockHeadline.new).
65
+ once
66
+
67
+ reporter = CacheReporter.new(underlying_reporter, settings, mock_headline_class)
68
+ reporter.headline('m18')
69
+ end
70
+ end
71
+
72
+ def test_mimics_underlying_reporter_name
73
+ svn_cache = CacheReporter.new({ :name => 'svn'})
74
+ darcs_cache = CacheReporter.new({ :name => 'darcs'})
75
+
76
+ assert_equal 'svn', svn_cache.name
77
+ assert_equal 'darcs', darcs_cache.name
78
+ end
79
+
80
+ def test_mimics_underlying_reporter_title
81
+ title = 'My reporter title'
82
+ r = CacheReporter.new(:channel_title => title)
83
+
84
+ assert_equal title, r.channel_title
85
+ end
86
+
87
+ def test_mimics_underlying_reporter_request_parameter_generation
88
+ FlexMock.use do |reporter|
89
+ reporter.should_receive(:params_for).with('reporter_id').once.
90
+ and_return({})
91
+
92
+ r = CacheReporter.new(reporter)
93
+ assert_equal({}, r.params_for('reporter_id'))
94
+ end
95
+ end
96
+
97
+ end
@@ -0,0 +1,78 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ require 'local_svn'
4
+ require 'svn_excerpts'
5
+
6
+ require 'stubs/svn_settings'
7
+
8
+ require 'core/chief_editor'
9
+ require 'core/reporter_driver'
10
+
11
+ require 'reporters/subversion_reporter'
12
+
13
+ class CachingTest < Test::Unit::TestCase
14
+
15
+ def setup
16
+ clean_database
17
+ create_fixture_objects
18
+ end
19
+
20
+ def test_recaches_failures
21
+ @connection.should_receive(:log).
22
+ with_any_args.
23
+ returns(R6 + "-------------\n")
24
+
25
+ diff = '' # simulate connection timeout
26
+
27
+ @connection.mock_handle(:diff) do
28
+ diff
29
+ end
30
+
31
+ @connection.should_receive(:info).
32
+ with('/trunk/src/test/stubs/svn_connection.rb', '6').
33
+ returns(R6C1INFO)
34
+
35
+ @connection.should_receive(:info).
36
+ with('/trunk/src/test/unit/headline_test.rb', '6').
37
+ returns(R6C2INFO)
38
+
39
+ @driver.tick
40
+
41
+ headlines = @chief_editor.latest_news_from(@reporter.name)
42
+ changes = headlines.first.changes
43
+ assert_nil changes.first.diff
44
+
45
+ diff = R6DIFF # connection is back
46
+
47
+ @driver.tick
48
+
49
+ headlines = @chief_editor.latest_news_from(@reporter.name)
50
+ changes = headlines.first.changes
51
+ assert_not_nil changes.first.diff
52
+ assert_equal R6C1DIFF, changes.first.diff
53
+ end
54
+
55
+ def teardown
56
+ clean_database
57
+ end
58
+
59
+ private
60
+
61
+ def clean_database
62
+ Headline.delete_all
63
+ end
64
+
65
+ def create_fixture_objects
66
+ @connection = FlexMock.new
67
+ settings = StubConnectionSettingsProvider.new(:update_interval => 12)
68
+ @reporter = SubversionReporter.new(@connection)
69
+
70
+ fetcher = FlexMock.new
71
+ fetcher.should_receive(:active_reporters).returns([@reporter])
72
+
73
+ @driver = ReporterDriver.new(fetcher)
74
+
75
+ @chief_editor = ChiefEditor.new(settings, fetcher)
76
+ end
77
+
78
+ end