typo 5.4.4 → 5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (292) hide show
  1. data/CHANGELOG +59 -28
  2. data/MAINTAINERS +9 -17
  3. data/README +28 -20
  4. data/UPGRADE +6 -2
  5. data/app/controllers/accounts_controller.rb +1 -1
  6. data/app/controllers/admin/content_controller.rb +1 -1
  7. data/app/controllers/admin/feedback_controller.rb +3 -3
  8. data/app/controllers/admin/pages_controller.rb +2 -0
  9. data/app/controllers/application_controller.rb +6 -1
  10. data/app/controllers/articles_controller.rb +13 -1
  11. data/app/helpers/application_helper.rb +5 -2
  12. data/app/helpers/authors_helper.rb +14 -3
  13. data/app/models/article.rb +6 -4
  14. data/app/models/blog.rb +0 -4
  15. data/app/models/blog_sweeper.rb +1 -1
  16. data/app/models/content.rb +10 -5
  17. data/app/models/page_cache.rb +6 -7
  18. data/app/models/user.rb +1 -0
  19. data/app/views/admin/content/_form.html.erb +13 -11
  20. data/app/views/admin/content/_images.html.erb +1 -1
  21. data/app/views/admin/content/_simple_editor.html.erb +1 -0
  22. data/app/views/admin/content/_visual_editor.html.erb +1 -0
  23. data/app/views/admin/dashboard/_overview.html.erb +7 -7
  24. data/app/views/admin/pages/_form.html.erb +1 -0
  25. data/app/views/admin/pages/_images.html.erb +18 -0
  26. data/app/views/admin/pages/_simple_editor.html.erb +1 -2
  27. data/app/views/admin/pages/_visual_editor.html.erb +2 -1
  28. data/app/views/admin/pages/index.html.erb +1 -1
  29. data/app/views/admin/settings/feedback.html.erb +2 -1
  30. data/app/views/admin/tags/edit.html.erb +1 -1
  31. data/app/views/articles/_article.html.erb +17 -13
  32. data/app/views/articles/_article_content.html.erb +1 -0
  33. data/app/views/articles/_comment_box.html.erb +1 -1
  34. data/app/views/articles/_password_form.html.erb +10 -0
  35. data/app/views/articles/groupings.html.erb +1 -1
  36. data/app/views/articles/index.html.erb +1 -2
  37. data/app/views/articles/read.html.erb +1 -4
  38. data/app/views/articles/search.html.erb +1 -1
  39. data/app/views/layouts/administration.html.erb +1 -1
  40. data/app/views/shared/_search.html.erb +1 -1
  41. data/config/ckeditor.yml +14 -0
  42. data/config/environment.rb +13 -25
  43. data/config/environments/test.rb +1 -3
  44. data/config/filemanager.yml +16 -0
  45. data/config/initializers/access_rules.rb +5 -0
  46. data/config/routes.rb +5 -1
  47. data/db/migrate/004_add_sidebars.rb +3 -9
  48. data/db/migrate/089_drop_cache_information_table.rb +31 -0
  49. data/db/migrate/090_remove_keywords_from_posts.rb +9 -0
  50. data/db/migrate/091_adds_password_protection_to_posts.rb +9 -0
  51. data/doc/CACHE.SETUP.README +36 -0
  52. data/lang/de_DE.rb +6 -1
  53. data/lang/pl_PL.rb +221 -89
  54. data/lib/filemanager.rb +53 -0
  55. data/lib/filemanager/controller.rb +217 -0
  56. data/lib/i18n_interpolation_deprecation.rb +26 -0
  57. data/lib/rails_patch/active_support.rb +4 -0
  58. data/lib/tasks/release.rake +4 -131
  59. data/lib/typo_version.rb +1 -1
  60. data/public/.htaccess +6 -5
  61. data/public/filemanager/images/avi.gif +0 -0
  62. data/public/filemanager/images/box.gif +0 -0
  63. data/public/filemanager/images/bullet.gif +0 -0
  64. data/public/filemanager/images/close.gif +0 -0
  65. data/public/filemanager/images/closelabel.gif +0 -0
  66. data/public/filemanager/images/doc.gif +0 -0
  67. data/public/filemanager/images/donate-button.gif +0 -0
  68. data/public/filemanager/images/download-icon.gif +0 -0
  69. data/public/filemanager/images/folder.gif +0 -0
  70. data/public/filemanager/images/gif.gif +0 -0
  71. data/public/filemanager/images/htm.gif +0 -0
  72. data/public/filemanager/images/html.gif +0 -0
  73. data/public/filemanager/images/image-1.jpg +0 -0
  74. data/public/filemanager/images/image.gif +0 -0
  75. data/public/filemanager/images/jpg.gif +0 -0
  76. data/public/filemanager/images/loading.gif +0 -0
  77. data/public/filemanager/images/mov.gif +0 -0
  78. data/public/filemanager/images/nextlabel.gif +0 -0
  79. data/public/filemanager/images/pdf.gif +0 -0
  80. data/public/filemanager/images/png.gif +0 -0
  81. data/public/filemanager/images/ppt.gif +0 -0
  82. data/public/filemanager/images/prevlabel.gif +0 -0
  83. data/public/filemanager/images/rar.gif +0 -0
  84. data/public/filemanager/images/rm.gif +0 -0
  85. data/public/filemanager/images/rmvb.gif +0 -0
  86. data/public/filemanager/images/separator.gif +0 -0
  87. data/public/filemanager/images/spacer.gif +0 -0
  88. data/public/filemanager/images/swf.gif +0 -0
  89. data/public/filemanager/images/thumb-1.jpg +0 -0
  90. data/public/filemanager/images/tool_copy.gif +0 -0
  91. data/public/filemanager/images/tool_cut.gif +0 -0
  92. data/public/filemanager/images/tool_del.gif +0 -0
  93. data/public/filemanager/images/tool_folder.gif +0 -0
  94. data/public/filemanager/images/tool_imagemanager.gif +0 -0
  95. data/public/filemanager/images/tool_new.gif +0 -0
  96. data/public/filemanager/images/tool_paste.gif +0 -0
  97. data/public/filemanager/images/tool_props.gif +0 -0
  98. data/public/filemanager/images/tool_refresh.gif +0 -0
  99. data/public/filemanager/images/tool_unzip.gif +0 -0
  100. data/public/filemanager/images/tool_upload.gif +0 -0
  101. data/public/filemanager/images/tool_zip.gif +0 -0
  102. data/public/filemanager/images/txt.gif +0 -0
  103. data/public/filemanager/images/unknown.gif +0 -0
  104. data/public/filemanager/images/wmv.gif +0 -0
  105. data/public/filemanager/images/xls.gif +0 -0
  106. data/public/filemanager/images/zip.gif +0 -0
  107. data/public/filemanager/javascripts/filemanager.js +6 -0
  108. data/public/filemanager/javascripts/lang/en.js +31 -0
  109. data/public/filemanager/javascripts/lang/zh_CN.js +31 -0
  110. data/public/filemanager/javascripts/lightbox.js +497 -0
  111. data/public/filemanager/javascripts/translate.js +42 -0
  112. data/public/filemanager/resources/resources.txt +1 -0
  113. data/public/filemanager/stylesheets/filelist.css +147 -0
  114. data/public/filemanager/stylesheets/general.css +135 -0
  115. data/public/filemanager/stylesheets/lightbox.css +27 -0
  116. data/public/javascripts/prototype_ext.js +117 -0
  117. data/public/stylesheets/administration.css +19 -2
  118. data/themes/dirtylicious/views/articles/_article.html.erb +16 -12
  119. data/themes/dirtylicious/views/articles/_article_content.html.erb +1 -0
  120. data/themes/dirtylicious/views/articles/_password_form.html.erb +10 -0
  121. data/themes/scribbish/views/articles/_article.html.erb +18 -14
  122. data/themes/scribbish/views/articles/_article_content.html.erb +1 -0
  123. data/themes/scribbish/views/articles/_password_form.html.erb +10 -0
  124. data/themes/standard_issue/views/articles/_article.html.erb +16 -12
  125. data/themes/standard_issue/views/articles/_article_content.html.erb +1 -0
  126. data/themes/standard_issue/views/articles/_password_form.html.erb +10 -0
  127. data/themes/true-blue-3/helpers/theme_helper.rb +2 -2
  128. data/themes/true-blue-3/images/submit_form.jpg +0 -0
  129. data/themes/true-blue-3/stylesheets/style.css +27 -3
  130. data/themes/true-blue-3/views/articles/_article.html.erb +13 -8
  131. data/themes/true-blue-3/views/articles/_article_content.html.erb +1 -0
  132. data/themes/true-blue-3/views/articles/_comment_form.html.erb +1 -1
  133. data/themes/true-blue-3/views/articles/_password_form.html.erb +10 -0
  134. data/themes/true-blue-3/views/categories/_article.html.erb +5 -0
  135. data/themes/true-blue-3/views/tags/_article.html.erb +4 -0
  136. data/themes/typographic/views/articles/_article.html.erb +16 -12
  137. data/themes/typographic/views/articles/_article_content.html.erb +1 -0
  138. data/themes/typographic/views/articles/_password_form.html.erb +10 -0
  139. data/vendor/plugins/easy-ckeditor/app/controllers/ckeditor_controller.rb +2 -1
  140. data/vendor/plugins/easy-ckeditor/lib/ckeditor.rb +1 -20
  141. data/vendor/plugins/easy-ckeditor/{tasks → lib/tasks}/ckeditor_tasks.rake +0 -0
  142. data/vendor/plugins/filemanager/app/controllers/fm/filemanager_controller.rb +22 -0
  143. data/vendor/plugins/filemanager/app/views/fm/filemanager/index.html.erb +512 -0
  144. data/vendor/plugins/filemanager/app/views/fm/filemanager/view.html.erb +67 -0
  145. data/vendor/plugins/filemanager/filemanager.yml +16 -0
  146. data/vendor/plugins/static_sidebar/lib/static_sidebar.rb +4 -2
  147. data/vendor/plugins/typo_converter/{tasks → lib/tasks}/typo_converters_tasks.rake +0 -0
  148. data/vendor/plugins/typo_login_system/lib/access_control.rb +24 -1
  149. data/vendor/plugins/typo_textfilter_code/{tasks → lib/tasks}/typo_textfilter_code_tasks.rake +0 -0
  150. data/vendor/plugins/typo_textfilter_code/lib/typo_textfilter_code.rb +4 -3
  151. data/vendor/plugins/typo_textfilter_flickr/{tasks → lib/tasks}/typo_textfilter_flickr_tasks.rake +0 -0
  152. data/vendor/plugins/typo_textfilter_htmlfilter/{tasks → lib/tasks}/typo_textfilter_htmlfilter_tasks.rake +0 -0
  153. data/vendor/plugins/typo_textfilter_lightbox/{tasks → lib/tasks}/typo_textfilter_lightbox_tasks.rake +0 -0
  154. data/vendor/plugins/typo_textfilter_markdown/{tasks → lib/tasks}/typo_textfilter_markdown_tasks.rake +0 -0
  155. data/vendor/plugins/typo_textfilter_none/{tasks → lib/tasks}/typo_textfilter_none_tasks.rake +0 -0
  156. data/vendor/plugins/typo_textfilter_smartypants/{tasks → lib/tasks}/typo_textfilter_smartypants_tasks.rake +0 -0
  157. data/vendor/plugins/typo_textfilter_textile/{tasks → lib/tasks}/typo_textfilter_textile_tasks.rake +0 -0
  158. data/vendor/plugins/typo_textfilter_textile_and_markdown/{tasks → lib/tasks}/typo_textfilter_textile_and_markdown_tasks.rake +0 -0
  159. data/vendor/plugins/xml_sidebar/views/content.rhtml +1 -1
  160. metadata +190 -195
  161. data/app/controllers/admin/cache_controller.rb +0 -9
  162. data/app/models/cache_information.rb +0 -19
  163. data/db/schema.rb +0 -242
  164. data/doc/test_themes.rb +0 -50
  165. data/public/javascripts/ckeditor/config.js +0 -27
  166. data/spec/controllers/accounts_controller_spec.rb +0 -414
  167. data/spec/controllers/admin/cache_controller_spec.rb +0 -18
  168. data/spec/controllers/admin/categories_controller_spec.rb +0 -73
  169. data/spec/controllers/admin/content_controller_spec.rb +0 -443
  170. data/spec/controllers/admin/dashboard_controller_spec.rb +0 -13
  171. data/spec/controllers/admin/feedback_controller_spec.rb +0 -308
  172. data/spec/controllers/admin/pages_controller_spec.rb +0 -80
  173. data/spec/controllers/admin/profiles_controller_spec.rb +0 -22
  174. data/spec/controllers/admin/resources_controller_spec.rb +0 -53
  175. data/spec/controllers/admin/settings_controller_spec.rb +0 -80
  176. data/spec/controllers/admin/tags_controller_spec.rb +0 -64
  177. data/spec/controllers/admin/textfilters_controller_spec.rb +0 -20
  178. data/spec/controllers/admin/themes_controller_spec.rb +0 -30
  179. data/spec/controllers/admin/users_controller_spec.rb +0 -109
  180. data/spec/controllers/application_controller_spec.rb +0 -18
  181. data/spec/controllers/articles_controller_spec.rb +0 -440
  182. data/spec/controllers/authors_controller_spec.rb +0 -42
  183. data/spec/controllers/backend_controller_spec.rb +0 -337
  184. data/spec/controllers/categories_controller_spec.rb +0 -117
  185. data/spec/controllers/comments_controller_spec.rb +0 -137
  186. data/spec/controllers/routes/articles_routing_spec.rb +0 -31
  187. data/spec/controllers/routes/xml_routing_spec.rb +0 -71
  188. data/spec/controllers/setup_controller_spec.rb +0 -24
  189. data/spec/controllers/tags_controller_spec.rb +0 -147
  190. data/spec/controllers/textfilter_controller_spec.rb +0 -192
  191. data/spec/controllers/theme_controller_spec.rb +0 -39
  192. data/spec/controllers/xml_controller_spec.rb +0 -185
  193. data/spec/factories.rb +0 -69
  194. data/spec/helpers/application_helper_spec.rb +0 -25
  195. data/spec/helpers/content_helper_spec.rb +0 -28
  196. data/spec/lib/text_filter_plugin_spec.rb +0 -15
  197. data/spec/models/amazon_sidebar_spec.rb +0 -40
  198. data/spec/models/article_closing_spec.rb +0 -42
  199. data/spec/models/article_spec.rb +0 -515
  200. data/spec/models/blog_spec.rb +0 -116
  201. data/spec/models/cache_information_spec.rb +0 -42
  202. data/spec/models/cache_support_spec.rb +0 -51
  203. data/spec/models/category_spec.rb +0 -44
  204. data/spec/models/comment_spec.rb +0 -240
  205. data/spec/models/configuration_spec.rb +0 -91
  206. data/spec/models/content_state/feedback_states_spec.rb +0 -64
  207. data/spec/models/notification_spec.rb +0 -8
  208. data/spec/models/page_cache_spec.rb +0 -30
  209. data/spec/models/page_spec.rb +0 -91
  210. data/spec/models/ping_pinger_spec.rb +0 -33
  211. data/spec/models/ping_spec.rb +0 -154
  212. data/spec/models/redirect_spec.rb +0 -17
  213. data/spec/models/resource_spec.rb +0 -39
  214. data/spec/models/route_cache_spec.rb +0 -11
  215. data/spec/models/sidebar_spec.rb +0 -7
  216. data/spec/models/static_sidebar_spec.rb +0 -17
  217. data/spec/models/tag_spec.rb +0 -65
  218. data/spec/models/text_filter_spec.rb +0 -34
  219. data/spec/models/theme_spec.rb +0 -45
  220. data/spec/models/trackback_spec.rb +0 -60
  221. data/spec/models/trigger_spec.rb +0 -40
  222. data/spec/models/user_spec.rb +0 -198
  223. data/spec/rcov.opts +0 -2
  224. data/spec/spec.opts +0 -4
  225. data/spec/spec_helper.rb +0 -133
  226. data/spec/views/articles/index_spec.rb +0 -63
  227. data/spec/views/articles/read_spec.rb +0 -67
  228. data/spec/views/comments/html_sanitization_spec.rb +0 -119
  229. data/test/fixtures/blogs.yml +0 -27
  230. data/test/fixtures/categories.yml +0 -29
  231. data/test/fixtures/categorizations.yml +0 -31
  232. data/test/fixtures/contents.yml +0 -231
  233. data/test/fixtures/feedback.yml +0 -180
  234. data/test/fixtures/notification_mailer/article +0 -3
  235. data/test/fixtures/notification_mailer/comment +0 -3
  236. data/test/fixtures/notification_mailer/trackback +0 -3
  237. data/test/fixtures/notifications.yml +0 -0
  238. data/test/fixtures/page_caches.yml +0 -7
  239. data/test/fixtures/profiles.yml +0 -27
  240. data/test/fixtures/redirects.yml +0 -10
  241. data/test/fixtures/resources.yml +0 -21
  242. data/test/fixtures/sidebars.yml +0 -10
  243. data/test/fixtures/tags.yml +0 -10
  244. data/test/fixtures/text_filters.yml +0 -37
  245. data/test/fixtures/triggers.yml +0 -1
  246. data/test/fixtures/users.yml +0 -101
  247. data/test/mocks/test/dns_mock.rb +0 -13
  248. data/test/mocks/test/flickr_mock.rb +0 -30
  249. data/test/mocks/test/http_mock.rb +0 -39
  250. data/test/mocks/test/theme_mock.rb +0 -5
  251. data/test/mocks/test/xmlrpc_mock.rb +0 -28
  252. data/test/mocks/themes/123-numbers-in-path/about.markdown +0 -0
  253. data/test/mocks/themes/CamelCaseDirectory/about.markdown +0 -0
  254. data/test/mocks/themes/i-have-special-chars/about.markdown +0 -0
  255. data/test/mocks/themes/typographic/about.markdown +0 -7
  256. data/test/mocks/themes/typographic/images/Thumbs.db +0 -0
  257. data/test/mocks/themes/typographic/images/accept.png +0 -0
  258. data/test/mocks/themes/typographic/images/accept50.png +0 -0
  259. data/test/mocks/themes/typographic/images/bg_body.jpg +0 -0
  260. data/test/mocks/themes/typographic/images/bg_white.png +0 -0
  261. data/test/mocks/themes/typographic/images/bg_wrapper.jpg +0 -0
  262. data/test/mocks/themes/typographic/images/bullet_bottom.png +0 -0
  263. data/test/mocks/themes/typographic/images/bullet_right.png +0 -0
  264. data/test/mocks/themes/typographic/images/email_open.png +0 -0
  265. data/test/mocks/themes/typographic/images/email_open50.png +0 -0
  266. data/test/mocks/themes/typographic/images/meta.png +0 -0
  267. data/test/mocks/themes/typographic/images/page_edit.png +0 -0
  268. data/test/mocks/themes/typographic/images/page_edit50.png +0 -0
  269. data/test/mocks/themes/typographic/images/tag.png +0 -0
  270. data/test/mocks/themes/typographic/images/user.png +0 -0
  271. data/test/mocks/themes/typographic/images/user50.png +0 -0
  272. data/test/mocks/themes/typographic/images/world_link.png +0 -0
  273. data/test/mocks/themes/typographic/images/world_link50.png +0 -0
  274. data/test/mocks/themes/typographic/layouts/default.html.erb +0 -42
  275. data/test/mocks/themes/typographic/preview.png +0 -0
  276. data/test/mocks/themes/typographic/stylesheets/colors.css +0 -51
  277. data/test/mocks/themes/typographic/stylesheets/layout.css +0 -346
  278. data/test/mocks/themes/typographic/stylesheets/reset.css +0 -5
  279. data/test/mocks/themes/typographic/stylesheets/style.css +0 -36
  280. data/test/mocks/themes/typographic/views/articles/_article.html.erb +0 -41
  281. data/test/mocks/themes/typographic/views/articles/_comment.html.erb +0 -14
  282. data/test/mocks/themes/typographic/views/articles/_comment_form.html.erb +0 -48
  283. data/test/mocks/themes/typographic/views/articles/_comment_list.html.erb +0 -7
  284. data/test/mocks/themes/typographic/views/articles/_trackback.html.erb +0 -9
  285. data/test/mocks/themes/typographic/views/articles/comment_preview.html.erb +0 -10
  286. data/test/mocks/themes/typographic/views/articles/index.html.erb +0 -5
  287. data/test/mocks/themes/typographic/views/articles/read.html.erb +0 -42
  288. data/test/mocks/themes/typographic/views/shared/_search.html.erb +0 -17
  289. data/test/mocks/themes/typographic/views/theme/static_view_test.html.erb +0 -1
  290. data/test/test_helper.rb +0 -13
  291. data/themes/true-blue-3/images/frederic-de-villamil.jpg +0 -0
  292. data/themes/true-blue-3/images/textarea_bg.jpg +0 -0
@@ -1,515 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe Article do
4
-
5
- before do
6
- @articles = []
7
- end
8
-
9
- describe 'Factory Girl' do
10
- it 'should article factory valid' do
11
- Factory(:article).should be_valid
12
- Factory.build(:article).should be_valid
13
- end
14
- it 'should second_article factory valid' do
15
- Factory(:second_article).should be_valid
16
- Factory.build(:second_article).should be_valid
17
- end
18
- it 'should article_with_accent_in_html' do
19
- Factory(:article_with_accent_in_html).should be_valid
20
- Factory.build(:article_with_accent_in_html).should be_valid
21
- end
22
- it 'should store user too' do
23
- a = Factory(:article)
24
- a.user.should be_valid
25
- Article.find(a.id).user.should_not be_nil
26
- end
27
- it 'should create multiple valid articles' do
28
- Factory(:article).should be_valid
29
- Factory(:article).should be_valid
30
- end
31
- end
32
-
33
- def assert_results_are(*expected)
34
- assert_equal expected.size, @articles.size
35
- expected.each do |i|
36
- assert @articles.include?(i.is_a?(Symbol) ? contents(i) : i)
37
- end
38
- end
39
-
40
- it "test_content_fields" do
41
- a = Article.new
42
- assert_equal [:body, :extended], a.content_fields
43
- end
44
-
45
- it "test_permalink_url with hostname" do
46
- assert_equal 'http://myblog.net/2004/06/01/article-3', contents(:article3).permalink_url(anchor=nil, only_path=false)
47
- end
48
-
49
- it "test_permalink_url only path" do
50
- assert_equal '/2004/06/01/article-3', contents(:article3).permalink_url(anchor=nil, only_path=true)
51
- end
52
-
53
- it "test_edit_url" do
54
- a = contents(:article3)
55
- assert_equal "http://myblog.net/admin/content/edit/#{a.id}", a.edit_url
56
- end
57
-
58
- it "test_delete_url" do
59
- a = contents(:article3)
60
- assert_equal "http://myblog.net/admin/content/destroy/#{a.id}", a.delete_url
61
- end
62
-
63
- it "test_feed_url" do
64
- a = contents(:article3)
65
- assert_equal "http://myblog.net/2004/06/01/article-3.atom", a.feed_url(:atom10)
66
- assert_equal "http://myblog.net/2004/06/01/article-3.rss", a.feed_url(:rss20)
67
- end
68
-
69
- it "test_create" do
70
- a = Article.new
71
- a.user_id = 1
72
- a.body = "Foo"
73
- a.title = "Zzz"
74
- assert a.save
75
-
76
- a.categories << Category.find(categories(:software).id)
77
- assert_equal 1, a.categories.size
78
-
79
- b = Article.find(a.id)
80
- assert_equal 1, b.categories.size
81
- end
82
-
83
- it "test_permalink_with_title" do
84
- assert_equal( contents(:article3),
85
- Article.find_by_permalink({:year => 2004, :month => 06, :day => 01, :title => "article-3"}) )
86
- assert_raises(ActiveRecord::RecordNotFound) do
87
- Article.find_by_permalink :year => 2005, :month => "06", :day => "01", :title => "article-5"
88
- end
89
- end
90
-
91
- it "test_strip_title" do
92
- assert_equal "article-3", "Article-3".to_url
93
- assert_equal "article-3", "Article 3!?#".to_url
94
- assert_equal "there-is-sex-in-my-violence", "There is Sex in my Violence!".to_url
95
- assert_equal "article", "-article-".to_url
96
- assert_equal "lorem-ipsum-dolor-sit-amet-consectetaur-adipisicing-elit", "Lorem ipsum dolor sit amet, consectetaur adipisicing elit".to_url
97
- assert_equal "my-cats-best-friend", "My Cat's Best Friend".to_url
98
- end
99
-
100
- it "test_perma_title" do
101
- assert_equal "article-1", contents(:article1).stripped_title
102
- assert_equal "article-2", contents(:article2).stripped_title
103
- assert_equal "article-3", contents(:article3).stripped_title
104
- end
105
-
106
- it "test_html_title" do
107
- a = Article.new
108
- a.title = "This <i>is</i> a <b>test</b>"
109
- assert a.save
110
-
111
- assert_equal 'this-is-a-test', a.permalink
112
- end
113
-
114
- it "test_multibyte_title" do
115
- a = Article.new
116
- a.title = "ルビー"
117
- assert a.save
118
-
119
- assert_equal '%E3%83%AB%E3%83%93%E3%83%BC', a.permalink
120
- end
121
-
122
- describe "the html_urls method" do
123
- it "test_urls" do
124
- urls = contents(:article4).html_urls
125
- assert_equal ["http://www.example.com/public"], urls
126
- end
127
-
128
- it "should only match the href attribute" do
129
- a = Factory.create :article
130
- a.body = '<a href="http://a/b">a</a> <a fhref="wrong">wrong</a>'
131
- urls = a.html_urls
132
- assert_equal ["http://a/b"], urls
133
- end
134
-
135
- it "should match across newlines" do
136
- a = Factory.create :article
137
- a.body = "<a\nhref=\"http://foo/bar\">foo</a>"
138
- urls = a.html_urls
139
- assert_equal ["http://foo/bar"], urls
140
- end
141
-
142
- it "should match with single quotes" do
143
- a = Factory.create :article
144
- a.body = "<a href='http://foo/bar'>foo</a>"
145
- urls = a.html_urls
146
- assert_equal ["http://foo/bar"], urls
147
- end
148
-
149
- it "should match with no quotes" do
150
- a = Factory.create :article
151
- a.body = "<a href=http://foo/bar>foo</a>"
152
- urls = a.html_urls
153
- assert_equal ["http://foo/bar"], urls
154
- end
155
- end
156
-
157
- ### XXX: Should we have a test here?
158
- it "test_send_pings" do
159
- end
160
-
161
- ### XXX: Should we have a test here?
162
- it "test_send_multiple_pings" do
163
- end
164
-
165
- it "test_tags" do
166
- a = Article.new(:title => 'Test tag article',
167
- :keywords => 'test tag tag stuff');
168
-
169
- assert_kind_of Article, a
170
- assert_equal 0, a.tags.size
171
-
172
- a.keywords_to_tags
173
-
174
- assert_equal 3, a.tags.size
175
- assert_equal ["test", "tag", "stuff"].sort , a.tags.collect {|t| t.name}.sort
176
- assert a.save
177
-
178
- a.keywords = 'tag bar stuff foo'
179
- a.keywords_to_tags
180
-
181
- assert_equal 4, a.tags.size
182
- assert_equal ["foo", "bar", "tag", "stuff"].sort , a.tags.collect {|t| t.name}.sort
183
-
184
- a.keywords='tag bar'
185
- a.keywords_to_tags
186
-
187
- assert_equal 2, a.tags.size
188
-
189
- a.keywords=''
190
- a.keywords_to_tags
191
-
192
- assert_equal 0, a.tags.size
193
-
194
- b = Article.new(:title => 'Tag Test 2',
195
- :keywords => 'tag test article one two three')
196
-
197
- assert_kind_of Article,b
198
- assert_equal 0, b.tags.size
199
-
200
- c = Article.new(:title => 'Foo', :keywords => 'test "tag test" web2.0')
201
- c.keywords_to_tags
202
-
203
- assert_equal 3, c.tags.size
204
- assert_equal ['test', 'tagtest', 'web2-0'].sort, c.tags.collect(&:name).sort
205
- end
206
-
207
- it "test_find_published_by_tag_name" do
208
- @articles = Tag.find_by_name(tags(:foo).name).published_articles
209
-
210
- assert_results_are(:article1, :article2, :publisher_article)
211
- end
212
-
213
-
214
- it "test_find_published" do
215
- @articles = Article.find_published
216
- assert_results_are(:search_target, :article1, :article2,
217
- :article3, :inactive_article,:xmltest,
218
- :spammed_article, :publisher_article, :markdown_article, :utf8_article)
219
-
220
- @articles = Article.find_published(:all,
221
- :conditions => "title = 'Article 1!'")
222
- assert_results_are :article1
223
- end
224
-
225
- it "test_just_published_flag" do
226
- art = Article.new(:title => 'title',
227
- :body => 'body',
228
- :published => true)
229
- assert art.just_changed_published_status?
230
- assert art.save
231
-
232
- art = Article.find(art.id)
233
- assert !art.just_changed_published_status?
234
-
235
- art = Article.create!(:title => 'title2',
236
- :body => 'body',
237
- :published => false)
238
-
239
- assert ! art.just_changed_published_status?
240
- end
241
-
242
- it "test_future_publishing" do
243
- assert_sets_trigger(Article.create!(:title => 'title', :body => 'body',
244
- :published => true,
245
- :published_at => Time.now + 4.seconds))
246
- end
247
-
248
- it "test_future_publishing_without_published_flag" do
249
- assert_sets_trigger Article.create!(:title => 'title', :body => 'body',
250
- :published_at => Time.now + 4.seconds)
251
- end
252
-
253
- it "test_triggers_are_dependent" do
254
- art = Article.create!(:title => 'title', :body => 'body',
255
- :published_at => Time.now + 1.hour)
256
- assert_equal 1, Trigger.count
257
- art.destroy
258
- assert_equal 0, Trigger.count
259
- end
260
-
261
- def assert_sets_trigger(art)
262
- assert_equal 1, Trigger.count
263
- assert Trigger.find(:first, :conditions => ['pending_item_id = ?', art.id])
264
- assert !art.published
265
- t = Time.now
266
- # We stub the Time.now answer to emulate a sleep of 4. Avoid the sleep. So
267
- # speed up in test
268
- Time.stub!(:now).and_return(t + 5.seconds)
269
- Trigger.fire
270
- art.reload
271
- assert art.published
272
- end
273
-
274
- it "test_find_published_by_category" do
275
- Article.create!(:title => "News from the future!",
276
- :body => "The future is cool!",
277
- :keywords => "future",
278
- :published_at => Time.now + 12.minutes)
279
-
280
- @articles = Category.find_by_permalink('personal').published_articles
281
- assert_results_are :article1, :article2, :article3
282
-
283
- @articles = Category.find_by_permalink('software').published_articles
284
- assert_results_are :article1
285
- end
286
-
287
- it "test_find_published_by_nonexistent_category_raises_exception" do
288
- assert_raises ActiveRecord::RecordNotFound do
289
- Category.find_by_permalink('does-not-exist').published_articles
290
- end
291
- end
292
-
293
- it "test_destroy_file_upload_associations" do
294
- a = contents(:article1)
295
- assert_equal 2, a.resources.size
296
- a.resources << resources(:resource3)
297
- assert_equal 3, a.resources.size
298
- a.destroy
299
- assert_equal 0, Resource.find(:all, :conditions => "article_id = #{a.id}").size
300
- end
301
-
302
- it 'should notify' do
303
- [:randomuser, :bob].each do |tag|
304
- u = users(tag); u.notify_on_new_articles = true; u.save!
305
- end
306
- a = Article.new(:title => 'New Article', :body => 'Foo', :author => 'Tobi', :user => users(:tobi))
307
- assert a.save
308
-
309
- assert_equal 2, a.notify_users.size
310
- assert_equal ['bob', 'randomuser'], a.notify_users.collect {|u| u.login }.sort
311
- end
312
-
313
- it "test_tags_on_update" do
314
- contents(:article3).update_attribute :keywords, "my new tags"
315
- assert_equal 3, contents(:article3).reload.tags.size
316
- assert contents(:article3).tags.include?(Tag.find_by_name("new"))
317
- end
318
-
319
- it "test_withdrawal" do
320
- art = Article.find(contents(:article1).id)
321
- assert art.published?
322
- assert ! art.withdrawn?
323
- art.withdraw!
324
- assert ! art.published?
325
- assert art.withdrawn?
326
- art.reload
327
- assert ! art.published?
328
- assert art.withdrawn?
329
- end
330
-
331
- it "test_default_filter" do
332
- a = Article.find(contents(:article1).id)
333
- assert_equal 'textile', a.default_text_filter.name
334
- end
335
-
336
- it 'should get only ham not spam comment' do
337
- contents(:article2).comments.ham.should == [feedback(:spam_comment)]
338
- contents(:article2).comments.count.should == 2
339
- end
340
-
341
- describe '#access_by?' do
342
-
343
- it 'admin should be access to an article write by another' do
344
- contents(:article2).should be_access_by(users(:tobi))
345
- end
346
-
347
- it 'admin should be access to an article write by himself' do
348
- contents(:article1).should be_access_by(users(:tobi))
349
- end
350
-
351
- end
352
-
353
- describe 'body_and_extended' do
354
- before :each do
355
- @article = contents(:article1)
356
- end
357
-
358
- it 'should combine body and extended content' do
359
- @article.body_and_extended.should ==
360
- "#{@article.body}\n<!--more-->\n#{@article.extended}"
361
- end
362
-
363
- it 'should not insert <!--more--> tags if extended is empty' do
364
- @article.extended = ''
365
- @article.body_and_extended.should == @article.body
366
- end
367
- end
368
-
369
- describe '#search' do
370
-
371
- describe 'is an array', :shared => true do
372
- it 'should get an array' do
373
- @articles.should be_a(Array)
374
- end
375
- end
376
-
377
- describe 'with several words and no result' do
378
-
379
- before :each do
380
- @articles = Article.search('hello world')
381
- end
382
-
383
- it_should_behave_like 'is an array'
384
-
385
- it 'should be empty' do
386
- @articles.should be_empty
387
- end
388
- end
389
-
390
- describe 'with one word and result' do
391
-
392
- before :each do
393
- @articles = Article.search('extended')
394
- end
395
-
396
- it_should_behave_like 'is an array'
397
-
398
- it 'should have one item' do
399
- assert_equal 9, @articles.size
400
- end
401
- end
402
- end
403
-
404
- describe 'body_and_extended=' do
405
- before :each do
406
- @article = contents(:article1)
407
- end
408
-
409
- it 'should split apart values at <!--more-->' do
410
- @article.body_and_extended = 'foo<!--more-->bar'
411
- @article.body.should == 'foo'
412
- @article.extended.should == 'bar'
413
- end
414
-
415
- it 'should remove newlines around <!--more-->' do
416
- @article.body_and_extended = "foo\n<!--more-->\nbar"
417
- @article.body.should == 'foo'
418
- @article.extended.should == 'bar'
419
- end
420
-
421
- it 'should make extended empty if no <!--more--> tag' do
422
- @article.body_and_extended = "foo"
423
- @article.body.should == 'foo'
424
- @article.extended.should be_empty
425
- end
426
-
427
- it 'should preserve extra <!--more--> tags' do
428
- @article.body_and_extended = "foo<!--more-->bar<!--more-->baz"
429
- @article.body.should == 'foo'
430
- @article.extended.should == 'bar<!--more-->baz'
431
- end
432
-
433
- it 'should be settable via self.attributes=' do
434
- @article.attributes = { :body_and_extended => 'foo<!--more-->bar' }
435
- @article.body.should == 'foo'
436
- @article.extended.should == 'bar'
437
- end
438
- end
439
-
440
- describe '#comment_url' do
441
- it 'should render complete url of comment' do
442
- contents(:article1).comment_url.should == "http://myblog.net/comments?article_id=#{contents(:article1).id}"
443
- end
444
- end
445
-
446
- describe '#preview_comment_url' do
447
- it 'should render complete url of comment' do
448
- contents(:article1).preview_comment_url.should == "http://myblog.net/comments/preview?article_id=#{contents(:article1).id}"
449
- end
450
- end
451
-
452
- it "test_can_ping_fresh_article_iff_it_allows_pings" do
453
- a = Article.find(contents(:article1).id)
454
- assert_equal(false, a.pings_closed?)
455
- a.allow_pings = false
456
- assert_equal(true, a.pings_closed?)
457
- end
458
-
459
- it "test_cannot_ping_old_article" do
460
- a = Article.find(contents(:article3).id)
461
- assert_equal(true, a.pings_closed?)
462
- a.allow_pings = false
463
- assert_equal(true, a.pings_closed?)
464
- end
465
-
466
- describe '#published_at_like' do
467
- before do
468
- # Note: these choices of times depend on no other articles within
469
- # these timeframes existing in test/fixtures/contents.yaml.
470
- # In particular, all articles there are from 2005 or earlier, which
471
- # is now more than two years ago, except for two, which are from
472
- # yesterday and the day before. The existence of those two makes
473
- # 1.month.ago not suitable, because yesterday can be last month.
474
- @article_two_month_ago = Factory(:article, :published_at => 2.month.ago)
475
-
476
- @article_four_months_ago = Factory(:article, :published_at => 4.month.ago)
477
- @article_2_four_months_ago = Factory(:article, :published_at => 4.month.ago)
478
-
479
- @article_two_year_ago = Factory(:article, :published_at => 2.year.ago)
480
- @article_2_two_year_ago = Factory(:article, :published_at => 2.year.ago)
481
- end
482
-
483
- it 'should return all content for the year if only year sent' do
484
- Article.published_at_like(2.year.ago.strftime('%Y')).map(&:id).sort.should == [@article_two_year_ago.id, @article_2_two_year_ago.id].sort
485
- end
486
-
487
- it 'should return all content for the month if year and month sent' do
488
- Article.published_at_like(4.month.ago.strftime('%Y-%m')).map(&:id).sort.should == [@article_four_months_ago.id, @article_2_four_months_ago.id].sort
489
- end
490
-
491
- it 'should return all content on this date if date send' do
492
- Article.published_at_like(2.month.ago.strftime('%Y-%m-%d')).map(&:id).sort.should == [@article_two_month_ago.id].sort
493
- end
494
- end
495
-
496
- describe '#has_child?' do
497
- it 'should be true if article has one to link it by parent_id' do
498
- Factory(:article, :parent_id => contents(:article1).id)
499
- contents(:article1).should be_has_child
500
- end
501
- it 'should be false if article has no article to link it by parent_id' do
502
- contents(:article1).should_not be_has_child
503
- end
504
- end
505
-
506
- describe 'self#last_draft(id)' do
507
- it 'should return article if no draft associated' do
508
- Article.last_draft(contents(:article1).id).should == contents(:article1)
509
- end
510
- it 'should return draft associated to this article if there are one' do
511
- draft = Factory(:article, :parent_id => contents(:article1).id, :state => 'draft')
512
- Article.last_draft(contents(:article1).id).should == draft
513
- end
514
- end
515
- end