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,55 @@
1
+ require 'test_helper'
2
+
3
+ class AuthorizationTest < ActiveSupport::TestCase
4
+ fixtures :all
5
+
6
+ test "should find existing from hash" do
7
+ auth = Authorization.create_from_hash(auth_hash)
8
+ assert_equal(auth.email, 'email@example.com')
9
+ existing = Authorization.find_or_create_from_hash(auth_hash.merge('user_info' => {'email' => 'changed@example.com'}))
10
+ assert_equal(auth, existing)
11
+ assert_equal(existing.email, 'changed@example.com')
12
+ end
13
+
14
+ test "should create new Authorization and User from hash" do
15
+ assert_difference User, :count, 1 do
16
+ assert_difference Authorization, :count, 1 do
17
+ Authorization.create_from_hash(auth_hash)
18
+ end
19
+ end
20
+ end
21
+
22
+ test "should create Authorization for existing user with hash" do
23
+ assert_difference users(:quentin).authorizations, :count, 1 do
24
+ assert_difference Authorization, :count, 1 do
25
+ Authorization.create_from_hash(auth_hash, users(:quentin))
26
+ end
27
+ end
28
+ end
29
+
30
+ test "should allow authorization to be destroyed" do
31
+ authorization1 = Authorization.create_from_hash(auth_hash, users(:quentin))
32
+ authorization2 = Authorization.create_from_hash(auth_hash.merge('provider' => 'facebook'), users(:quentin))
33
+
34
+ assert authorization2.destroy
35
+ assert authorization2.errors[:base].empty?, 'Authorization should have not have an error on :base'
36
+ end
37
+
38
+
39
+ test "should not allow authorization to be destroyed if it's the only one left and the user would be invalid without it" do
40
+ authorization = Authorization.create_from_hash(auth_hash, users(:quentin))
41
+ authorization.destroy
42
+ assert !authorization.errors[:base].empty?, 'Authorization should have an error on :base'
43
+ end
44
+
45
+ def auth_hash
46
+ OmniAuth.config.mock_auth[:default].merge({ 'provider' => 'twitter',
47
+ 'uid' => '12345',
48
+ 'user_info' => {
49
+ 'nickname' => 'omniauthuser',
50
+ 'email' => 'email@example.com'
51
+ }
52
+ })
53
+ end
54
+
55
+ end
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+
3
+ class CategoryTest < ActiveSupport::TestCase
4
+ fixtures :categories, :posts
5
+
6
+ def test_get
7
+ assert_equal Category.get(:questions), categories(:questions)
8
+ assert_equal Category.get(:how_to), categories(:how_to)
9
+ assert_equal Category.get(:inspiration), categories(:inspiration)
10
+ assert_equal Category.get(:news), categories(:news)
11
+ assert_equal Category.get(:talk), categories(:talk)
12
+ end
13
+
14
+ def test_should_display_new_post_text
15
+ c = Category.get(:questions)
16
+ c.new_post_text = "Ask a question"
17
+ c.save!
18
+ assert_equal "Ask a question", Category.get(:questions).display_new_post_text
19
+ end
20
+
21
+
22
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+
3
+ class ChoiceTest < ActiveSupport::TestCase
4
+
5
+ def test_should_require_poll
6
+ c = Choice.new
7
+ assert !c.valid?
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+
3
+ class ClippingImageTest < ActiveSupport::TestCase
4
+ fixtures :clippings, :users, :roles
5
+
6
+ def teardown
7
+ Asset.destroy_all
8
+ end
9
+
10
+ def test_should_be_created
11
+ image = ClippingImage.new(:attachable => clippings(:google))
12
+ io = image.data_from_url('http://www.google.com/intl/en_ALL/images/logo.gif')
13
+ image.asset = io
14
+ assert image.save!
15
+ end
16
+
17
+ end
@@ -0,0 +1,52 @@
1
+ require 'test_helper'
2
+
3
+ class ClippingTest < ActiveSupport::TestCase
4
+ fixtures :clippings, :tags, :taggings, :users, :roles
5
+
6
+ def teardown
7
+ Asset.destroy_all
8
+ end
9
+
10
+ def test_should_require_user_id
11
+ clipping = Clipping.new
12
+ assert !clipping.valid?
13
+ assert clipping.errors[:user]
14
+ end
15
+
16
+ def test_should_find_related_clippings
17
+ google_clip = clippings(:google)
18
+ related = Clipping.find_related_to(google_clip)
19
+ assert_equal [ clippings(:yahoo_related_to_google) ], related
20
+ end
21
+
22
+ def test_should_find_recent
23
+ clippings = Clipping.find_recent(:limit => 1)
24
+ assert_equal clippings.size, 1
25
+ end
26
+
27
+ def test_should_find_previous_clipping
28
+ previous = clippings(:google).previous_clipping
29
+ assert_equal previous, clippings(:yahoo_related_to_google)
30
+ end
31
+
32
+ def test_should_find_next_clipping
33
+ next_clipping = clippings(:yahoo_related_to_google).next_clipping
34
+ assert_equal next_clipping, clippings(:google)
35
+ end
36
+
37
+ def test_should_get_clipping_image
38
+ assert_difference Asset, :count, 1 do
39
+ c = Clipping.create(:user => users(:quentin), :url => 'http://example.com', :image_url => 'http://www.google.com/intl/en_ALL/images/logo.gif')
40
+ c.save!
41
+ end
42
+ end
43
+
44
+ def test_should_require_valid_image_url
45
+ assert_no_difference Clipping, :count do
46
+ assert_difference Asset, :count, 0 do
47
+ c = Clipping.create(:user => users(:quentin), :url => 'http://example.com', :image_url => 'hijack!')
48
+ end
49
+ end
50
+ end
51
+
52
+ end
@@ -0,0 +1,107 @@
1
+ require 'test_helper'
2
+
3
+ class CommentTest < ActiveSupport::TestCase
4
+ fixtures :all
5
+
6
+ def test_should_find_comments_by_user
7
+ comments = Comment.find_comments_by_user(users(:quentin))
8
+ assert !comments.empty?
9
+ end
10
+
11
+ def test_comment_can_be_deleted_by
12
+ comment = comments(:aarons_comment_on_quentins_post)
13
+ assert comment.can_be_deleted_by(users(:aaron))
14
+ assert comment.can_be_deleted_by(users(:quentin))
15
+ assert !comment.can_be_deleted_by(users(:florian))
16
+ end
17
+
18
+ def test_should_be_created_anonymously
19
+ configatron.allow_anonymous_commenting = true
20
+ assert_difference Comment, :count, 1 do
21
+ comment = users(:quentin).comments.create!(
22
+ :comment => 'foo',
23
+ :author_email => 'bar@foo.com',
24
+ :author_ip => '123.123.123',
25
+ :recipient => users(:quentin)
26
+ )
27
+ end
28
+ configatron.allow_anonymous_commenting = false
29
+ end
30
+
31
+ def test_should_notify_previous_anonymous_commenter
32
+ configatron.allow_anonymous_commenting = true
33
+ users(:quentin).comments.create!(:comment => 'foo', :author_email => 'bruno@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin))
34
+ users(:quentin).comments.create!(:comment => 'bar', :author_email => 'bruno@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin))
35
+
36
+ comment = users(:quentin).comments.create!(:comment => 'bar', :author_email => 'alicia@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin))
37
+
38
+ assert_difference ActionMailer::Base.deliveries, :length, 1 do
39
+ comment.notify_previous_anonymous_commenters
40
+ end
41
+ configatron.allow_anonymous_commenting = false
42
+ end
43
+
44
+ def test_should_not_notify_previous_anonymous_commenter_if_self
45
+ configatron.allow_anonymous_commenting = true
46
+ users(:quentin).comments.create!(:comment => 'foo', :author_email => 'bruno@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin))
47
+ users(:quentin).comments.create!(:comment => 'bar', :author_email => 'bruno@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin))
48
+
49
+ comment = users(:quentin).comments.create!(:comment => 'bar', :author_email => 'bruno@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin))
50
+
51
+ assert_difference ActionMailer::Base.deliveries, :length, 0 do
52
+ comment.notify_previous_anonymous_commenters
53
+ end
54
+ configatron.allow_anonymous_commenting = nil
55
+ end
56
+
57
+ def test_should_not_notify_previous_anonymous_commenter_if_notify_by_email_is_false
58
+ configatron.allow_anonymous_commenting = true
59
+ users(:quentin).comments.create!(:comment => 'foo', :author_email => 'bruno@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin), :notify_by_email => false)
60
+
61
+ comment = users(:quentin).comments.create!(:comment => 'bar', :author_email => 'alicia@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin))
62
+
63
+ assert_difference ActionMailer::Base.deliveries, :length, 0 do
64
+ comment.notify_previous_anonymous_commenters
65
+ end
66
+ configatron.allow_anonymous_commenting = false
67
+ end
68
+
69
+ def test_should_not_be_created_anonymously
70
+ assert_no_difference Comment, :count do
71
+ comment = users(:quentin).comments.create(:comment => 'foo', :author_email => 'bar@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin))
72
+ end
73
+ end
74
+
75
+ def test_should_be_created_without_recipient
76
+ assert_difference Comment, :count, 1 do
77
+ comment = users(:aaron).comments.create!(:comment => 'foo', :user => users(:quentin))
78
+ end
79
+ end
80
+
81
+ def test_should_unsubscribe_notifications
82
+ configatron.allow_anonymous_commenting = true
83
+ first_comment = users(:quentin).comments.create!(:comment => 'foo', :author_email => 'alicia@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin), :notify_by_email => true)
84
+ comment = users(:quentin).comments.create!(:comment => 'bar', :author_email => 'alicia@foo.com', :author_ip => '123.123.123', :recipient => users(:quentin), :notify_by_email => true)
85
+ assert_equal first_comment.notify_by_email, true
86
+ assert_equal comment.notify_by_email, true
87
+ configatron.allow_anonymous_commenting = false
88
+
89
+ comment.unsubscribe_notifications('alicia@foo.com')
90
+ assert comment.reload.notify_by_email.eql?(false)
91
+ assert first_comment.reload.notify_by_email.eql?(false)
92
+ end
93
+
94
+ def test_should_not_notify_of_comments_on_post_with_send_notifications_off
95
+ post = posts(:funny_post)
96
+ post.send_comment_notifications = false
97
+ post.save!
98
+
99
+ comment = post.comments.create!(:comment => 'foo', :user => users(:aaron), :recipient => users(:quentin))
100
+ assert_difference ActionMailer::Base.deliveries, :length, 0 do
101
+ comment.send_notifications
102
+ end
103
+ end
104
+
105
+
106
+ end
107
+
@@ -0,0 +1,15 @@
1
+ require 'test_helper'
2
+
3
+ class CountryTest < ActiveSupport::TestCase
4
+ fixtures :countries, :metro_areas
5
+
6
+ def test_should_find_united_states
7
+ country = Country.get(:us)
8
+ assert !country.nil?
9
+ end
10
+
11
+ def test_should_find_countries_with_metro_areas
12
+ c = Country.find_countries_with_metros
13
+ assert_equal c.size, 3
14
+ end
15
+ end
@@ -0,0 +1,75 @@
1
+ require 'test_helper'
2
+
3
+ class EventTest < ActiveSupport::TestCase
4
+
5
+ fixtures :events
6
+
7
+ def test_should_be_invalid_without_name
8
+ assert_no_difference Event, :count do
9
+ u = Event.new(valid_event_attributes.except(:name))
10
+ u.save
11
+ assert u.errors[:name]
12
+ end
13
+ end
14
+
15
+ def test_should_be_invalid_without_date
16
+ assert_no_difference Event, :count do
17
+ u = Event.new(valid_event_attributes.except(:start_time))
18
+ u.save
19
+ assert u.errors[:start_time]
20
+ end
21
+ end
22
+
23
+ def test_should_be_invalid_without_name
24
+ assert_no_difference Event, :count do
25
+ u = Event.new(valid_event_attributes.except(:user))
26
+ u.save
27
+ assert u.errors[:user]
28
+ end
29
+ end
30
+
31
+ def test_should_be_invalid_if_start_time_is_after_end_time
32
+ assert_no_difference Event, :count do
33
+ u = Event.new(valid_event_attributes.merge(:start_time => Time.now, :end_time => 1.week.ago))
34
+ u.save
35
+ assert u.errors[:start_time]
36
+ end
37
+ end
38
+
39
+ def test_upcoming_event_scope_should_only_find_future_events
40
+ future_events = Event.upcoming.all
41
+ assert_equal future_events.size, 3
42
+ future_events.each {|e| assert e.end_time > Time.now}
43
+ end
44
+
45
+ def test_past_event_scope_should_only_find_old_events
46
+ past_events = Event.past.all
47
+ assert_equal past_events.size, 3
48
+ past_events.each {|e| assert e.end_time <= Time.now}
49
+ end
50
+
51
+ def test_upcoming_events_shown_asc_order
52
+ future_events = Event.upcoming.find(:all)
53
+ assert_equal future_events.first, events(:future_event)
54
+ assert_equal future_events.second, events(:further_future_event)
55
+ end
56
+
57
+ def test_past_events_shown_desc_order
58
+ future_events = Event.past.find(:all)
59
+ assert_equal future_events.first, events(:past_event)
60
+ assert_equal future_events.second, events(:cool_event)
61
+ assert_equal future_events.third, events(:further_past_event)
62
+ end
63
+
64
+ protected
65
+ def valid_event_attributes
66
+ {:name => 'A great event',
67
+ :user => User.new,
68
+ :start_time => 1.week.ago,
69
+ :end_time => 4.days.ago,
70
+ :description => 'This will be fun',
71
+ :metro_area => MetroArea.new
72
+ }
73
+ end
74
+
75
+ end
@@ -0,0 +1,71 @@
1
+ require 'test_helper'
2
+
3
+ class FavoriteTest < ActiveSupport::TestCase
4
+ fixtures :clippings, :users, :roles
5
+
6
+ def setup
7
+ Favorite.destroy_all
8
+ end
9
+
10
+ def test_should_be_created
11
+ f = Favorite.new(:favoritable => clippings(:google), :ip_address => '127.0.0.1')
12
+ assert f.save!
13
+ end
14
+
15
+ def test_should_be_invalid_without_favoritable
16
+ f = Favorite.new(:ip_address => '127.0.0.1')
17
+ assert !f.valid?
18
+ assert f.errors[:favoritable]
19
+ end
20
+
21
+ def test_should_update_counter_on_clipping
22
+ f = Favorite.new(:favoritable => clippings(:google), :ip_address => '127.0.0.1')
23
+ f2 = Favorite.new(:favoritable => clippings(:google), :ip_address => '127.0.0.2')
24
+ assert_difference clippings(:google), :favorited_count, 2 do
25
+ f.save!
26
+ f2.save!
27
+ end
28
+ end
29
+
30
+ def test_should_decrease_counter_when_destroyed
31
+ f = Favorite.new(:favoritable => clippings(:google), :ip_address => '127.0.0.1')
32
+ f.save!
33
+
34
+ assert_difference clippings(:google), :favorited_count, -1 do
35
+ f.destroy
36
+ end
37
+ end
38
+
39
+ def test_same_user_should_not_favorite_twice
40
+ Favorite.create!(:favoritable => clippings(:google), :ip_address => '127.0.0.1', :user => users(:quentin))
41
+
42
+ assert_raise ActiveRecord::RecordInvalid do
43
+ Favorite.create!(:favoritable => clippings(:google), :ip_address => '127.0.0.1', :user => users(:quentin))
44
+ end
45
+
46
+ end
47
+
48
+ def test_same_ip_address_should_not_favorite_twice
49
+ Favorite.create!(:favoritable => clippings(:google), :ip_address => '127.0.0.1')
50
+
51
+ assert_raise ActiveRecord::RecordInvalid do
52
+ Favorite.create!(:favoritable => clippings(:google), :ip_address => '127.0.0.1')
53
+ end
54
+ end
55
+
56
+ def test_should_find_by_remote_ip
57
+ Favorite.create!(:favoritable => clippings(:google), :ip_address => '127.0.0.1')
58
+ assert Favorite.find_by_user_or_ip_address(clippings(:google), nil, '127.0.0.1')
59
+ end
60
+
61
+ def test_should_find_by_user_or_ip
62
+ Favorite.create!(:favoritable => clippings(:google), :ip_address => '127.0.0.1', :user => users(:quentin))
63
+ assert Favorite.find_by_user_or_ip_address(clippings(:google), users(:quentin))
64
+ end
65
+
66
+ def test_should_find_favorites_by_user
67
+ favorite = Favorite.create!(:favoritable => clippings(:google), :ip_address => '127.0.0.1', :user => users(:quentin))
68
+ assert Favorite.find_favorites_by_user(users(:quentin)).include?(favorite)
69
+ end
70
+
71
+ end
@@ -0,0 +1,23 @@
1
+ require 'test_helper'
2
+
3
+ class ForumTest < ActiveSupport::TestCase
4
+ fixtures :all
5
+
6
+ def test_should_list_only_top_level_topics
7
+ assert_equal [topics(:sticky), topics(:il8n), topics(:ponies), topics(:pdi)], forums(:rails).topics.order('sticky DESC, created_at DESC').all
8
+ end
9
+
10
+ def test_should_find_first_recent_post
11
+ assert_equal topics(:il8n), forums(:rails).topics.recently_replied.first
12
+ end
13
+
14
+ def test_should_format_body_html
15
+ forum = Forum.new(:description => 'foo')
16
+ forum.send :format_content
17
+ assert_not_nil forum.description_html
18
+
19
+ forum.description = ''
20
+ forum.send :format_content
21
+ assert forum.description_html.blank?
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ require 'test_helper'
2
+
3
+ class FriendshipStatusTest < ActiveSupport::TestCase
4
+ fixtures :friendship_statuses
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,38 @@
1
+ require 'test_helper'
2
+
3
+ class FriendshipTest < ActiveSupport::TestCase
4
+ fixtures :friendships, :users, :roles, :friendship_statuses
5
+
6
+ def test_user_and_friend_can_not_be_same
7
+ fr = Friendship.new(:user_id => 1, :friend_id => 1)
8
+ assert(!fr.valid?, "Friendship should not be valid")
9
+ assert fr.errors[:user_id]
10
+ end
11
+
12
+ def test_should_prevent_overzealous_frienders
13
+ Friendship.daily_request_limit = 2
14
+
15
+ assert Friendship.create!(:user_id => 1, :friend_id => 3, :friendship_status => FriendshipStatus[:pending], :initiator => true)
16
+ assert Friendship.create!(:user_id => 1, :friend_id => 4, :friendship_status => FriendshipStatus[:pending], :initiator => true)
17
+
18
+ f3 = Friendship.create(:user_id => 1, :friend_id => 5, :friendship_status => FriendshipStatus[:pending], :initiator => true)
19
+ assert(!f3.valid?, "Friendship should not be valid")
20
+ assert_equal f3.errors[:base], ["Sorry, you'll have to wait a little while before requesting any more friendships."]
21
+ end
22
+
23
+ def test_should_notify_requester_when_accepted
24
+ f = friendships(:aaron_receive_quentin_pending)
25
+ assert_difference ActionMailer::Base.deliveries, :length, 1 do
26
+ f.update_attributes(:friendship_status => FriendshipStatus[:accepted]) && f.reverse.update_attributes(:friendship_status => FriendshipStatus[:accepted])
27
+ end
28
+ end
29
+
30
+ def test_should_not_notify_requester_when_pending
31
+ f = friendships(:aaron_receive_quentin_pending)
32
+ assert_difference ActionMailer::Base.deliveries, :length, 0 do
33
+ f.update_attributes(:friendship_status => FriendshipStatus[:pending]) && f.reverse.update_attributes(:friendship_status => FriendshipStatus[:pending])
34
+ end
35
+ end
36
+
37
+
38
+ end
@@ -0,0 +1,10 @@
1
+ require 'test_helper'
2
+
3
+ class HomepageFeatureTest < ActiveSupport::TestCase
4
+ fixtures :homepage_features
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ class InvitationTest < ActiveSupport::TestCase
4
+ fixtures :invitations, :users, :roles
5
+
6
+ def test_email_addresses_validation
7
+ addresses = "valid@example.com, valid_2@example.com, invalid.invalid.com"
8
+ invitation = Invitation.new(:email_addresses => addresses)
9
+ assert !invitation.valid?
10
+ assert invitation.errors[:email_addresses]
11
+ end
12
+
13
+ def test_send_with_names_in_emails
14
+ addresses = '"Valid Example" <valid@example.com>, valid_2@example.com'
15
+ invitation = Invitation.new(:email_addresses => addresses, :user => users(:quentin))
16
+ assert invitation.valid?
17
+ assert invitation.send_invite
18
+ end
19
+
20
+ def test_send_invite
21
+ addresses = "valid@example.com, valid_2@example.com"
22
+ invitation = Invitation.new(:email_addresses => addresses, :user => users(:quentin))
23
+ assert invitation.valid?
24
+ assert invitation.send_invite
25
+ end
26
+
27
+ end
@@ -0,0 +1,49 @@
1
+ require 'test_helper'
2
+
3
+ class MessageTest < ActiveSupport::TestCase
4
+ fixtures :all
5
+
6
+ test "should be created" do
7
+ message = Message.create!(:sender => users(:quentin), :recipient => users(:aaron), :body => 'hey aaron', :subject => 'Hello friend!')
8
+ end
9
+
10
+ def test_should_send_notification
11
+ assert_difference ActionMailer::Base.deliveries, :length, 1 do
12
+ message = Message.create!(:sender => users(:quentin), :recipient => users(:aaron), :body => 'hey aaron', :subject => 'Hello friend!')
13
+ end
14
+ end
15
+
16
+ def test_should_be_invalid_without_subject
17
+ m = Message.new(:subject => nil)
18
+ assert !m.valid?
19
+ assert m.errors[:subject]
20
+ end
21
+
22
+ def test_should_be_invalid_without_body
23
+ m = Message.new(:body => nil)
24
+ assert !m.valid?
25
+ assert m.errors[:body]
26
+ end
27
+
28
+ def test_should_be_invalid_without_recipient
29
+ m = Message.new(:recipient => nil)
30
+ assert !m.valid?
31
+ assert m.errors[:recipient]
32
+ end
33
+
34
+ def test_should_not_allow_message_to_self
35
+ m = Message.new(:sender => users(:quentin), :recipient => users(:quentin))
36
+ assert !m.valid?
37
+ assert m.errors[:base]
38
+ end
39
+
40
+ def test_should_be_deleted_with_user
41
+ message = Message.create!(:sender => users(:quentin), :recipient => users(:aaron), :body => 'hey aaron', :subject => 'Hello friend!')
42
+
43
+ assert_difference Message, :count, -1 do
44
+ users(:quentin).destroy
45
+ end
46
+ end
47
+
48
+
49
+ end
@@ -0,0 +1,80 @@
1
+ require 'test_helper'
2
+
3
+ class MessageThreadTest < ActiveSupport::TestCase
4
+ fixtures :all
5
+
6
+ test "subject should equal parent message subject" do
7
+ message_thread = MessageThread.new(:parent_message => messages(:message_from_kevin_to_aaron))
8
+ assert_equal(message_thread.subject, messages(:message_from_kevin_to_aaron).subject)
9
+ end
10
+
11
+ test "creator_name should be parent message's sender login " do
12
+ message_thread = MessageThread.new(:parent_message => messages(:message_from_kevin_to_aaron), :recipient => users(:aaron), :sender => users(:kevin))
13
+ assert_equal(message_thread.creator_name, users(:kevin).login )
14
+ end
15
+
16
+ test "creator_name should be 'Me' when sender parent message sender is recipient " do
17
+ message_thread = MessageThread.new(:parent_message => messages(:message_from_kevin_to_aaron), :recipient => users(:kevin), :sender => users(:aaron))
18
+ assert_equal(message_thread.creator_name, 'Me' )
19
+ end
20
+
21
+ test "should find MessageThread for a particular message and user" do
22
+ messages(:message_from_kevin_to_aaron).update_message_threads
23
+ aarons_thread = messages(:message_from_kevin_to_aaron).message_threads.first
24
+
25
+ message_thread = MessageThread.for(messages(:message_from_kevin_to_aaron), users(:aaron))
26
+ assert_equal message_thread, aarons_thread
27
+ end
28
+
29
+ test "should mark recipient's messages as deleted when destroyed" do
30
+ messages(:message_from_kevin_to_aaron).update_message_threads
31
+ aarons_thread = messages(:message_from_kevin_to_aaron).message_threads.first
32
+
33
+ aarons_thread.destroy
34
+ assert aarons_thread.parent_message.recipient_deleted
35
+ assert !aarons_thread.parent_message.sender_deleted
36
+ end
37
+
38
+ test "should mark sender's messages as deleted when destroyed" do
39
+ message = messages(:message_from_kevin_to_aaron)
40
+ message.update_message_threads
41
+ message_thread = MessageThread.for(message, users(:aaron))
42
+
43
+ # create a reply from aaron to kevin's message
44
+ reply = Message.new_reply(users(:aaron), message_thread, {:message => { :body => 'Hey kevin, just replying to your message'}})
45
+ reply.recipient = users(:kevin)
46
+ reply.save!
47
+
48
+ kevins_thread = MessageThread.for(reply, users(:kevin))
49
+ kevins_thread.destroy
50
+
51
+ #Parent message was sent by kevin, should be deleted by kevin and not by aaron
52
+ assert kevins_thread.parent_message.sender_deleted, 'The parent message should be marked as deleted for by sender'
53
+ assert !kevins_thread.parent_message.recipient_deleted, 'The parent message should not be marked as deleted by the recipient'
54
+
55
+ #Child message was sent by aaron, should be deleted by kevin and not by aaron. Whew.
56
+ assert kevins_thread.parent_message.children.first.recipient_deleted, 'The child message should be deleted by the recipient'
57
+ assert !kevins_thread.parent_message.children.first.sender_deleted, 'The child message should not be marked as deleted by the sender'
58
+ end
59
+
60
+ test "read? should always be 'read' for the sender" do
61
+ message = messages(:message_from_kevin_to_aaron)
62
+ message.update_message_threads
63
+
64
+ aarons_thread = MessageThread.for(message, users(:aaron))
65
+ assert_equal aarons_thread.read?, false
66
+
67
+ # create a reply from aaron to kevin's message
68
+ reply = Message.new_reply(users(:aaron), aarons_thread, {:message => { :body => 'Hey kevin, just replying to your message'}})
69
+ reply.recipient = users(:kevin)
70
+ reply.save!
71
+
72
+ aarons_thread = MessageThread.for(reply, users(:aaron))
73
+
74
+ assert_equal aarons_thread.read?, 'read'
75
+
76
+
77
+ end
78
+
79
+
80
+ end