proclaim 0.1.0
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.
- checksums.yaml +7 -0
- data/CHANGELOG +6 -0
- data/Gemfile +14 -0
- data/LICENSE +674 -0
- data/README.md +137 -0
- data/Rakefile +65 -0
- data/VERSION +1 -0
- data/app/assets/images/ajax_loader.gif +0 -0
- data/app/assets/javascripts/proclaim.js +18 -0
- data/app/assets/javascripts/proclaim/comments_handler.js.coffee +192 -0
- data/app/assets/javascripts/proclaim/editor.js.coffee +50 -0
- data/app/assets/javascripts/proclaim/images.js.coffee +3 -0
- data/app/assets/javascripts/proclaim/subscriptions.js.coffee +3 -0
- data/app/assets/stylesheets/proclaim.css.scss +28 -0
- data/app/assets/stylesheets/proclaim/comments.css.scss +14 -0
- data/app/assets/stylesheets/proclaim/images.scss +3 -0
- data/app/assets/stylesheets/proclaim/posts.css.scss +77 -0
- data/app/assets/stylesheets/proclaim/subscriptions.css.scss +3 -0
- data/app/controllers/proclaim/application_controller.rb +44 -0
- data/app/controllers/proclaim/comments_controller.rb +128 -0
- data/app/controllers/proclaim/images_controller.rb +108 -0
- data/app/controllers/proclaim/posts_controller.rb +131 -0
- data/app/controllers/proclaim/subscriptions_controller.rb +67 -0
- data/app/helpers/proclaim/application_helper.rb +34 -0
- data/app/helpers/proclaim/comments_helper.rb +4 -0
- data/app/helpers/proclaim/images_helper.rb +4 -0
- data/app/helpers/proclaim/posts_helper.rb +4 -0
- data/app/helpers/proclaim/subscriptions_helper.rb +4 -0
- data/app/mailers/proclaim/subscription_mailer.rb +43 -0
- data/app/models/proclaim/comment.rb +35 -0
- data/app/models/proclaim/image.rb +19 -0
- data/app/models/proclaim/post.rb +133 -0
- data/app/models/proclaim/subscription.rb +63 -0
- data/app/policies/application_policy.rb +53 -0
- data/app/policies/proclaim/comment_policy.rb +27 -0
- data/app/policies/proclaim/image_policy.rb +29 -0
- data/app/policies/proclaim/post_policy.rb +38 -0
- data/app/policies/proclaim/subscription_policy.rb +32 -0
- data/app/uploaders/proclaim/image_uploader.rb +82 -0
- data/app/views/layouts/proclaim/subscription_mailer.html.erb +133 -0
- data/app/views/proclaim/comments/_comment.html.erb +33 -0
- data/app/views/proclaim/comments/_form.html.erb +51 -0
- data/app/views/proclaim/posts/_form.html.erb +67 -0
- data/app/views/proclaim/posts/edit.html.erb +3 -0
- data/app/views/proclaim/posts/index.html.erb +30 -0
- data/app/views/proclaim/posts/new.html.erb +3 -0
- data/app/views/proclaim/posts/show.html.erb +46 -0
- data/app/views/proclaim/subscription_mailer/new_comment_notification_email.html.erb +11 -0
- data/app/views/proclaim/subscription_mailer/new_post_notification_email.html.erb +15 -0
- data/app/views/proclaim/subscription_mailer/welcome_email.html.erb +25 -0
- data/app/views/proclaim/subscriptions/_form.html.erb +32 -0
- data/app/views/proclaim/subscriptions/new.html.erb +8 -0
- data/app/views/proclaim/subscriptions/subscribed.html.erb +7 -0
- data/app/views/proclaim/subscriptions/unsubscribe.html.erb +7 -0
- data/app/views/proclaim/subscriptions/unsubscribed.html.erb +3 -0
- data/config/routes.rb +18 -0
- data/db/migrate/20141108222616_create_proclaim_posts.rb +15 -0
- data/db/migrate/20141114235359_create_proclaim_comments.rb +15 -0
- data/db/migrate/20141115022230_create_proclaim_comment_hierarchies.rb +26 -0
- data/db/migrate/20141210234057_create_proclaim_subscriptions.rb +17 -0
- data/db/migrate/20141222224905_create_proclaim_images.rb +12 -0
- data/lib/generators/proclaim/install_generator.rb +23 -0
- data/lib/generators/proclaim/templates/README +27 -0
- data/lib/generators/proclaim/templates/initialize_proclaim.rb +22 -0
- data/lib/generators/proclaim/views_generator.rb +24 -0
- data/lib/proclaim.rb +22 -0
- data/lib/proclaim/engine.rb +39 -0
- data/lib/proclaim/version.rb +3 -0
- data/lib/tasks/proclaim_tasks.rake +4 -0
- data/proclaim.gemspec +46 -0
- data/test/controllers/proclaim/comments_controller_test.rb +228 -0
- data/test/controllers/proclaim/images_controller_test.rb +123 -0
- data/test/controllers/proclaim/posts_controller_test.rb +303 -0
- data/test/controllers/proclaim/subscriptions_controller_test.rb +93 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +14 -0
- data/test/dummy/app/assets/stylesheets/application.css +16 -0
- data/test/dummy/app/controllers/application_controller.rb +15 -0
- data/test/dummy/app/helpers/application_helper.rb +28 -0
- data/test/dummy/app/models/user.rb +7 -0
- data/test/dummy/app/views/layouts/application.html.erb +16 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +24 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +45 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +49 -0
- data/test/dummy/config/initializers/assets.rb +8 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +5 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/db/migrate/20141117214323_create_users.rb +10 -0
- data/test/dummy/db/schema.rb +75 -0
- data/test/dummy/log/development.log +131 -0
- data/test/dummy/log/test.log +25961 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/0b69f7cc441d56def3a51688e6a7a8474dc476d1/proclaim.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/12a97df611d5fb0e395afda829edf8b9372acde7/comments.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/12a97df611d5fb0e395afda829edf8b9372acde7/images.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/12a97df611d5fb0e395afda829edf8b9372acde7/posts.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/12a97df611d5fb0e395afda829edf8b9372acde7/subscriptions.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/04adcece63bc645379e6de797e7998f8 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/06620fc450f0a9b4a482a7bc08387711 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/076dd0d567a92c34163b3b98af1d48ba +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/09fc2eadf6d6062b2cc135a44e4e73db +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/09fe8c62e8ae706e01058b4b4d056c8e +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/142fd040033525acb73ad2ccf1406aea +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1762aeeaf38da3b8d989a5b66b088004 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/194ac1a695334e303516614579b3926d +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/197ea008934db3e7ea8045302d206b92 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/19eba2635fec0895379c3e38f81ada84 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1c2ebe72fcd7ff1379a561552ca30f85 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1f42c80faacb651f670ec2b0998e49dc +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2243230e778a749ecbf0415a52e75be0 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/23ad87e715c70312aa61dde4fbb4bfe1 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/245b8735db4ea90bcaa91c011a1f447e +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/26a42dac0cec64483f4126d2de4b0c9e +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/30151c8f6d93717f06fa12774612ddf4 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3c623d200214a5334aaf170537db087f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3ec36650a50759fd4b75794cb253936f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/40431cdcc10c75ba1f275ecfe42623d3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/4226218a4b06608115b21063353370ea +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/437901953eb8707af6c27ca59cf65d91 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/461885b8ad31ef6a94c9a4f2e332b7eb +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/4792f46317cda92ccd5b278ec61f9ac5 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/4dcb3434b91b1c62f897a1741c6d398b +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/5101cda93cf70f0fc0837713be587780 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/52d8c61de0703e0d7cf97d0f7b0cca7a +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/57f3d19a9bd484ac68c46f962a8684b2 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/587e7c1332c8d8b69746dd85164e2cef +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/5934d5d0d1ac6657842708e85c73cf51 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/5af081799d7da2f04ead6a516c6015ad +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/69ee5af8d9a655898a67bc538ca1c7e7 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/6d1c56259648b0383bc438c875a448c3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/6e7de35055967df848aa490830043e51 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/70bc59560ee544af7bb2f727247db307 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/728cb566999910549092ff0a98e2853b +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/72b5f0d35e9d69b744a156edad98f983 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/72ffa34d552e3fd02f28a6f845a5ac5b +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/7369d324e84bc872c42b3e717ff4ad6c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/749a8b0e45b11df748a256dd04ceb1f7 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/77fb9f62552d9b786f9407ef11cc9a09 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/797823842565e01fc989ad8df0bd4254 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/7c139afa2296ac17483520109aecd449 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/7fb99e2b35af65c4f58bfb92dd4185b4 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/819de31c63b704f9ddf4865587a91d41 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/8604b464bf846e5223da37ef2f29b524 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/88fc815613b473e98e9307b1d423918d +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/8bc4341aa4060b8646e8134722cf3b11 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/8cf8fd5ff8eae12211a88f971af30236 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/8da3b4a9f17aafff49eb263bdb758f44 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/9168e513bae02f041dbb806d6dbe94ac +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/920c1322be1212a54b7c4f2751d5e7bf +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/92205679a36afd387a2ba5c585a5a62c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/940566ebcae2d4e5c56a881ab66f2cf0 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/976967e07e2944a7ecc7403667f1f96b +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/99bdde70cefa71745279232be575f14e +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/9a8e402a7e32063e46647403b43553a5 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/9b09ad72f8cc33503878b01c713d92d0 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a20dbdfebf37fe50e832a6273c972553 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a3c6189fad6cb9ae955f6d5a43a61d51 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/abb54e11ff057a3e22a5a97d27cc4fa3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/ad18e3875541d4298b1df133d494b93f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/b9b7c575c22943d49734d52381c5ee16 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/ba269a52f100d3d6cffda81e82e1ed49 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/bc7a0846b4881b0832d41de2b1724dba +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/bcb2df87f9611d3cc3ef8a5575e54fb8 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/bcf33791d3286af3ba2cdf6a6756c89e +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/be32d0a530ce861537d6abfa41333df9 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/c8270a6f07dccc5f00e6b2b43f10efd2 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/cd82cd410a50bffcfb6e21e3c49a85c9 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/ce4ccaa06bdee6426486224bc7e54187 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d0bdb8592e4eed80aa2341e37f20dbc9 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d4b784b16fa1b1dfcca6590689a8c157 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d968bd38a69bbf5c0065e2df3d30cfd3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/daa4d4b8a5ce46d6c4ecf031e0c61cfe +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/dc2effd195334219a7e4acfdc7ec7974 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/de36ab6c3b1a9b62a586d98373dd569c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/e3aec457d5c753090d6521f2bb2d91b6 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/e8d6158b1fed2f574242b55856a3953d +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/ea82f6aececcf81eef3e2e15a9225e66 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/ed9f5c17f71ec75de10b1bb029ebd7a2 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f2984adaeaa5322e3a040705c6d40622 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f62fd0cf9f5e7e077ec9c4daeccb06ae +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f78ea69bdbba5738c052e9eb04e6c208 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f864e553f706456dbdf168319970ec2e +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/fb0f641bfcbb0101c040da9ff736447b +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/fe426a44cf23cf82032091cbffff898c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/ff732ea47a86c449582b2a81ef2930da +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/ffc4980851addaacf12abeebfa63e07f +0 -0
- data/test/dummy/tmp/generators/config/initializers/proclaim.rb +22 -0
- data/test/factories/proclaim/comment.rb +11 -0
- data/test/factories/proclaim/image.rb +6 -0
- data/test/factories/proclaim/post.rb +14 -0
- data/test/factories/proclaim/subscription.rb +13 -0
- data/test/factories/user.rb +6 -0
- data/test/helpers/proclaim/comments_helper_test.rb +6 -0
- data/test/helpers/proclaim/posts_helper_test.rb +6 -0
- data/test/helpers/proclaim/subscriptions_helper_test.rb +6 -0
- data/test/integration/with_javascript/comment_test.rb +353 -0
- data/test/integration/with_javascript/post_form_test.rb +179 -0
- data/test/integration/with_javascript/post_subscription_test.rb +273 -0
- data/test/integration/without_javascript/blog_subscription_test.rb +87 -0
- data/test/integration/without_javascript/post_test.rb +140 -0
- data/test/integration/without_javascript/subscription_email_test.rb +95 -0
- data/test/integration/without_javascript/unsubscribe_test.rb +32 -0
- data/test/mailers/previews/proclaim/subscription_mailer_preview.rb +22 -0
- data/test/mailers/proclaim/subscription_mailer_test.rb +87 -0
- data/test/models/proclaim/comment_test.rb +41 -0
- data/test/models/proclaim/image_test.rb +70 -0
- data/test/models/proclaim/post_test.rb +127 -0
- data/test/models/proclaim/subscription_test.rb +66 -0
- data/test/policies/proclaim/comment_policy_test.rb +71 -0
- data/test/policies/proclaim/post_policy_test.rb +87 -0
- data/test/policies/proclaim/subscription_policy_test.rb +91 -0
- data/test/proclaim_test.rb +7 -0
- data/test/support/images/test.jpg +0 -0
- data/test/support/pages/posts/edit_page.rb +5 -0
- data/test/support/pages/posts/show_page.rb +47 -0
- data/test/support/wait_for_ajax.rb +11 -0
- data/test/test_helper.rb +56 -0
- data/vendor/assets/images/link.png +0 -0
- data/vendor/assets/images/remove.png +0 -0
- data/vendor/assets/images/resize-bigger.png +0 -0
- data/vendor/assets/images/resize-smaller.png +0 -0
- data/vendor/assets/images/unlink.png +0 -0
- data/vendor/assets/javascripts/addons/medium-editor-insert-embeds.js +197 -0
- data/vendor/assets/javascripts/addons/medium-editor-insert-embeds.min.js +10 -0
- data/vendor/assets/javascripts/addons/medium-editor-insert-images.js +572 -0
- data/vendor/assets/javascripts/addons/medium-editor-insert-images.min.js +10 -0
- data/vendor/assets/javascripts/addons/medium-editor-insert-maps.js +50 -0
- data/vendor/assets/javascripts/addons/medium-editor-insert-maps.min.js +10 -0
- data/vendor/assets/javascripts/addons/medium-editor-insert-plugin.js +496 -0
- data/vendor/assets/javascripts/addons/medium-editor-insert-plugin.min.js +10 -0
- data/vendor/assets/javascripts/addons/medium-editor-insert-tables.js +132 -0
- data/vendor/assets/javascripts/addons/medium-editor-insert-tables.min.js +10 -0
- data/vendor/assets/javascripts/medium-editor-insert-plugin.all.js +1415 -0
- data/vendor/assets/javascripts/medium-editor-insert-plugin.all.min.js +10 -0
- data/vendor/assets/stylesheets/medium-editor-insert-plugin-frontend.css +55 -0
- data/vendor/assets/stylesheets/medium-editor-insert-plugin-frontend.min.css +10 -0
- data/vendor/assets/stylesheets/medium-editor-insert-plugin.css +277 -0
- data/vendor/assets/stylesheets/medium-editor-insert-plugin.min.css +10 -0
- metadata +791 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class BlogSubscriptionTest < ActionDispatch::IntegrationTest
|
|
4
|
+
setup do
|
|
5
|
+
ApplicationController.any_instance.stubs(:current_user).returns(nil)
|
|
6
|
+
ApplicationController.any_instance.stubs(:authenticate_user).returns(false)
|
|
7
|
+
|
|
8
|
+
ActionMailer::Base.deliveries.clear
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
test "should be able to create new blog subscription while logged in" do
|
|
12
|
+
user = FactoryGirl.create(:user)
|
|
13
|
+
sign_in user
|
|
14
|
+
|
|
15
|
+
visit proclaim.new_subscription_path
|
|
16
|
+
|
|
17
|
+
within('#new_subscription') do
|
|
18
|
+
fill_in 'Email', with: "example@example.com"
|
|
19
|
+
fill_in 'What is', with: antispam_solution
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
assert_difference('Proclaim::Subscription.count', 1,
|
|
23
|
+
"Should have successfully created subscription!") do
|
|
24
|
+
find('#new_subscription input[type=submit]').click
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
assert page.has_text?("Welcome"), "Should be shown the welcome page!"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
test "should be able to create new blog subscription while not logged in" do
|
|
31
|
+
visit proclaim.new_subscription_path
|
|
32
|
+
|
|
33
|
+
within('#new_subscription') do
|
|
34
|
+
fill_in 'Email', with: "example@example.com"
|
|
35
|
+
fill_in 'What is', with: antispam_solution
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
assert_difference('Proclaim::Subscription.count', 1,
|
|
39
|
+
"Should have successfully created subscription!") do
|
|
40
|
+
find('#new_subscription input[type=submit]').click
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
assert page.has_text?("Welcome"), "Should be shown the welcome page!"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
test "should not be able to create new blog subscription if spammy" do
|
|
47
|
+
user = FactoryGirl.create(:user)
|
|
48
|
+
sign_in user
|
|
49
|
+
|
|
50
|
+
visit proclaim.new_subscription_path
|
|
51
|
+
|
|
52
|
+
within('#new_subscription') do
|
|
53
|
+
fill_in 'Email', with: "example@example.com"
|
|
54
|
+
fill_in 'What is', with: "wrong answer"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
assert_no_difference('Proclaim::Subscription.count',
|
|
58
|
+
"Should have failed antispam questions!") do
|
|
59
|
+
find('#new_subscription input[type=submit]').click
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
assert page.has_css?('div#error_explanation'),
|
|
63
|
+
"Should be shown errors since the antispam questions failed!"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
test "catch bad email address" do
|
|
67
|
+
visit proclaim.new_subscription_path
|
|
68
|
+
|
|
69
|
+
within('#new_subscription') do
|
|
70
|
+
fill_in 'Email', with: "bad_email_address"
|
|
71
|
+
fill_in 'What is', with: antispam_solution
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
assert_no_difference('Proclaim::Subscription.count',
|
|
75
|
+
"Should have caught bad email address!") do
|
|
76
|
+
find('#new_subscription input[type=submit]').click
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
assert page.has_css?('div#error_explanation')
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
private
|
|
83
|
+
|
|
84
|
+
def antispam_solution
|
|
85
|
+
find('input#antispam_solution', visible: false).value
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class PostTest < ActionDispatch::IntegrationTest
|
|
4
|
+
setup do
|
|
5
|
+
ApplicationController.any_instance.stubs(:current_user).returns(nil)
|
|
6
|
+
ApplicationController.any_instance.stubs(:authenticate_user).returns(false)
|
|
7
|
+
|
|
8
|
+
@edit_page = EditPage.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
test "index should give option to create new post if logged in" do
|
|
12
|
+
user = FactoryGirl.create(:user)
|
|
13
|
+
sign_in user
|
|
14
|
+
|
|
15
|
+
visit proclaim.posts_path
|
|
16
|
+
|
|
17
|
+
assert page.has_css? "a", text: "New Post"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
test "index should not give option to create new post if not logged in" do
|
|
21
|
+
visit proclaim.posts_path
|
|
22
|
+
|
|
23
|
+
assert page.has_no_css? "a", text: "New Post"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
test "index should give option to edit post if logged in" do
|
|
27
|
+
user = FactoryGirl.create(:user)
|
|
28
|
+
sign_in user
|
|
29
|
+
|
|
30
|
+
post = FactoryGirl.create(:published_post)
|
|
31
|
+
|
|
32
|
+
visit proclaim.posts_path
|
|
33
|
+
|
|
34
|
+
assert page.has_css? "a", text: "Edit"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
test "index should not give option to edit post if not logged in" do
|
|
38
|
+
post = FactoryGirl.create(:published_post)
|
|
39
|
+
|
|
40
|
+
visit proclaim.posts_path
|
|
41
|
+
|
|
42
|
+
assert page.has_no_css? "a", text: "Edit"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
test "index should give option to delete post if logged in" do
|
|
46
|
+
user = FactoryGirl.create(:user)
|
|
47
|
+
sign_in user
|
|
48
|
+
|
|
49
|
+
post = FactoryGirl.create(:published_post)
|
|
50
|
+
|
|
51
|
+
visit proclaim.posts_path
|
|
52
|
+
|
|
53
|
+
assert page.has_css? "a", text: "Delete"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
test "index should not give option to delete post if not logged in" do
|
|
57
|
+
post = FactoryGirl.create(:published_post)
|
|
58
|
+
|
|
59
|
+
visit proclaim.posts_path
|
|
60
|
+
|
|
61
|
+
assert page.has_no_css? "a", text: "Delete"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
test "index should show post titles" do
|
|
65
|
+
post1 = FactoryGirl.create(:published_post)
|
|
66
|
+
post2 = FactoryGirl.create(:published_post)
|
|
67
|
+
|
|
68
|
+
visit proclaim.posts_path
|
|
69
|
+
|
|
70
|
+
assert page.has_text? post1.title
|
|
71
|
+
assert page.has_text? post2.title
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
test "index should show authors" do
|
|
75
|
+
post1 = FactoryGirl.create(:published_post)
|
|
76
|
+
post2 = FactoryGirl.create(:published_post)
|
|
77
|
+
|
|
78
|
+
visit proclaim.posts_path
|
|
79
|
+
|
|
80
|
+
assert page.has_text? post1.author.send(Proclaim.author_name_method)
|
|
81
|
+
assert page.has_text? post2.author.send(Proclaim.author_name_method)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
test "index should show excerpts" do
|
|
85
|
+
post1Body = Faker::Lorem.paragraph(50)
|
|
86
|
+
|
|
87
|
+
post1 = FactoryGirl.create(:published_post,
|
|
88
|
+
body: post1Body)
|
|
89
|
+
post2 = FactoryGirl.create(:published_post,
|
|
90
|
+
body: "foo")
|
|
91
|
+
|
|
92
|
+
visit proclaim.posts_path
|
|
93
|
+
|
|
94
|
+
post1RenderedBody = page.find("#post_#{post1.id} span.excerpt")
|
|
95
|
+
post2RenderedBody = page.find("#post_#{post2.id} span.excerpt")
|
|
96
|
+
|
|
97
|
+
# Make sure the render text from the post is only the excerpt-- no more
|
|
98
|
+
assert_equal post1.excerpt, post1RenderedBody.text
|
|
99
|
+
assert_equal post2.body, post2RenderedBody.text
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
test "index should show more link" do
|
|
103
|
+
post1Body = Faker::Lorem.paragraph(50)
|
|
104
|
+
|
|
105
|
+
post1 = FactoryGirl.create(:published_post,
|
|
106
|
+
body: post1Body)
|
|
107
|
+
post2 = FactoryGirl.create(:published_post,
|
|
108
|
+
body: "foo")
|
|
109
|
+
|
|
110
|
+
visit proclaim.posts_path
|
|
111
|
+
|
|
112
|
+
assert page.has_css?("#post_#{post1.id} a", text: "(more)"),
|
|
113
|
+
"Post 1 should contain a link to view more"
|
|
114
|
+
assert page.has_no_css?("#post_#{post2.id} a", text: "(more)"),
|
|
115
|
+
"Post 2 should not contain a link to see more"
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
test "show should show author name" do
|
|
119
|
+
post = FactoryGirl.create(:published_post)
|
|
120
|
+
|
|
121
|
+
visit proclaim.post_path(post)
|
|
122
|
+
|
|
123
|
+
assert page.has_text? post.author.send(Proclaim.author_name_method)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
test "image should have relative source path" do
|
|
127
|
+
user = FactoryGirl.create(:user)
|
|
128
|
+
sign_in user
|
|
129
|
+
|
|
130
|
+
image = FactoryGirl.create(:image)
|
|
131
|
+
image.post.body = @edit_page.medium_inserted_image_html(image)
|
|
132
|
+
image.post.save
|
|
133
|
+
|
|
134
|
+
image_tags = Nokogiri::HTML.fragment(image.post.body).css("img")
|
|
135
|
+
|
|
136
|
+
assert_equal 1, image_tags.length
|
|
137
|
+
refute_match root_url, image_tags[0].attribute("src"),
|
|
138
|
+
"Images should have relative paths"
|
|
139
|
+
end
|
|
140
|
+
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class SubscriptionEmailTest < ActionDispatch::IntegrationTest
|
|
4
|
+
setup do
|
|
5
|
+
ApplicationController.any_instance.stubs(:current_user).returns(nil)
|
|
6
|
+
ApplicationController.any_instance.stubs(:authenticate_user).returns(false)
|
|
7
|
+
|
|
8
|
+
ActionMailer::Base.deliveries.clear
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
test "should email welcome to post subscriber upon subscription" do
|
|
12
|
+
post = FactoryGirl.create(:published_post)
|
|
13
|
+
subscription = FactoryGirl.create(:subscription, post: post)
|
|
14
|
+
|
|
15
|
+
# Make sure subscriber was sent a welcome email
|
|
16
|
+
assert_equal [subscription.email], ActionMailer::Base.deliveries.last.to
|
|
17
|
+
assert_match "Welcome", ActionMailer::Base.deliveries.last.subject
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
test "should email notification to post subscriber when new comment is made" do
|
|
21
|
+
post = FactoryGirl.create(:published_post)
|
|
22
|
+
subscription = FactoryGirl.create(:subscription, post: post)
|
|
23
|
+
|
|
24
|
+
# Clear out emails-- new subscription probably sent a welcome email
|
|
25
|
+
ActionMailer::Base.deliveries.clear
|
|
26
|
+
|
|
27
|
+
comment = FactoryGirl.create(:comment, post: post)
|
|
28
|
+
|
|
29
|
+
# Make sure subscriber was notified of new comment
|
|
30
|
+
assert_equal [subscription.email], ActionMailer::Base.deliveries.last.to
|
|
31
|
+
assert_equal "New Comment On \"#{post.title}\"", ActionMailer::Base.deliveries.last.subject
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
test "should not email post subscriber when old comment is edited" do
|
|
35
|
+
post = FactoryGirl.create(:published_post)
|
|
36
|
+
subscription = FactoryGirl.create(:subscription, post: post)
|
|
37
|
+
comment = FactoryGirl.create(:comment, post: post)
|
|
38
|
+
|
|
39
|
+
# Clear out emails that were just sent
|
|
40
|
+
ActionMailer::Base.deliveries.clear
|
|
41
|
+
|
|
42
|
+
comment.author = "Edit Author"
|
|
43
|
+
comment.body = "Edit Body"
|
|
44
|
+
comment.save
|
|
45
|
+
|
|
46
|
+
# Make sure no email was sent after update
|
|
47
|
+
assert_empty ActionMailer::Base.deliveries
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
test "should email notification to blog subscriber when post is published" do
|
|
51
|
+
subscription = FactoryGirl.create(:subscription)
|
|
52
|
+
|
|
53
|
+
# Clear out emails-- new subscription probably sent a welcome email
|
|
54
|
+
ActionMailer::Base.deliveries.clear
|
|
55
|
+
|
|
56
|
+
post = FactoryGirl.create(:published_post)
|
|
57
|
+
|
|
58
|
+
# Make sure subscriber was notified of new post
|
|
59
|
+
assert_equal [subscription.email], ActionMailer::Base.deliveries.last.to
|
|
60
|
+
assert_equal "New Post: #{post.title}", ActionMailer::Base.deliveries.last.subject
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
test "should not email notification to blog subscriber when post is updated" do
|
|
64
|
+
subscription = FactoryGirl.create(:subscription)
|
|
65
|
+
post = FactoryGirl.create(:published_post)
|
|
66
|
+
|
|
67
|
+
# Clear out all emails
|
|
68
|
+
ActionMailer::Base.deliveries.clear
|
|
69
|
+
|
|
70
|
+
post.title = "Edit Title"
|
|
71
|
+
post.body = "Edit Body"
|
|
72
|
+
|
|
73
|
+
# Make sure no email was sent after update
|
|
74
|
+
assert_empty ActionMailer::Base.deliveries
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
test "should not email notification to blog subscriber if post is not published" do
|
|
78
|
+
subscription = FactoryGirl.create(:subscription)
|
|
79
|
+
|
|
80
|
+
# Clear out emails-- new subscription probably sent a welcome email
|
|
81
|
+
ActionMailer::Base.deliveries.clear
|
|
82
|
+
|
|
83
|
+
post = FactoryGirl.create(:post)
|
|
84
|
+
|
|
85
|
+
# Make sure no email was sent after update
|
|
86
|
+
assert_empty ActionMailer::Base.deliveries
|
|
87
|
+
|
|
88
|
+
post.publish
|
|
89
|
+
assert post.save
|
|
90
|
+
|
|
91
|
+
# Make sure subscriber was notified of newly published post
|
|
92
|
+
assert_equal [subscription.email], ActionMailer::Base.deliveries.last.to
|
|
93
|
+
assert_equal "New Post: #{post.title}", ActionMailer::Base.deliveries.last.subject
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class UnsubscribeTest < ActionDispatch::IntegrationTest
|
|
4
|
+
setup do
|
|
5
|
+
ApplicationController.any_instance.stubs(:current_user).returns(nil)
|
|
6
|
+
ApplicationController.any_instance.stubs(:authenticate_user).returns(false)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
test "should be able to unsubscribe from blog" do
|
|
10
|
+
subscription = FactoryGirl.create(:subscription)
|
|
11
|
+
|
|
12
|
+
visit proclaim.unsubscribe_path(subscription.token)
|
|
13
|
+
|
|
14
|
+
assert_difference('Proclaim::Subscription.count', -1) do
|
|
15
|
+
click_link "unsubscribe"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
assert_equal proclaim.unsubscribed_path, current_path
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
test "should be able to unsubscribe from post" do
|
|
22
|
+
subscription = FactoryGirl.create(:published_post_subscription)
|
|
23
|
+
|
|
24
|
+
visit proclaim.unsubscribe_path(subscription.token)
|
|
25
|
+
|
|
26
|
+
assert_difference('Proclaim::Subscription.count', -1) do
|
|
27
|
+
click_link "unsubscribe"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
assert_equal proclaim.unsubscribed_path, current_path
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Proclaim
|
|
2
|
+
# Preview all emails at http://localhost:3000/rails/mailers/subscription_mailer
|
|
3
|
+
class SubscriptionMailerPreview < ActionMailer::Preview
|
|
4
|
+
def welcome_email
|
|
5
|
+
subscription = Subscription.first
|
|
6
|
+
SubscriptionMailer.welcome_email(subscription)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def new_post_notification_email
|
|
10
|
+
subscription = Subscription.first
|
|
11
|
+
post = Post.first
|
|
12
|
+
SubscriptionMailer.new_post_notification_email(subscription, post)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def new_comment_notification_email
|
|
16
|
+
subscription = Subscription.where("post_id <> ''").first
|
|
17
|
+
comment = subscription.post.comments.first
|
|
18
|
+
|
|
19
|
+
SubscriptionMailer.new_comment_notification_email(subscription, comment)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Proclaim
|
|
4
|
+
class SubscriptionMailerTest < ActionMailer::TestCase
|
|
5
|
+
include Rails.application.routes.url_helpers
|
|
6
|
+
include Rails.application.routes.mounted_helpers
|
|
7
|
+
|
|
8
|
+
def default_url_options
|
|
9
|
+
Rails.application.config.action_mailer.default_url_options
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
setup do
|
|
13
|
+
@edit_page = EditPage.new
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test "welcome email" do
|
|
17
|
+
subscription = FactoryGirl.create(:subscription)
|
|
18
|
+
|
|
19
|
+
mail = SubscriptionMailer.welcome_email(subscription)
|
|
20
|
+
assert_match "Welcome", mail.subject
|
|
21
|
+
assert_equal [subscription.email], mail.to
|
|
22
|
+
assert_equal ["from@example.com"], mail.from
|
|
23
|
+
assert_equal 2, mail.body.parts.length # Ensure multipart: text and HTML
|
|
24
|
+
|
|
25
|
+
# Verify the email includes an unsubscription URL
|
|
26
|
+
assert_match proclaim.unsubscribe_url(subscription.token), get_text_part(mail)
|
|
27
|
+
assert_match proclaim.unsubscribe_url(subscription.token), get_html_part(mail)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
test "new comment notification email" do
|
|
31
|
+
subscription = FactoryGirl.create(:post_subscription)
|
|
32
|
+
comment = FactoryGirl.create(:comment)
|
|
33
|
+
|
|
34
|
+
mail = SubscriptionMailer.new_comment_notification_email(subscription, comment)
|
|
35
|
+
assert_equal "New Comment On \"#{comment.post.title}\"", mail.subject
|
|
36
|
+
assert_equal [subscription.email], mail.to
|
|
37
|
+
assert_equal ["from@example.com"], mail.from
|
|
38
|
+
assert_equal 2, mail.body.parts.length # Ensure multipart: text and HTML
|
|
39
|
+
|
|
40
|
+
# Verify the email includes an unsubscription URL
|
|
41
|
+
assert_match proclaim.unsubscribe_url(subscription.token), get_text_part(mail)
|
|
42
|
+
assert_match proclaim.unsubscribe_url(subscription.token), get_html_part(mail)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
test "new post notification email" do
|
|
46
|
+
subscription = FactoryGirl.create(:subscription)
|
|
47
|
+
post = FactoryGirl.create(:published_post)
|
|
48
|
+
|
|
49
|
+
mail = SubscriptionMailer.new_post_notification_email(subscription, post)
|
|
50
|
+
assert_equal "New Post: #{post.title}", mail.subject
|
|
51
|
+
assert_equal [subscription.email], mail.to
|
|
52
|
+
assert_equal ["from@example.com"], mail.from
|
|
53
|
+
assert_equal 2, mail.body.parts.length # Ensure multipart: text and HTML
|
|
54
|
+
|
|
55
|
+
# Verify the email includes an unsubscription URL
|
|
56
|
+
assert_match proclaim.unsubscribe_url(subscription.token), get_text_part(mail)
|
|
57
|
+
assert_match proclaim.unsubscribe_url(subscription.token), get_html_part(mail)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
test "images in new post notification email should have absolute URLs" do
|
|
61
|
+
subscription = FactoryGirl.create(:subscription)
|
|
62
|
+
|
|
63
|
+
image = FactoryGirl.create(:image)
|
|
64
|
+
image.post.body = @edit_page.medium_inserted_image_html(image)
|
|
65
|
+
image.post.publish
|
|
66
|
+
image.post.save
|
|
67
|
+
|
|
68
|
+
mail = SubscriptionMailer.new_post_notification_email(subscription, image.post)
|
|
69
|
+
|
|
70
|
+
image_tags = Nokogiri::HTML(get_html_part(mail)).css("img")
|
|
71
|
+
|
|
72
|
+
assert_equal 1, image_tags.length
|
|
73
|
+
assert_match root_url, image_tags[0].attribute("src"),
|
|
74
|
+
"Images should have absolute URLs in emails"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
def get_text_part(mail)
|
|
80
|
+
mail.body.parts.find {|p| p.content_type.match /plain/}.body.raw_source
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def get_html_part(mail)
|
|
84
|
+
mail.body.parts.find {|p| p.content_type.match /html/}.body.raw_source
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|