community_engine 2.0.0.beta1

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 (737) hide show
  1. data/.gitignore +15 -0
  2. data/.gitmodules +0 -0
  3. data/.travis.yml +9 -0
  4. data/CHANGELOG +118 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE +30 -0
  7. data/README.markdown +188 -0
  8. data/Rakefile +54 -0
  9. data/UPGRADING.markdown +93 -0
  10. data/about.yml +7 -0
  11. data/app/assets/images/auth/facebook_32.png +0 -0
  12. data/app/assets/images/auth/facebook_64.png +0 -0
  13. data/app/assets/images/auth/google_32.png +0 -0
  14. data/app/assets/images/auth/google_64.png +0 -0
  15. data/app/assets/images/auth/linked_in_32.png +0 -0
  16. data/app/assets/images/auth/linked_in_64.png +0 -0
  17. data/app/assets/images/auth/open_id_32.png +0 -0
  18. data/app/assets/images/auth/remove.png +0 -0
  19. data/app/assets/images/auth/twitter_32.png +0 -0
  20. data/app/assets/images/auth/twitter_64.png +0 -0
  21. data/app/assets/images/bg_h6btn.gif +0 -0
  22. data/app/assets/images/bg_navbar.gif +0 -0
  23. data/app/assets/images/clearbits/bg_rounded.gif +0 -0
  24. data/app/assets/images/clearbits/comment.gif +0 -0
  25. data/app/assets/images/clearbits/lock.gif +0 -0
  26. data/app/assets/images/clearbits/smile.gif +0 -0
  27. data/app/assets/images/close.gif +0 -0
  28. data/app/assets/images/cropper/marqueeHoriz.gif +0 -0
  29. data/app/assets/images/cropper/marqueeVert.gif +0 -0
  30. data/app/assets/images/feed.png +0 -0
  31. data/app/assets/images/icon_missing_medium.gif +0 -0
  32. data/app/assets/images/icon_missing_thumb.gif +0 -0
  33. data/app/assets/images/icons/31.png +0 -0
  34. data/app/assets/images/icons/52.png +0 -0
  35. data/app/assets/images/icons/accept.png +0 -0
  36. data/app/assets/images/icons/activity_default.png +0 -0
  37. data/app/assets/images/icons/add.png +0 -0
  38. data/app/assets/images/icons/book.png +0 -0
  39. data/app/assets/images/icons/bullet_arrow_down.png +0 -0
  40. data/app/assets/images/icons/bullet_arrow_down_50.png +0 -0
  41. data/app/assets/images/icons/clipping.png +0 -0
  42. data/app/assets/images/icons/comment.png +0 -0
  43. data/app/assets/images/icons/comments.png +0 -0
  44. data/app/assets/images/icons/date.png +0 -0
  45. data/app/assets/images/icons/delete.png +0 -0
  46. data/app/assets/images/icons/email.png +0 -0
  47. data/app/assets/images/icons/email_edit.png +0 -0
  48. data/app/assets/images/icons/email_go.png +0 -0
  49. data/app/assets/images/icons/email_open.png +0 -0
  50. data/app/assets/images/icons/group_go.png +0 -0
  51. data/app/assets/images/icons/heart.png +0 -0
  52. data/app/assets/images/icons/heart_add.png +0 -0
  53. data/app/assets/images/icons/heart_off.png +0 -0
  54. data/app/assets/images/icons/ical.gif +0 -0
  55. data/app/assets/images/icons/page_white.png +0 -0
  56. data/app/assets/images/icons/page_white_magnify.png +0 -0
  57. data/app/assets/images/icons/picture.png +0 -0
  58. data/app/assets/images/icons/poll.png +0 -0
  59. data/app/assets/images/icons/post.png +0 -0
  60. data/app/assets/images/icons/printer.png +0 -0
  61. data/app/assets/images/icons/rss.png +0 -0
  62. data/app/assets/images/icons/slides.png +0 -0
  63. data/app/assets/images/icons/tag_blue.png +0 -0
  64. data/app/assets/images/icons/user.png +0 -0
  65. data/app/assets/images/icons/user_add.png +0 -0
  66. data/app/assets/images/icons/user_edit.png +0 -0
  67. data/app/assets/images/icons/user_go.png +0 -0
  68. data/app/assets/images/icons/vote.png +0 -0
  69. data/app/assets/images/icons/world.png +0 -0
  70. data/app/assets/images/icons/wrench.png +0 -0
  71. data/app/assets/images/logo.gif +0 -0
  72. data/app/assets/images/reply_background.png +0 -0
  73. data/app/assets/images/search.gif +0 -0
  74. data/app/assets/images/spinner.gif +0 -0
  75. data/app/assets/images/spinner_black.gif +0 -0
  76. data/app/assets/images/spinner_bounce.gif +0 -0
  77. data/app/assets/images/swf/choose.png +0 -0
  78. data/app/assets/images/swf/line_grapher.swf +0 -0
  79. data/app/assets/images/swf/swfupload.swf +0 -0
  80. data/app/assets/images/thumb.gif +0 -0
  81. data/app/assets/javascripts/builder.js +136 -0
  82. data/app/assets/javascripts/calendarview.js +839 -0
  83. data/app/assets/javascripts/community_engine.js +20 -0
  84. data/app/assets/javascripts/cropper.css +182 -0
  85. data/app/assets/javascripts/cropper.js +566 -0
  86. data/app/assets/javascripts/forum.js +73 -0
  87. data/app/assets/javascripts/lightbox.js +151 -0
  88. data/app/assets/javascripts/prototip-min.js +27 -0
  89. data/app/assets/javascripts/rails.js +202 -0
  90. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/css/advimage.css +84 -0
  91. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/editor_plugin.js +52 -0
  92. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/editor_plugin_src.js +45 -0
  93. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/image.htm +180 -0
  94. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/img/sample.gif +0 -0
  95. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/js/functions.js +508 -0
  96. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/langs/en.js +3 -0
  97. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/langs/en_dlg.js +43 -0
  98. data/app/assets/stylesheets/community_engine.css +6 -0
  99. data/app/assets/stylesheets/forum.css +605 -0
  100. data/app/assets/stylesheets/lightbox.css +38 -0
  101. data/app/assets/stylesheets/prototip.css +73 -0
  102. data/app/assets/stylesheets/reset-fonts-grids.css +8 -0
  103. data/app/assets/stylesheets/screen.css +977 -0
  104. data/app/controllers/activities_controller.rb +38 -0
  105. data/app/controllers/admin_controller.rb +80 -0
  106. data/app/controllers/ads_controller.rb +85 -0
  107. data/app/controllers/albums_controller.rb +106 -0
  108. data/app/controllers/authorizations_controller.rb +41 -0
  109. data/app/controllers/base_controller.rb +151 -0
  110. data/app/controllers/categories_controller.rb +118 -0
  111. data/app/controllers/clippings_controller.rb +192 -0
  112. data/app/controllers/comment_sweeper.rb +35 -0
  113. data/app/controllers/comments_controller.rb +179 -0
  114. data/app/controllers/event_sweeper.rb +24 -0
  115. data/app/controllers/events_controller.rb +173 -0
  116. data/app/controllers/favorite_sweeper.rb +29 -0
  117. data/app/controllers/favorites_controller.rb +36 -0
  118. data/app/controllers/forums_controller.rb +71 -0
  119. data/app/controllers/friendships_controller.rb +126 -0
  120. data/app/controllers/homepage_features_controller.rb +68 -0
  121. data/app/controllers/invitations_controller.rb +46 -0
  122. data/app/controllers/messages_controller.rb +95 -0
  123. data/app/controllers/metro_areas_controller.rb +68 -0
  124. data/app/controllers/moderators_controller.rb +26 -0
  125. data/app/controllers/monitorships_controller.rb +20 -0
  126. data/app/controllers/page_sweeper.rb +33 -0
  127. data/app/controllers/pages_controller.rb +70 -0
  128. data/app/controllers/password_resets_controller.rb +52 -0
  129. data/app/controllers/photo_manager_controller.rb +11 -0
  130. data/app/controllers/photos_controller.rb +189 -0
  131. data/app/controllers/post_sweeper.rb +36 -0
  132. data/app/controllers/posts_controller.rb +252 -0
  133. data/app/controllers/rsvps_controller.rb +77 -0
  134. data/app/controllers/sb_posts_controller.rb +149 -0
  135. data/app/controllers/sessions_controller.rb +34 -0
  136. data/app/controllers/sitemap_controller.rb +21 -0
  137. data/app/controllers/statistics_controller.rb +34 -0
  138. data/app/controllers/taggable_sweeper.rb +38 -0
  139. data/app/controllers/tags_controller.rb +104 -0
  140. data/app/controllers/theme_controller.rb +60 -0
  141. data/app/controllers/topics_controller.rb +122 -0
  142. data/app/controllers/users_controller.rb +426 -0
  143. data/app/controllers/vote_sweeper.rb +16 -0
  144. data/app/controllers/votes_controller.rb +24 -0
  145. data/app/helpers/base_helper.rb +290 -0
  146. data/app/helpers/forums_helper.rb +31 -0
  147. data/app/helpers/friendships_helper.rb +16 -0
  148. data/app/helpers/monitorships_helper.rb +2 -0
  149. data/app/helpers/posts_helper.rb +17 -0
  150. data/app/helpers/sitemap_helper.rb +7 -0
  151. data/app/helpers/users_helper.rb +6 -0
  152. data/app/models/ad.rb +43 -0
  153. data/app/models/album.rb +12 -0
  154. data/app/models/asset.rb +3 -0
  155. data/app/models/authorization.rb +60 -0
  156. data/app/models/category.rb +20 -0
  157. data/app/models/choice.rb +13 -0
  158. data/app/models/clipping.rb +78 -0
  159. data/app/models/clipping_image.rb +9 -0
  160. data/app/models/comment.rb +122 -0
  161. data/app/models/country.rb +24 -0
  162. data/app/models/event.rb +61 -0
  163. data/app/models/facebook_profile.rb +32 -0
  164. data/app/models/facebook_publisher.rb +45 -0
  165. data/app/models/favorite.rb +47 -0
  166. data/app/models/forum.rb +22 -0
  167. data/app/models/friendship.rb +64 -0
  168. data/app/models/friendship_status.rb +3 -0
  169. data/app/models/homepage_feature.rb +15 -0
  170. data/app/models/invitation.rb +36 -0
  171. data/app/models/message.rb +84 -0
  172. data/app/models/message_thread.rb +33 -0
  173. data/app/models/metro_area.rb +16 -0
  174. data/app/models/moderatorship.rb +8 -0
  175. data/app/models/monitorship.rb +6 -0
  176. data/app/models/page.rb +8 -0
  177. data/app/models/photo.rb +83 -0
  178. data/app/models/poll.rb +39 -0
  179. data/app/models/post.rb +201 -0
  180. data/app/models/role.rb +5 -0
  181. data/app/models/rsvp.rb +24 -0
  182. data/app/models/sb_post.rb +67 -0
  183. data/app/models/state.rb +4 -0
  184. data/app/models/topic.rb +72 -0
  185. data/app/models/twitter_profile.rb +20 -0
  186. data/app/models/user.rb +483 -0
  187. data/app/models/user_notifier.rb +140 -0
  188. data/app/models/user_session.rb +14 -0
  189. data/app/models/vote.rb +19 -0
  190. data/app/views/activities/_activity.html.haml +56 -0
  191. data/app/views/activities/_icon.html.haml +14 -0
  192. data/app/views/activities/_unhandled_item.html.haml +1 -0
  193. data/app/views/activities/destroy.js.rjs +1 -0
  194. data/app/views/activities/index.html.haml +16 -0
  195. data/app/views/activities/network.html.haml +14 -0
  196. data/app/views/admin/comments.html.haml +71 -0
  197. data/app/views/admin/events.html.haml +33 -0
  198. data/app/views/admin/messages.html.haml +4 -0
  199. data/app/views/admin/users.html.haml +69 -0
  200. data/app/views/ads/edit.html.haml +46 -0
  201. data/app/views/ads/index.html.haml +43 -0
  202. data/app/views/ads/new.html.haml +44 -0
  203. data/app/views/ads/show.html.haml +36 -0
  204. data/app/views/albums/_form.html.haml +14 -0
  205. data/app/views/albums/edit.html.haml +16 -0
  206. data/app/views/albums/new.html.haml +15 -0
  207. data/app/views/albums/show.html.haml +32 -0
  208. data/app/views/base/_homepage_banner_message.html.haml +19 -0
  209. data/app/views/base/advertise.html.haml +8 -0
  210. data/app/views/base/plaxo.html.haml +5 -0
  211. data/app/views/base/site_index.html.haml +35 -0
  212. data/app/views/categories/_tips.html.haml +11 -0
  213. data/app/views/categories/edit.html.haml +34 -0
  214. data/app/views/categories/index.html.haml +30 -0
  215. data/app/views/categories/new.html.haml +9 -0
  216. data/app/views/categories/show.html.haml +45 -0
  217. data/app/views/clippings/_clipping.html.haml +18 -0
  218. data/app/views/clippings/_images.html.haml +3 -0
  219. data/app/views/clippings/_meta.html.haml +26 -0
  220. data/app/views/clippings/edit.html.haml +26 -0
  221. data/app/views/clippings/index.html.haml +35 -0
  222. data/app/views/clippings/load_images_from_uri.js.rjs +1 -0
  223. data/app/views/clippings/new.html.haml +29 -0
  224. data/app/views/clippings/new_clipping.html.haml +91 -0
  225. data/app/views/clippings/show.html.haml +56 -0
  226. data/app/views/clippings/site_index.html.haml +34 -0
  227. data/app/views/comments/_comment.html.haml +42 -0
  228. data/app/views/comments/_comment_form.html.haml +50 -0
  229. data/app/views/comments/_edit_form.html.haml +29 -0
  230. data/app/views/comments/create.js.rjs +20 -0
  231. data/app/views/comments/edit.js.rjs +7 -0
  232. data/app/views/comments/index.html.haml +23 -0
  233. data/app/views/comments/update.js.rjs +9 -0
  234. data/app/views/events/_event.html.haml +32 -0
  235. data/app/views/events/_subscribe.html.haml +7 -0
  236. data/app/views/events/edit.html.haml +34 -0
  237. data/app/views/events/index.html.haml +22 -0
  238. data/app/views/events/new.html.haml +32 -0
  239. data/app/views/events/show.html.haml +29 -0
  240. data/app/views/facebook/_fb_require.html.haml +11 -0
  241. data/app/views/favorites/_favorite.html.haml +5 -0
  242. data/app/views/favorites/create.js.rjs +17 -0
  243. data/app/views/favorites/destroy.js.rjs +14 -0
  244. data/app/views/favorites/index.html.haml +10 -0
  245. data/app/views/favorites/show.html.haml +13 -0
  246. data/app/views/forums/_form.html.haml +21 -0
  247. data/app/views/forums/edit.html.haml +11 -0
  248. data/app/views/forums/index.html.haml +70 -0
  249. data/app/views/forums/new.html.haml +9 -0
  250. data/app/views/forums/show.html.haml +85 -0
  251. data/app/views/friendships/_friendship.html.haml +16 -0
  252. data/app/views/friendships/_friendships.html.erb +14 -0
  253. data/app/views/friendships/accepted.html.haml +13 -0
  254. data/app/views/friendships/denied.html.haml +8 -0
  255. data/app/views/friendships/index.html.erb +3 -0
  256. data/app/views/friendships/index.xml.builder +29 -0
  257. data/app/views/friendships/pending.html.haml +7 -0
  258. data/app/views/friendships/show.html.haml +12 -0
  259. data/app/views/homepage_features/edit.html.haml +31 -0
  260. data/app/views/homepage_features/index.html.haml +30 -0
  261. data/app/views/homepage_features/new.html.haml +30 -0
  262. data/app/views/homepage_features/show.html.haml +29 -0
  263. data/app/views/invitations/index.html.erb +16 -0
  264. data/app/views/invitations/new.html.haml +33 -0
  265. data/app/views/layouts/application.html.haml +59 -0
  266. data/app/views/messages/_form.html.haml +24 -0
  267. data/app/views/messages/_inbox.html.haml +41 -0
  268. data/app/views/messages/_sent.html.haml +34 -0
  269. data/app/views/messages/_sidebar_nav.html.haml +9 -0
  270. data/app/views/messages/index.html.haml +8 -0
  271. data/app/views/messages/new.html.haml +10 -0
  272. data/app/views/messages/show.html.haml +40 -0
  273. data/app/views/metro_areas/edit.html.haml +16 -0
  274. data/app/views/metro_areas/index.html.haml +28 -0
  275. data/app/views/metro_areas/new.html.haml +16 -0
  276. data/app/views/metro_areas/show.html.haml +22 -0
  277. data/app/views/moderators/_toggle.html.erb +14 -0
  278. data/app/views/moderators/create.js.rjs +5 -0
  279. data/app/views/moderators/destroy.js.rjs +1 -0
  280. data/app/views/monitorships/create.js.rjs +4 -0
  281. data/app/views/monitorships/destroy.js.rjs +4 -0
  282. data/app/views/pages/_form.html.haml +25 -0
  283. data/app/views/pages/edit.html.haml +16 -0
  284. data/app/views/pages/edit.html.haml~ +16 -0
  285. data/app/views/pages/index.html.haml +34 -0
  286. data/app/views/pages/index.html.haml~ +28 -0
  287. data/app/views/pages/new.html.haml +14 -0
  288. data/app/views/pages/show.html.haml +8 -0
  289. data/app/views/pages/show.html.haml~ +6 -0
  290. data/app/views/password_resets/edit.html.haml +16 -0
  291. data/app/views/password_resets/new.html.haml +13 -0
  292. data/app/views/photo_manager/index.html.haml +49 -0
  293. data/app/views/photos/_manage_photos.html.haml +14 -0
  294. data/app/views/photos/_show_image_list.html.haml +24 -0
  295. data/app/views/photos/edit.html.haml +39 -0
  296. data/app/views/photos/index.html.haml +28 -0
  297. data/app/views/photos/index.xml.builder +9 -0
  298. data/app/views/photos/manage_photos.js.rjs +5 -0
  299. data/app/views/photos/new.html.haml +51 -0
  300. data/app/views/photos/recent.html.haml +8 -0
  301. data/app/views/photos/show.html.haml +53 -0
  302. data/app/views/polls/_edit.html.haml +15 -0
  303. data/app/views/polls/_excerpt.html.haml +4 -0
  304. data/app/views/polls/_new.html.haml +10 -0
  305. data/app/views/polls/_poll_ui.html.haml +37 -0
  306. data/app/views/polls/_polls_sidebar.html.haml +8 -0
  307. data/app/views/posts/_author_profile.html.haml +21 -0
  308. data/app/views/posts/_favorited_post.html.haml +10 -0
  309. data/app/views/posts/_post.html.haml +29 -0
  310. data/app/views/posts/_send_to_friend.html.erb +29 -0
  311. data/app/views/posts/_sidebar_post.html.haml +1 -0
  312. data/app/views/posts/edit.html.haml +48 -0
  313. data/app/views/posts/featured.html.haml +19 -0
  314. data/app/views/posts/index.html.haml +23 -0
  315. data/app/views/posts/manage.html.haml +66 -0
  316. data/app/views/posts/new.html.haml +67 -0
  317. data/app/views/posts/popular.html.haml +35 -0
  318. data/app/views/posts/preview.html.haml +27 -0
  319. data/app/views/posts/recent.html.haml +29 -0
  320. data/app/views/posts/show.html.haml +85 -0
  321. data/app/views/rsvps/edit.html.haml +9 -0
  322. data/app/views/rsvps/new.html.haml +9 -0
  323. data/app/views/sb_posts/_dummy_forum_post.html.erb +13 -0
  324. data/app/views/sb_posts/_edit.html.erb +31 -0
  325. data/app/views/sb_posts/_post.xml.builder +10 -0
  326. data/app/views/sb_posts/_reply_form.html.haml +37 -0
  327. data/app/views/sb_posts/_sb_post.html.haml +34 -0
  328. data/app/views/sb_posts/create.js.rjs +16 -0
  329. data/app/views/sb_posts/edit.html.erb +13 -0
  330. data/app/views/sb_posts/edit.js.rjs +6 -0
  331. data/app/views/sb_posts/index.html.haml +55 -0
  332. data/app/views/sb_posts/index.xml.builder +20 -0
  333. data/app/views/sb_posts/monitored.html.erb +55 -0
  334. data/app/views/sb_posts/monitored.xml.builder +15 -0
  335. data/app/views/sb_posts/update.js.rjs +5 -0
  336. data/app/views/sessions/new.html.haml +27 -0
  337. data/app/views/shared/_admin_nav.html.haml +19 -0
  338. data/app/views/shared/_bio_help.html.haml +4 -0
  339. data/app/views/shared/_box.html.haml +3 -0
  340. data/app/views/shared/_contact.html.haml +5 -0
  341. data/app/views/shared/_explore.html.haml +9 -0
  342. data/app/views/shared/_footer_content.html.haml +13 -0
  343. data/app/views/shared/_header.html.haml +42 -0
  344. data/app/views/shared/_location_chooser.html.haml +21 -0
  345. data/app/views/shared/_login_sidebar.html.haml +14 -0
  346. data/app/views/shared/_messages.html.haml +8 -0
  347. data/app/views/shared/_scripts_and_styles.html.haml +12 -0
  348. data/app/views/shared/_user_menu.html.haml +21 -0
  349. data/app/views/sitemap/index.html.haml +21 -0
  350. data/app/views/sitemap/index.xml.builder +28 -0
  351. data/app/views/statistics/activities.xml.builder +33 -0
  352. data/app/views/statistics/index.html.haml +56 -0
  353. data/app/views/tags/edit.html.haml +19 -0
  354. data/app/views/tags/index.html.haml +25 -0
  355. data/app/views/tags/manage.html.haml +37 -0
  356. data/app/views/tags/show.html.haml +65 -0
  357. data/app/views/topics/_form.html.haml +28 -0
  358. data/app/views/topics/_recent_topics_sidebar.haml +22 -0
  359. data/app/views/topics/edit.html.haml +10 -0
  360. data/app/views/topics/new.html.haml +21 -0
  361. data/app/views/topics/show.html.haml +107 -0
  362. data/app/views/topics/show.xml.builder +15 -0
  363. data/app/views/user_notifier/activation.text.erb +11 -0
  364. data/app/views/user_notifier/comment_notice.text.erb +8 -0
  365. data/app/views/user_notifier/follow_up_comment_notice.text.erb +15 -0
  366. data/app/views/user_notifier/follow_up_comment_notice_anonymous.text.erb +18 -0
  367. data/app/views/user_notifier/forgot_username.text.erb +8 -0
  368. data/app/views/user_notifier/friendship_accepted.text.erb +8 -0
  369. data/app/views/user_notifier/friendship_request.text.erb +8 -0
  370. data/app/views/user_notifier/message_notification.text.erb +14 -0
  371. data/app/views/user_notifier/new_forum_post_notice.text.erb +14 -0
  372. data/app/views/user_notifier/password_reset_instructions.text.erb +10 -0
  373. data/app/views/user_notifier/post_recommendation.text.erb +32 -0
  374. data/app/views/user_notifier/signup_invitation.text.erb +14 -0
  375. data/app/views/user_notifier/signup_notification.text.erb +16 -0
  376. data/app/views/users/_dashboard_nav.html.haml +40 -0
  377. data/app/views/users/_omniauth_connect.html.haml +21 -0
  378. data/app/views/users/_profile_completeness.html.haml +21 -0
  379. data/app/views/users/_profile_user_info_sidebar.html.haml +50 -0
  380. data/app/views/users/_search_options.html.haml +10 -0
  381. data/app/views/users/_sidebar_user.html.haml +8 -0
  382. data/app/views/users/_user.html.haml +31 -0
  383. data/app/views/users/crop_profile_photo.html.haml +40 -0
  384. data/app/views/users/dashboard.html.haml +44 -0
  385. data/app/views/users/edit.html.haml +75 -0
  386. data/app/views/users/edit_account.html.haml +64 -0
  387. data/app/views/users/forgot_username.html.haml +13 -0
  388. data/app/views/users/index.html.haml +18 -0
  389. data/app/views/users/invite.html.haml +31 -0
  390. data/app/views/users/new.html.haml +54 -0
  391. data/app/views/users/resend_activation.html.haml +13 -0
  392. data/app/views/users/show.html.haml +103 -0
  393. data/app/views/users/signup_completed.html.haml +8 -0
  394. data/app/views/users/statistics.html.haml +28 -0
  395. data/app/views/users/upload_profile_photo.html.haml +15 -0
  396. data/app/views/users/welcome_about.html.haml +66 -0
  397. data/app/views/users/welcome_invite.html.haml +33 -0
  398. data/app/views/users/welcome_photo.html.haml +29 -0
  399. data/app/views/votes/create.js.rjs +6 -0
  400. data/community_engine.gemspec +55 -0
  401. data/config/application_config.rb +162 -0
  402. data/config/initializers/cropper.rb +19 -0
  403. data/config/initializers/mce_options.rb +40 -0
  404. data/config/initializers/recaptcha_constants.rb +6 -0
  405. data/config/initializers/white_list.rb +7 -0
  406. data/config/locales/de-DE.yml +1271 -0
  407. data/config/locales/en.yml +1658 -0
  408. data/config/locales/es-AR.yml +758 -0
  409. data/config/locales/es-ES.yml +340 -0
  410. data/config/locales/es-MX.yml +672 -0
  411. data/config/locales/fr-FR.yml +1509 -0
  412. data/config/locales/ja-JP.yml +1321 -0
  413. data/config/locales/ru-RU.yml +97 -0
  414. data/config/locales/sr-CP.yml +89 -0
  415. data/config/locales/sv-SE.yml +1320 -0
  416. data/config/routes.rb +242 -0
  417. data/db/migrate/001_create_users.rb +26 -0
  418. data/db/migrate/002_add_activation_code_to_user.rb +11 -0
  419. data/db/migrate/003_create_photos.rb +22 -0
  420. data/db/migrate/004_add_tag_support.rb +21 -0
  421. data/db/migrate/005_create_friendships.rb +14 -0
  422. data/db/migrate/006_add_comments_tables.rb +18 -0
  423. data/db/migrate/007_create_friendship_statuses.rb +13 -0
  424. data/db/migrate/008_add_friendship_statuses.rb +14 -0
  425. data/db/migrate/009_create_clippings.rb +16 -0
  426. data/db/migrate/010_create_invitations.rb +14 -0
  427. data/db/migrate/011_create_homepage_features.rb +22 -0
  428. data/db/migrate/012_create_posts.rb +19 -0
  429. data/db/migrate/013_create_states.rb +13 -0
  430. data/db/migrate/014_add_states.rb +11 -0
  431. data/db/migrate/015_create_metro_areas.rb +15 -0
  432. data/db/migrate/016_add_metro_areas.rb +295 -0
  433. data/db/migrate/017_add_sessions_table.rb +20 -0
  434. data/db/migrate/018_create_categories.rb +11 -0
  435. data/db/migrate/019_change_comment_to_text_field.rb +10 -0
  436. data/db/migrate/020_create_login_slug.rb +9 -0
  437. data/db/migrate/021_add_category_names.rb +8 -0
  438. data/db/migrate/023_add_denied_friendship_status.rb +13 -0
  439. data/db/migrate/024_add_notification_preferences.rb +13 -0
  440. data/db/migrate/025_create_countries.rb +11 -0
  441. data/db/migrate/026_add_countries.rb +230 -0
  442. data/db/migrate/027_add_us_to_existing_metro_areas.rb +9 -0
  443. data/db/migrate/028_add_country_id_to_users.rb +9 -0
  444. data/db/migrate/029_add_us_to_users_with_states.rb +14 -0
  445. data/db/migrate/030_add_users_counter_cache.rb +9 -0
  446. data/db/migrate/031_news_to_talk.rb +10 -0
  447. data/db/migrate/033_featured_users.rb +9 -0
  448. data/db/migrate/034_add_last_login.rb +9 -0
  449. data/db/migrate/035_track_emailed.rb +9 -0
  450. data/db/migrate/036_create_skills.rb +11 -0
  451. data/db/migrate/037_create_offerings.rb +12 -0
  452. data/db/migrate/038_add_zag_to_users.rb +13 -0
  453. data/db/migrate/039_create_activities_table.rb +17 -0
  454. data/db/migrate/040_add_category_tips.rb +9 -0
  455. data/db/migrate/041_create_events_table.rb +19 -0
  456. data/db/migrate/042_add_privacy_to_users.rb +10 -0
  457. data/db/migrate/043_sql_session_store_setup.rb +39 -0
  458. data/db/migrate/044_category_improvements.rb +11 -0
  459. data/db/migrate/045_adding_indexes.rb +39 -0
  460. data/db/migrate/046_adding_ads.rb +20 -0
  461. data/db/migrate/047_add_polls.rb +30 -0
  462. data/db/migrate/049_add_activities_count.rb +9 -0
  463. data/db/migrate/050_create_initial_schema.rb +73 -0
  464. data/db/migrate/051_add_audience_limitation_to_ads.rb +9 -0
  465. data/db/migrate/052_create_assets.rb +21 -0
  466. data/db/migrate/053_create_favoritables.rb +23 -0
  467. data/db/migrate/054_add_published_as_to_posts.rb +13 -0
  468. data/db/migrate/055_add_published_at_to_posts.rb +15 -0
  469. data/db/migrate/056_create_roles.rb +28 -0
  470. data/db/migrate/057_add_more_indexes.rb +19 -0
  471. data/db/migrate/058_add_anonymous_commenting_fields.rb +15 -0
  472. data/db/migrate/059_create_messages.rb +16 -0
  473. data/db/migrate/060_still_more_indexes.rb +19 -0
  474. data/db/migrate/061_postgres_compatibility_changes.rb +9 -0
  475. data/db/migrate/062_add_notify_to_comments.rb +11 -0
  476. data/db/migrate/063_create_albums.rb +15 -0
  477. data/db/migrate/064_add_album_id_to_photos.rb +9 -0
  478. data/db/migrate/065_add_view_count_to_albums.rb +9 -0
  479. data/db/migrate/066_add_view_count_to_photos.rb +9 -0
  480. data/db/migrate/067_create_static_pages.rb +22 -0
  481. data/db/migrate/068_create_rsvps.rb +13 -0
  482. data/db/migrate/069_create_pages.rb +29 -0
  483. data/db/migrate/070_add_pages.rb +11 -0
  484. data/db/migrate/071_authlogic_compatibility_changes.rb +43 -0
  485. data/db/migrate/072_add_allow_rsvp_to_events.rb +9 -0
  486. data/db/migrate/073_add_taggings_count_to_tags.rb +9 -0
  487. data/db/migrate/074_add_threading_to_messages.rb +19 -0
  488. data/db/migrate/075_add_anonymous_forum_posting.rb +16 -0
  489. data/db/migrate/076_add_comment_notification_toggle.rb +9 -0
  490. data/db/migrate/077_paperclip_changes.rb +36 -0
  491. data/db/migrate/078_create_authorizations.rb +20 -0
  492. data/db/migrate/079_create_slugs.rb +18 -0
  493. data/db/sample/users.rb +55 -0
  494. data/generators/ce_plugin/USAGE +7 -0
  495. data/generators/ce_plugin/ce_plugin_generator.rb +25 -0
  496. data/generators/ce_plugin/templates/README +13 -0
  497. data/generators/ce_plugin/templates/desert_routes.rb +3 -0
  498. data/generators/ce_plugin/templates/init.rb +8 -0
  499. data/generators/ce_plugin/templates/plugin.rb +1 -0
  500. data/generators/plugin_migration/plugin_migration_generator.rb +101 -0
  501. data/generators/plugin_migration/templates/plugin_migration.erb +13 -0
  502. data/lang/TRANSLATION.markdown +32 -0
  503. data/lib/community_engine/authenticated_system.rb +167 -0
  504. data/lib/community_engine/authenticated_test_helper.rb +113 -0
  505. data/lib/community_engine/community_engine_sha1_crypto_method.rb +12 -0
  506. data/lib/community_engine/engine.rb +39 -0
  507. data/lib/community_engine/engines_extensions.rb +7 -0
  508. data/lib/community_engine/i18n_extensions.rb +31 -0
  509. data/lib/community_engine/localized_application.rb +83 -0
  510. data/lib/community_engine/rails_asset_extensions.rb +131 -0
  511. data/lib/community_engine/url_upload.rb +15 -0
  512. data/lib/community_engine/version.rb +10 -0
  513. data/lib/community_engine/viewable.rb +12 -0
  514. data/lib/community_engine.rb +34 -0
  515. data/lib/tag_hacks.rb +24 -0
  516. data/lib/tasks/community_engine_tasks.rake +87 -0
  517. data/public/favicon.ico +0 -0
  518. data/sample_files/s3.yml +17 -0
  519. data/test/fixtures/ads.yml +13 -0
  520. data/test/fixtures/albums.yml +16 -0
  521. data/test/fixtures/categories.yml +16 -0
  522. data/test/fixtures/clippings.yml +15 -0
  523. data/test/fixtures/comments.yml +55 -0
  524. data/test/fixtures/countries.yml +13 -0
  525. data/test/fixtures/events.yml +61 -0
  526. data/test/fixtures/files/Granite.bmp +0 -0
  527. data/test/fixtures/files/library.jpg +0 -0
  528. data/test/fixtures/forums.yml +10 -0
  529. data/test/fixtures/friendship_statuses.yml +10 -0
  530. data/test/fixtures/friendships.yml +15 -0
  531. data/test/fixtures/homepage_features.yml +13 -0
  532. data/test/fixtures/invitations.yml +5 -0
  533. data/test/fixtures/messages.yml +24 -0
  534. data/test/fixtures/metro_areas.yml +24 -0
  535. data/test/fixtures/moderatorships.yml +4 -0
  536. data/test/fixtures/monitorships.yml +10 -0
  537. data/test/fixtures/pages.yml +26 -0
  538. data/test/fixtures/photos.yml +29 -0
  539. data/test/fixtures/posts.yml +49 -0
  540. data/test/fixtures/roles.yml +9 -0
  541. data/test/fixtures/rsvps.yml +7 -0
  542. data/test/fixtures/sb_posts.yml +90 -0
  543. data/test/fixtures/states.yml +7 -0
  544. data/test/fixtures/taggings.yml +15 -0
  545. data/test/fixtures/tags.yml +11 -0
  546. data/test/fixtures/topics.yml +63 -0
  547. data/test/fixtures/users.yml +222 -0
  548. data/test/functional/activities_controller_test.rb +62 -0
  549. data/test/functional/admin_controller_test.rb +60 -0
  550. data/test/functional/ads_controller_test.rb +51 -0
  551. data/test/functional/albums_controller_test.rb +120 -0
  552. data/test/functional/base_controller_test.rb +27 -0
  553. data/test/functional/categories_controller_test.rb +51 -0
  554. data/test/functional/clippings_controller_test.rb +123 -0
  555. data/test/functional/comments_controller_test.rb +215 -0
  556. data/test/functional/events_controller_test.rb +104 -0
  557. data/test/functional/favorites_controller_test.rb +53 -0
  558. data/test/functional/forums_controller_test.rb +95 -0
  559. data/test/functional/friendships_controller_test.rb +98 -0
  560. data/test/functional/homepage_features_controller_test.rb +69 -0
  561. data/test/functional/invitations_controller_test.rb +45 -0
  562. data/test/functional/messages_controller_test.rb +154 -0
  563. data/test/functional/metro_areas_controller_test.rb +63 -0
  564. data/test/functional/moderators_controller_test.rb +22 -0
  565. data/test/functional/monitorships_controller_test.rb +72 -0
  566. data/test/functional/pages_controller_test.rb +95 -0
  567. data/test/functional/password_reset_controller_test.rb +34 -0
  568. data/test/functional/photo_manager_controller_test.rb +21 -0
  569. data/test/functional/photos_controller_test.rb +203 -0
  570. data/test/functional/posts_controller_test.rb +224 -0
  571. data/test/functional/rsvps_controller_test.rb +92 -0
  572. data/test/functional/sb_posts_controller_test.rb +193 -0
  573. data/test/functional/sessions_controller_test.rb +55 -0
  574. data/test/functional/sitemap_controller_test.rb +9 -0
  575. data/test/functional/statistics_controller_test.rb +18 -0
  576. data/test/functional/tags_controller_test.rb +52 -0
  577. data/test/functional/theme_controller_test.rb +11 -0
  578. data/test/functional/topics_controller_test.rb +201 -0
  579. data/test/functional/users_controller_test.rb +460 -0
  580. data/test/functional/votes_controller_test.rb +27 -0
  581. data/test/test_helper.rb +103 -0
  582. data/test/testapp/.gitignore +4 -0
  583. data/test/testapp/README +256 -0
  584. data/test/testapp/Rakefile +7 -0
  585. data/test/testapp/app/controllers/application_controller.rb +3 -0
  586. data/test/testapp/app/helpers/application_helper.rb +2 -0
  587. data/test/testapp/config/application.rb +45 -0
  588. data/test/testapp/config/application_config.rb +1 -0
  589. data/test/testapp/config/boot.rb +10 -0
  590. data/test/testapp/config/database.yml +22 -0
  591. data/test/testapp/config/environment.rb +6 -0
  592. data/test/testapp/config/environments/development.rb +25 -0
  593. data/test/testapp/config/environments/production.rb +49 -0
  594. data/test/testapp/config/environments/test.rb +35 -0
  595. data/test/testapp/config/initializers/backtrace_silencers.rb +7 -0
  596. data/test/testapp/config/initializers/inflections.rb +10 -0
  597. data/test/testapp/config/initializers/mime_types.rb +5 -0
  598. data/test/testapp/config/initializers/secret_token.rb +7 -0
  599. data/test/testapp/config/initializers/session_store.rb +8 -0
  600. data/test/testapp/config/locales/en.yml +5 -0
  601. data/test/testapp/config/routes.rb +3 -0
  602. data/test/testapp/config.ru +4 -0
  603. data/test/testapp/db/schema.rb +456 -0
  604. data/test/testapp/db/seeds.rb +7 -0
  605. data/test/testapp/doc/README_FOR_APP +2 -0
  606. data/test/testapp/lib/tasks/.gitkeep +0 -0
  607. data/test/testapp/public/404.html +26 -0
  608. data/test/testapp/public/422.html +26 -0
  609. data/test/testapp/public/500.html +26 -0
  610. data/test/testapp/public/favicon.ico +0 -0
  611. data/test/testapp/public/images/rails.png +0 -0
  612. data/test/testapp/public/robots.txt +5 -0
  613. data/test/testapp/script/rails +6 -0
  614. data/test/testapp/test/performance/browsing_test.rb +9 -0
  615. data/test/testapp/test/test_helper.rb +13 -0
  616. data/test/testapp/vendor/plugins/.gitkeep +0 -0
  617. data/test/unit/ad_test.rb +34 -0
  618. data/test/unit/asset_test.rb +15 -0
  619. data/test/unit/authorization_test.rb +55 -0
  620. data/test/unit/category_test.rb +22 -0
  621. data/test/unit/choice_test.rb +9 -0
  622. data/test/unit/clipping_image_test.rb +17 -0
  623. data/test/unit/clipping_test.rb +52 -0
  624. data/test/unit/comment_test.rb +107 -0
  625. data/test/unit/country_test.rb +15 -0
  626. data/test/unit/event_test.rb +75 -0
  627. data/test/unit/favorite_test.rb +71 -0
  628. data/test/unit/forum_test.rb +23 -0
  629. data/test/unit/friendship_status_test.rb +10 -0
  630. data/test/unit/friendship_test.rb +38 -0
  631. data/test/unit/homepage_feature_test.rb +10 -0
  632. data/test/unit/invitation_test.rb +27 -0
  633. data/test/unit/message_test.rb +49 -0
  634. data/test/unit/message_thread_test.rb +80 -0
  635. data/test/unit/metro_area_test.rb +10 -0
  636. data/test/unit/moderatorship_test.rb +30 -0
  637. data/test/unit/monitorships_test.rb +38 -0
  638. data/test/unit/page_test.rb +25 -0
  639. data/test/unit/photo_test.rb +42 -0
  640. data/test/unit/poll_test.rb +25 -0
  641. data/test/unit/post_test.rb +212 -0
  642. data/test/unit/rsvp_test.rb +33 -0
  643. data/test/unit/sb_post_test.rb +152 -0
  644. data/test/unit/state_test.rb +10 -0
  645. data/test/unit/tag_test.rb +22 -0
  646. data/test/unit/topic_test.rb +111 -0
  647. data/test/unit/user_notifier_test.rb +108 -0
  648. data/test/unit/user_test.rb +259 -0
  649. data/test/unit/vote_test.rb +9 -0
  650. data/vendor/plugins/activity_tracker/README +4 -0
  651. data/vendor/plugins/activity_tracker/Rakefile +22 -0
  652. data/vendor/plugins/activity_tracker/generators/activity_migration/USAGE +13 -0
  653. data/vendor/plugins/activity_tracker/generators/activity_migration/activity_migration_generator.rb +11 -0
  654. data/vendor/plugins/activity_tracker/generators/activity_migration/templates/migration.rb +17 -0
  655. data/vendor/plugins/activity_tracker/init.rb +1 -0
  656. data/vendor/plugins/activity_tracker/install.rb +1 -0
  657. data/vendor/plugins/activity_tracker/lib/activity.rb +40 -0
  658. data/vendor/plugins/activity_tracker/lib/activity_tracker.rb +80 -0
  659. data/vendor/plugins/activity_tracker/tasks/activity_tracker_tasks.rake +4 -0
  660. data/vendor/plugins/activity_tracker/test/abstract_unit.rb +47 -0
  661. data/vendor/plugins/activity_tracker/test/activity_tracker_test.rb +48 -0
  662. data/vendor/plugins/activity_tracker/test/database.yml +18 -0
  663. data/vendor/plugins/activity_tracker/test/debug.log +3329 -0
  664. data/vendor/plugins/activity_tracker/test/fixtures/test_post.rb +5 -0
  665. data/vendor/plugins/activity_tracker/test/fixtures/test_posts.yml +3 -0
  666. data/vendor/plugins/activity_tracker/test/fixtures/test_user.rb +4 -0
  667. data/vendor/plugins/activity_tracker/test/fixtures/test_users.yml +6 -0
  668. data/vendor/plugins/activity_tracker/test/schema.rb +21 -0
  669. data/vendor/plugins/activity_tracker/uninstall.rb +1 -0
  670. data/vendor/plugins/acts_as_list/README +23 -0
  671. data/vendor/plugins/acts_as_list/init.rb +3 -0
  672. data/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb +256 -0
  673. data/vendor/plugins/acts_as_list/test/list_test.rb +332 -0
  674. data/vendor/plugins/acts_as_publishable/README +3 -0
  675. data/vendor/plugins/acts_as_publishable/Rakefile +22 -0
  676. data/vendor/plugins/acts_as_publishable/generators/publishing/publishing_generator.rb +34 -0
  677. data/vendor/plugins/acts_as_publishable/generators/publishing/templates/migration.rb +13 -0
  678. data/vendor/plugins/acts_as_publishable/init.rb +3 -0
  679. data/vendor/plugins/acts_as_publishable/install.rb +3 -0
  680. data/vendor/plugins/acts_as_publishable/lib/acts_as_publishable.rb +81 -0
  681. data/vendor/plugins/acts_as_publishable/test/acts_as_publishable_test.rb +8 -0
  682. data/vendor/plugins/acts_as_publishable/uninstall.rb +1 -0
  683. data/vendor/plugins/auto_complete/README +23 -0
  684. data/vendor/plugins/auto_complete/Rakefile +22 -0
  685. data/vendor/plugins/auto_complete/init.rb +2 -0
  686. data/vendor/plugins/auto_complete/lib/auto_complete.rb +47 -0
  687. data/vendor/plugins/auto_complete/lib/auto_complete_macros_helper.rb +143 -0
  688. data/vendor/plugins/auto_complete/test/auto_complete_test.rb +67 -0
  689. data/vendor/plugins/enumerations_mixin/LICENSE +20 -0
  690. data/vendor/plugins/enumerations_mixin/README_ENUMERATIONS +163 -0
  691. data/vendor/plugins/enumerations_mixin/init.rb +21 -0
  692. data/vendor/plugins/enumerations_mixin/lib/active_record/acts/enumerated.rb +177 -0
  693. data/vendor/plugins/enumerations_mixin/lib/active_record/aggregations/has_enumerated.rb +60 -0
  694. data/vendor/plugins/enumerations_mixin/lib/active_record/virtual_enumerations.rb +68 -0
  695. data/vendor/plugins/enumerations_mixin/virtual_enumerations_sample.rb +76 -0
  696. data/vendor/plugins/prototype_legacy_helper/README.markdown +13 -0
  697. data/vendor/plugins/prototype_legacy_helper/init.rb +1 -0
  698. data/vendor/plugins/prototype_legacy_helper/lib/prototype_legacy_helper.rb +432 -0
  699. data/vendor/plugins/prototype_legacy_helper/test/test_prototype_helper.rb +297 -0
  700. data/vendor/plugins/resource_feeder/README +4 -0
  701. data/vendor/plugins/resource_feeder/Rakefile +22 -0
  702. data/vendor/plugins/resource_feeder/init.rb +2 -0
  703. data/vendor/plugins/resource_feeder/lib/resource_feeder/atom.rb +71 -0
  704. data/vendor/plugins/resource_feeder/lib/resource_feeder/rss.rb +71 -0
  705. data/vendor/plugins/resource_feeder/lib/resource_feeder.rb +2 -0
  706. data/vendor/plugins/resource_feeder/test/atom_feed_test.rb +85 -0
  707. data/vendor/plugins/resource_feeder/test/rss_feed_test.rb +61 -0
  708. data/vendor/plugins/resource_feeder/test/test_helper.rb +60 -0
  709. data/vendor/plugins/respond_to_parent/MIT-LICENSE +20 -0
  710. data/vendor/plugins/respond_to_parent/README +47 -0
  711. data/vendor/plugins/respond_to_parent/Rakefile +22 -0
  712. data/vendor/plugins/respond_to_parent/init.rb +1 -0
  713. data/vendor/plugins/respond_to_parent/install.rb +1 -0
  714. data/vendor/plugins/respond_to_parent/lib/responds_to_parent.rb +70 -0
  715. data/vendor/plugins/respond_to_parent/test/responds_to_parent_test.rb +10 -0
  716. data/vendor/plugins/respond_to_parent/test/test_helper.rb +6 -0
  717. data/vendor/plugins/respond_to_parent/uninstall.rb +1 -0
  718. data/vendor/plugins/tiny_mce/CHANGELOG_PLUGIN.rdoc +91 -0
  719. data/vendor/plugins/tiny_mce/CHANGELOG_TINYMCE +1226 -0
  720. data/vendor/plugins/tiny_mce/DEV_UPGRADE_NOTES.rdoc +12 -0
  721. data/vendor/plugins/tiny_mce/init.rb +2 -0
  722. data/vendor/plugins/tiny_mce/install.rb +18 -0
  723. data/vendor/plugins/tiny_mce/lib/tiny_mce/base.rb +33 -0
  724. data/vendor/plugins/tiny_mce/lib/tiny_mce/configuration.rb +114 -0
  725. data/vendor/plugins/tiny_mce/lib/tiny_mce/exceptions.rb +14 -0
  726. data/vendor/plugins/tiny_mce/lib/tiny_mce/helpers.rb +43 -0
  727. data/vendor/plugins/tiny_mce/lib/tiny_mce/railtie.rb +13 -0
  728. data/vendor/plugins/tiny_mce/lib/tiny_mce/spell_checker.rb +67 -0
  729. data/vendor/plugins/tiny_mce/lib/tiny_mce/valid_tinymce_langs.yml +25 -0
  730. data/vendor/plugins/tiny_mce/lib/tiny_mce/valid_tinymce_options.yml +167 -0
  731. data/vendor/plugins/tiny_mce/lib/tiny_mce.rb +24 -0
  732. data/vendor/plugins/white_list/README +35 -0
  733. data/vendor/plugins/white_list/Rakefile +22 -0
  734. data/vendor/plugins/white_list/init.rb +35 -0
  735. data/vendor/plugins/white_list/lib/white_list_helper.rb +61 -0
  736. data/vendor/plugins/white_list/test/white_list_test.rb +120 -0
  737. metadata +1073 -0
@@ -0,0 +1,123 @@
1
+ require 'test_helper'
2
+
3
+ class ClippingsControllerTest < ActionController::TestCase
4
+ fixtures :all
5
+
6
+ def setup
7
+ Asset.destroy_all
8
+ end
9
+
10
+ def test_should_get_index
11
+ login_as :quentin
12
+ get :index, :user_id => users(:quentin)
13
+ assert_response :success
14
+ assert assigns(:clippings)
15
+ end
16
+
17
+ def test_should_get_index_rss
18
+ login_as :quentin
19
+ get :index, :user_id => users(:quentin), :format => 'rss'
20
+ assert_response :success
21
+ assert assigns(:clippings)
22
+ end
23
+
24
+
25
+ def test_should_get_private_index_if_logged_in
26
+ login_as :quentin
27
+ get :index, :user_id => users(:privateuser)
28
+ assert_response :success
29
+ assert assigns(:clippings)
30
+ end
31
+
32
+ def test_should_not_get_private_index
33
+ get :index, :user_id => users(:privateuser)
34
+ assert_response :redirect
35
+ end
36
+
37
+ def test_should_get_site_index
38
+ get :site_index
39
+ assert_response :success
40
+ assert !assigns(:clippings).empty?
41
+ end
42
+
43
+ test "should get site index with recent param" do
44
+ get :site_index, :recent => 'true'
45
+ assert_response :success
46
+ assert_select 'a[href*=/clippings]'
47
+ end
48
+
49
+ test "should get site index without recent param" do
50
+ get :site_index
51
+ assert_response :success
52
+ assert_select 'a[href*=/clippings?recent=true]'
53
+ end
54
+
55
+
56
+ def test_should_get_site_index_rss
57
+ get :site_index, :format => 'rss'
58
+ assert_response :success
59
+ assert !assigns(:clippings).empty?
60
+ end
61
+
62
+
63
+ def test_should_get_new
64
+ login_as :quentin
65
+ get :new, :user_id => users(:quentin)
66
+ assert_response :success
67
+ end
68
+
69
+ def test_should_create_clipping
70
+ login_as :quentin
71
+ assert_difference Clipping, :count, 1 do
72
+ post :create,
73
+ :user_id => users(:quentin),
74
+ :clipping => {:url => 'http://www.google.com', :image_url => 'http://www.google.com/intl/en_ALL/images/logo.gif'},
75
+ :tag_list => 'tag1, tag2'
76
+ assert_redirected_to user_clipping_path(users(:quentin), assigns(:clipping))
77
+
78
+ clipping = Clipping.find(assigns(:clipping).id)
79
+ assert_equal ['tag1', 'tag2'], clipping.tag_list.sort
80
+ end
81
+ end
82
+
83
+ def test_should_create_clipping_from_bookmarklet
84
+ login_as :quentin
85
+ get :new_clipping, :uri => 'http://www.google.com'
86
+ assert_response :success
87
+ assert !assigns(@images).empty?
88
+ end
89
+
90
+
91
+ def test_should_show_clipping
92
+ login_as :quentin
93
+ get :show, :id => 1, :user_id => users(:quentin)
94
+ assert_response :success
95
+ end
96
+
97
+ def test_should_get_edit
98
+ login_as :quentin
99
+ get :edit, :id => 1, :user_id => users(:quentin)
100
+ assert_response :success
101
+ end
102
+
103
+ def test_should_update_clipping
104
+ login_as :quentin
105
+ put :update, :id => 1,
106
+ :clipping => {:url => 'changed url'},
107
+ :user_id => users(:quentin),
108
+ :tag_list => 'tagX, tagY'
109
+ assert_redirected_to user_clipping_path(users(:quentin), assigns(:clipping))
110
+
111
+ clipping = Clipping.find(assigns(:clipping).id)
112
+ assert_equal ['tagX', 'tagY'], clipping.tag_list.sort
113
+ end
114
+
115
+ def test_should_destroy_clipping
116
+ login_as :quentin
117
+ assert_difference Clipping, :count, -1 do
118
+ delete :destroy, :id => 1, :user_id => users(:quentin)
119
+ assert_redirected_to user_clippings_path(users(:quentin))
120
+ end
121
+
122
+ end
123
+ end
@@ -0,0 +1,215 @@
1
+ require 'test_helper'
2
+
3
+ class CommentsControllerTest < ActionController::TestCase
4
+ fixtures :users, :photos, :posts, :comments, :roles
5
+
6
+ def test_should_create_user_comment_with_notification
7
+ login_as :aaron
8
+ assert_difference Comment, :count, 1 do
9
+ assert_difference ActionMailer::Base.deliveries, :length, 1 do
10
+ create_user_comment
11
+ end
12
+ end
13
+ assert_response :redirect
14
+ end
15
+
16
+ def test_should_create_user_comment_and_notify_previous_commenters
17
+ login_as :dwr
18
+ # aaron should get a notification, because he's being commented on
19
+ # quentin should get one too, because he previously commented on the profile
20
+ assert_difference ActionMailer::Base.deliveries, :length, 2 do
21
+ create_user_comment(:user_id => users(:aaron).id)
22
+ end
23
+ end
24
+
25
+ def test_should_create_user_comment_without_notification
26
+ users(:quentin).notify_comments = false
27
+ users(:quentin).save!
28
+ login_as :aaron
29
+ assert_difference Comment, :count, 1 do
30
+ assert_no_difference ActionMailer::Base.deliveries, :length do
31
+ create_user_comment
32
+ end
33
+ end
34
+ assert_response :redirect
35
+ end
36
+
37
+ def test_should_fail_to_create_user_comment
38
+ login_as :aaron
39
+ assert_no_difference Comment, :count do
40
+ create_user_comment(:comment => {:comment => nil})
41
+ end
42
+ assert_response :redirect
43
+ end
44
+
45
+ def test_should_create_photo_comment
46
+ login_as :aaron
47
+ assert_difference Comment, :count, 1 do
48
+ create_photo_comment
49
+ end
50
+ assert_response :redirect
51
+ end
52
+
53
+ def test_should_fail_to_create_photo_comment
54
+ login_as :aaron
55
+ assert_no_difference Comment, :count do
56
+ create_photo_comment(:comment => {:comment => nil})
57
+ end
58
+ assert_response :redirect
59
+ end
60
+
61
+ def test_should_create_post_comment
62
+ login_as :aaron
63
+ assert_difference Comment, :count, 1 do
64
+ create_post_comment
65
+ end
66
+ assert_response :redirect
67
+ end
68
+
69
+ def test_should_destroy_post_comment
70
+ login_as :quentin
71
+ assert_difference Comment, :count, -1 do
72
+ delete :destroy, :commentable_type => 'Post', :commentable_id => comments(:quentins_comment_on_his_own_post).commentable_id, :id => comments(:quentins_comment_on_his_own_post)
73
+ end
74
+ end
75
+
76
+ def test_should_not_destroy_post_comment
77
+ login_as :aaron
78
+ assert_no_difference Comment, :count do
79
+ delete :destroy, :commentable_type => 'Post', :commentable_id => comments(:quentins_comment_on_his_own_post).commentable_id, :id => comments(:quentins_comment_on_his_own_post)
80
+ end
81
+ end
82
+
83
+ def test_should_fail_to_create_post_comment
84
+ login_as :aaron
85
+ assert_no_difference Comment, :count do
86
+ create_post_comment(:comment => {:comment => nil})
87
+ end
88
+ assert_response :redirect
89
+ end
90
+
91
+ def test_should_fail_to_create_comment
92
+ login_as :aaron
93
+ assert_raises(NameError) do
94
+ create_post_comment(:commentable_type => 'unkown_commentable_type')
95
+ end
96
+ end
97
+
98
+ def test_should_show_comments_index
99
+ login_as :quentin
100
+ get :index, :commentable_type => 'users', :commentable_id => users(:aaron).to_param
101
+ assert_response :success
102
+ assert !assigns(:comments).empty?
103
+ end
104
+
105
+ def test_should_show_comments_index_rss
106
+ login_as :quentin
107
+ get :index, :commentable_type => 'users', :commentable_id => users(:aaron).to_param, :format => 'rss'
108
+ assert_response :success
109
+ assert !assigns(:comments).empty?
110
+ end
111
+
112
+ def test_should_show_empty_comments_index
113
+ login_as :aaron
114
+ get :index, :commentable_type => 'users', :commentable_id => users(:quentin).to_param
115
+ assert_response :success
116
+ assert assigns(:comments).empty?
117
+ end
118
+
119
+ def test_should_show_empty_comments_index_rss
120
+ login_as :aaron
121
+ get :index, :commentable_type => 'users', :commentable_id => users(:quentin).to_param, :format => 'rss'
122
+ assert_response :success
123
+ assert assigns(:comments).empty?
124
+ end
125
+
126
+ def test_should_show_private_comments_index_if_logged_in
127
+ login_as :quentin
128
+ get :index, :commentable_type => 'users', :commentable_id => users(:privateuser).to_param
129
+ assert !assigns(:comments).empty?
130
+ assert_response :success
131
+ end
132
+
133
+ def test_should_not_show_private_comments_index
134
+ get :index, :commentable_type => 'users', :commentable_id => users(:privateuser).to_param
135
+ assert_response :redirect
136
+ end
137
+
138
+ def test_should_show_comments_index_rss_if_logged_in
139
+ login_as :quentin
140
+ get :index, :commentable_type => 'users', :commentable_id => users(:aaron).to_param, :format => 'rss'
141
+ assert !assigns(:comments).empty?
142
+ assert_response :success
143
+ end
144
+
145
+ def test_should_unsubscribe_with_token
146
+ configatron.allow_anonymous_commenting = true
147
+ comment = Comment.create!(:comment => 'foo', :author_email => 'bar@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin), :commentable => users(:quentin), :notify_by_email => true)
148
+ configatron.allow_anonymous_commenting = false
149
+
150
+ post :unsubscribe, :comment_id => comment.id, :token => comment.token_for('bar@foo.com'), :email => 'bar@foo.com'
151
+ assert comment.reload.notify_by_email.eql?(false)
152
+ end
153
+
154
+ def test_should_no_unsubscribe_with_bad_token
155
+ configatron.allow_anonymous_commenting = true
156
+ comment = Comment.create!(:comment => 'foo', :author_email => 'bar@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin), :commentable => users(:quentin), :notify_by_email => true)
157
+ configatron.allow_anonymous_commenting = false
158
+
159
+ post :unsubscribe, :commentable_type => 'User', :commentable_id => users(:quentin).to_param, :comment_id => comment.id, :token => 'badtokengoeshere'
160
+ assert comment.reload.notify_by_email.eql?(true)
161
+ end
162
+
163
+ def test_should_get_edit_js_as_admin
164
+ login_as :admin
165
+ get :edit, :id => comments(:quentins_comment_on_his_own_post), :format => 'js'
166
+ assert_response :success
167
+ end
168
+
169
+ def test_should_update_as_admin
170
+ login_as :admin
171
+ edited_text = 'edited the comment body'
172
+ put :update, :id => comments(:quentins_comment_on_his_own_post), :comment => {:comment => edited_text}, :format => 'js'
173
+
174
+ assert assigns(:comment).comment.eql?(edited_text)
175
+ assert_response :success
176
+ end
177
+
178
+ def test_should_not_update_if_not_admin_or_moderator
179
+ login_as :quentin
180
+
181
+ edited_text = 'edited the comment body'
182
+ put :update, :id => comments(:quentins_comment_on_his_own_post), :comment => {:comment => edited_text}, :format => "js"
183
+
184
+ assert_response :success #js redirect
185
+ assert_not_equal(comments(:quentins_comment_on_his_own_post).comment, edited_text)
186
+ end
187
+
188
+
189
+
190
+ protected
191
+
192
+ def create_user_comment(options = {})
193
+ post :create, {:commentable_type => (options[:commentable_type] || "users"),
194
+ :commentable_id => (options[:user_id] || users(:quentin).id),
195
+ :comment => {:title => "test comment to quentin", :comment => "hey man, how are you?"}.merge(options[:comment] || {})
196
+ }
197
+ end
198
+
199
+ def create_photo_comment(options = {})
200
+ post :create, {:commentable_type => (options[:commentable_type] || "photos"),
201
+ :commentable_id => (options[:photo_id] || photos(:library_pic).id),
202
+ :comment => {:title => "test comment on a photo", :comment => "hey man, nice pic?"}.merge(options[:comment] || {})
203
+ }
204
+ end
205
+
206
+ def create_post_comment(options = {})
207
+ post :create, {:commentable_type => (options[:commentable_type] || "posts"),
208
+ :commentable_id => (options[:post_id] || posts(:funny_post).id),
209
+ :comment => {:title => "test comment on a posts", :comment => "hey man, nice posts?"}.merge(options[:comment] || {})
210
+ }
211
+ end
212
+
213
+
214
+
215
+ end
@@ -0,0 +1,104 @@
1
+ require 'test_helper'
2
+
3
+ class EventsControllerTest < ActionController::TestCase
4
+ fixtures :users, :events, :states, :roles
5
+
6
+ def test_should_get_index
7
+ login_as :admin
8
+ get :index
9
+ assert_response :success
10
+ assert assigns(:events)
11
+ end
12
+
13
+ def test_should_get_new
14
+ login_as :admin
15
+ get :new
16
+ assert_response :success
17
+ end
18
+
19
+ def test_should_create_event
20
+ login_as :admin
21
+ assert_difference Event, :count, 1 do
22
+ post :create, :event => {:name => 'New event', :start_time => 1.day.ago, :end_time => Time.now, :description => "A great event" }
23
+ end
24
+ assert_redirected_to event_path(assigns(:event))
25
+ end
26
+
27
+ def test_should_fail_to_create_event
28
+ login_as :admin
29
+ assert_no_difference Event, :count do
30
+ post :create, :event => { }
31
+ end
32
+ assert_response :success
33
+ end
34
+
35
+ def test_should_get_edit
36
+ login_as :admin
37
+ get :edit, :id => 1
38
+ assert_response :success
39
+ end
40
+
41
+ def test_should_update_event
42
+ login_as :admin
43
+ put :update, :id => 1, :event => {:name => 'changed name' }
44
+ assert_redirected_to event_path(assigns(:event))
45
+ end
46
+
47
+ def test_should_fail_to_update_event
48
+ login_as :admin
49
+ put :update, :id => 1, :event => { :name => nil }
50
+ assert assigns(:event).errors[:name]
51
+ assert_response :success
52
+ end
53
+
54
+ def test_should_destroy_event
55
+ @request.env["HTTP_REFERER"] = 'http://test.host/admin/events'
56
+ login_as :admin
57
+ assert_difference Event, :count, -1 do
58
+ delete :destroy, :id => 1
59
+ end
60
+ assert_redirected_to admin_events_path
61
+ end
62
+
63
+ def test_index_should_show_link_to_past_only
64
+ login_as :admin
65
+ get :index
66
+ assert_tag :tag=>'a', :attributes=>{:href=>'/events/past'}, :content=> :past_events.l
67
+ assert_no_tag :tag=>'a', :attributes=>{:href=>'/events'}, :content=> :upcoming_events.l
68
+ end
69
+
70
+ def test_past_should_show_link_to_index_only
71
+ login_as :admin
72
+ get :past
73
+ assert_no_tag :tag=>'a', :attributes=>{:href=>'/events/past'}, :content=> :past_events.l
74
+ assert_tag :tag=>'a', :attributes=>{:href=>'/events'}, :content=> :upcoming_events.l
75
+ end
76
+
77
+ def test_should_get_ical
78
+ get :ical, :format => 'ics'
79
+ assert_response :success
80
+ assert assigns(:calendar)
81
+ end
82
+
83
+ def test_should_show_rsvp
84
+ login_as :admin
85
+ get :show, :id=>2
86
+ assert_tag :tag=>'a', :content=>:rsvp.l
87
+ assert_tag :tag=>'b', :content=>"#{:rsvps.l}:"
88
+ end
89
+
90
+ def test_should_not_show_rsvp
91
+ login_as :admin
92
+ get :show, :id=>6
93
+ assert_no_tag :tag=>'a', :content=>:rsvp.l
94
+ assert_no_tag :tag=>'b', :content=>"#{:rsvps.l}:"
95
+ end
96
+
97
+ def test_should_clone_event
98
+ login_as :admin
99
+ get :clone, :id => events(:cool_event)
100
+
101
+ assert_equal assigns(:event).attributes.slice(:name, :start_time, :end_time, :description), events(:cool_event).attributes.slice(:name, :start_time, :end_time, :description)
102
+ end
103
+
104
+ end
@@ -0,0 +1,53 @@
1
+ require 'test_helper'
2
+
3
+ class FavoritesControllerTest < ActionController::TestCase
4
+ fixtures :clippings, :users, :roles
5
+
6
+ def setup
7
+ Favorite.destroy_all
8
+ end
9
+
10
+ def test_should_create_favorite_as_logged_in_user
11
+ login_as :quentin
12
+ assert_difference Favorite, :count, 1 do
13
+ post :create, :favoritable_type => 'clipping', :favoritable_id => clippings(:google).id, :format => 'js'
14
+ end
15
+ assert_response :success
16
+ end
17
+
18
+ def test_should_create_favorite_anonymously
19
+ assert_difference Favorite, :count, 1 do
20
+ post :create, :favoritable_type => 'clipping', :favoritable_id => clippings(:google).id, :format => 'js'
21
+ end
22
+ assert_response :success
23
+ end
24
+
25
+ def test_should_receive_error_when_double_favoriting_as_logged_in_user
26
+ login_as :quentin
27
+ post :create, :favoritable_type => 'clipping', :favoritable_id => clippings(:google).id, :format => 'js'
28
+ post :create, :favoritable_type => 'clipping', :favoritable_id => clippings(:google).id, :format => 'js'
29
+ assert !assigns(:favorite).errors.empty?
30
+ end
31
+
32
+ def test_should_destroy_favorite
33
+ login_as :quentin
34
+ post :create, :favoritable_type => 'clipping', :favoritable_id => clippings(:google).id, :format => 'js'
35
+
36
+ favorite = users(:quentin).favorites.last
37
+
38
+ assert_difference Favorite, :count, -1 do
39
+ delete :destroy, :favoritable_type => 'clipping', :favoritable_id => clippings(:google).id, :id => favorite.id, :format => 'js'
40
+ assert_response :success
41
+ end
42
+ end
43
+
44
+ def test_should_get_index
45
+ login_as :quentin
46
+ post :create, :favoritable_type => 'clipping', :favoritable_id => clippings(:google).id, :format => 'js'
47
+
48
+ login_as :quentin
49
+ get :index, :user_id => users(:quentin).id
50
+ assert_response :success
51
+ end
52
+
53
+ end
@@ -0,0 +1,95 @@
1
+ require 'test_helper'
2
+
3
+ class ForumsControllerTest < ActionController::TestCase
4
+ all_fixtures
5
+
6
+ def test_should_get_index
7
+ get :index
8
+ assert_response :success
9
+ assert assigns(:forums)
10
+ end
11
+
12
+ def test_should_get_index_with_xml
13
+ content_type 'application/xml'
14
+ get :index, :format => 'xml'
15
+ assert_response :success
16
+ end
17
+
18
+ def test_should_get_new
19
+ login_as :admin
20
+ get :new
21
+ assert_response :success
22
+ end
23
+
24
+ def test_should_require_admin
25
+ login_as :sam
26
+ get :new
27
+ assert_redirected_to login_path
28
+ end
29
+
30
+ def test_should_create_forum
31
+ login_as :admin
32
+ assert_difference Forum, :count, 1 do
33
+ post :create, :forum => { :name => 'yeah' }, :tag_list => 'tag1, tag2'
34
+
35
+ forum = Forum.find_by_name('yeah')
36
+ assert_equal ['tag1', 'tag2'], forum.tag_list
37
+ end
38
+
39
+ assert_redirected_to forums_path
40
+ end
41
+
42
+ def test_should_show_forum
43
+ get :show, :id => 1
44
+ assert_response :success
45
+ assert assigns(:topics)
46
+ # sticky should be first
47
+ assert_equal(topics(:sticky), assigns(:topics).first)
48
+ end
49
+
50
+ def test_should_show_forum_with_xml
51
+ content_type 'application/xml'
52
+ get :show, :id => 1, :format => 'xml'
53
+ assert_response :success
54
+ assert_select 'forum'
55
+ end
56
+
57
+ def test_should_get_edit
58
+ login_as :admin
59
+ get :edit, :id => 1
60
+ assert_response :success
61
+ end
62
+
63
+ def test_should_update_forum
64
+ login_as :admin
65
+ put :update, :id => 1, :forum => { }, :tag_list => 'tagX, tagY'
66
+ assert_redirected_to forums_path
67
+
68
+ assert_equal ['tagX', 'tagY'], Forum.find(1).tag_list
69
+ end
70
+
71
+ # def test_should_update_forum_with_xml
72
+ # authorize_as :aaron
73
+ # content_type 'application/xml'
74
+ # put :update, :id => 1, :forum => { }, :format => 'xml'
75
+ # assert_response :success
76
+ # end
77
+
78
+ def test_should_destroy_forum
79
+ login_as :admin
80
+ old_count = Forum.count
81
+ delete :destroy, :id => 1
82
+ assert_equal old_count-1, Forum.count
83
+
84
+ assert_redirected_to forums_path
85
+ end
86
+
87
+ # def test_should_destroy_forum_with_xml
88
+ # authorize_as :aaron
89
+ # content_type 'application/xml'
90
+ # old_count = Forum.count
91
+ # delete :destroy, :id => 1, :format => 'xml'
92
+ # assert_equal old_count-1, Forum.count
93
+ # assert_response :success
94
+ # end
95
+ end
@@ -0,0 +1,98 @@
1
+ require 'test_helper'
2
+
3
+ class FriendshipsControllerTest < ActionController::TestCase
4
+ include UsersHelper
5
+ fixtures :friendships, :friendship_statuses, :users, :roles
6
+
7
+ test "should get index" do
8
+ get :index
9
+ assert_response :success
10
+ end
11
+
12
+ def test_should_get_accepted_friends_list
13
+ login_as :quentin
14
+ get :accepted, :user_id => users(:quentin).id
15
+ assert_response :success
16
+ assert assigns(:friendships)
17
+ end
18
+
19
+ def test_should_get_pending_friends_list
20
+ login_as :aaron
21
+ get :pending, :user_id => users(:aaron).id
22
+ assert_response :success
23
+ assert !assigns(:friendships).empty?
24
+ end
25
+
26
+ def test_should_create_friendship_with_notification
27
+ login_as :quentin
28
+ assert_difference Friendship, :count, 2 do
29
+ assert_difference ActionMailer::Base.deliveries, :length, 1 do
30
+ post :create, :user_id => users(:quentin).id, :friend_id => users(:kevin).id
31
+ end
32
+ end
33
+ assert_redirected_to accepted_user_friendships_path(users(:quentin))
34
+ end
35
+
36
+ def test_should_create_friendship_without_notification
37
+ users(:kevin).notify_friend_requests = false
38
+ users(:kevin).save!
39
+ login_as :quentin
40
+ assert_difference Friendship, :count, 2 do
41
+ assert_no_difference ActionMailer::Base.deliveries, :length do
42
+ post :create, :user_id => users(:quentin).id, :friend_id => users(:kevin).id
43
+ end
44
+ end
45
+ assert_redirected_to accepted_user_friendships_path(users(:quentin))
46
+ end
47
+
48
+
49
+ def test_should_fail_to_create_friendship
50
+ login_as :quentin
51
+ assert_no_difference Friendship, :count do
52
+ post :create, :user_id => users(:quentin).id, :friend_id => nil
53
+ end
54
+ assert_redirected_to user_friendships_path(users(:quentin))
55
+ end
56
+
57
+ def test_should_show_friendship
58
+ login_as :quentin
59
+ get :show, :id => friendships(:quentin_init_aaron_pending).id, :user_id => users(:quentin)
60
+ assert_response :success
61
+ end
62
+
63
+ def test_should_accept_friendship
64
+ login_as :aaron
65
+ put :accept, :id => friendships(:aaron_receive_quentin_pending).id, :user_id => users(:aaron)
66
+ assert_redirected_to accepted_user_friendships_path(users(:aaron))
67
+ assert_equal friendships(:aaron_receive_quentin_pending).reload.friendship_status_id, friendship_statuses(:accepted).id
68
+ end
69
+
70
+ def test_should_deny_friendship
71
+ login_as :aaron
72
+ put :deny, :id => friendships(:aaron_receive_quentin_pending).id, :user_id => users(:aaron)
73
+ assert_redirected_to denied_user_friendships_path(users(:aaron))
74
+ assert_equal friendships(:aaron_receive_quentin_pending).reload.friendship_status_id, friendship_statuses(:denied).id
75
+ end
76
+
77
+ def test_should_destroy_friendship
78
+ login_as :quentin
79
+ assert_difference Friendship, :count, -2 do
80
+ delete :destroy, :id => 1, :user_id => users(:quentin).id
81
+ assert_redirected_to accepted_user_friendships_path(:user_id => users(:quentin))
82
+ end
83
+ end
84
+
85
+ def test_should_ask_if_friends_and_return_false
86
+ assert_nil friends?(users(:quentin), users(:aaron))
87
+ end
88
+
89
+ def test_should_ask_if_friends_and_return_true
90
+ friendships(:quentin_init_aaron_pending).friendship_status_id = friendship_statuses(:accepted).id
91
+ friendships(:quentin_init_aaron_pending).save!
92
+ friendships(:aaron_receive_quentin_pending).friendship_status_id = friendship_statuses(:accepted).id
93
+ friendships(:aaron_receive_quentin_pending).save!
94
+ assert friends?(users(:quentin), users(:aaron))
95
+ end
96
+
97
+
98
+ end