diff options
author | Jamie Winsor <jamie@enmasse.com> | 2011-09-04 03:20:51 -0700 |
---|---|---|
committer | Jamie Winsor <jamie@enmasse.com> | 2011-09-04 14:35:03 -0700 |
commit | 7903bdfed26f085f6d07d104ac458bc4319b1e32 (patch) | |
tree | fd950e2c1d1d234e0e6a590d24296a4a396798a3 | |
parent | 40be4f71ee425ee55ecedea96ff2b0dc510d71db (diff) | |
download | refinerycms-blog-7903bdfed26f085f6d07d104ac458bc4319b1e32.tar.gz refinerycms-blog-7903bdfed26f085f6d07d104ac458bc4319b1e32.tar.bz2 refinerycms-blog-7903bdfed26f085f6d07d104ac458bc4319b1e32.zip |
refactor factories and add #show tests for posts controller
Do not want to cache classes, but do want to reload models after factory girl:
http://groups.google.com/group/factory_girl/browse_thread/thread/daa24556d90c31fc
http://stackoverflow.com/questions/5145165/associationtypemismatch-and-factorygirl
rails_autolink was removed from Rails 3.1 and abstracted to an external gem
fix display author name and post time on comment show
fix namespace for thanking and moderated flash notices
-rw-r--r-- | Gemfile | 3 | ||||
-rw-r--r-- | app/controllers/refinery/blog/posts_controller.rb | 4 | ||||
-rw-r--r-- | app/views/refinery/blog/posts/_comment.html.erb | 4 | ||||
-rw-r--r-- | lib/gemspec.rb | 1 | ||||
-rw-r--r-- | lib/refinery/blog/engine.rb | 2 | ||||
-rw-r--r-- | refinerycms-blog.gemspec | 27 | ||||
-rw-r--r-- | spec/dummy/.gitignore | 2 | ||||
-rw-r--r-- | spec/factories/blog_categories.rb (renamed from spec/support/factories/blog_categories.rb) | 2 | ||||
-rw-r--r-- | spec/factories/blog_comments.rb | 19 | ||||
-rw-r--r-- | spec/factories/blog_posts.rb (renamed from spec/support/factories/blog_posts.rb) | 2 | ||||
-rw-r--r-- | spec/requests/refinery/blog/posts_spec.rb | 61 | ||||
-rw-r--r-- | spec/spec_helper.rb | 27 | ||||
-rw-r--r-- | spec/support/database_cleaner.rb | 2 | ||||
-rw-r--r-- | spec/support/factories/blog_comments.rb | 8 |
14 files changed, 122 insertions, 42 deletions
@@ -3,11 +3,12 @@ source "http://rubygems.org" gemspec ## Uncomment the following lines to develop against edge refinery -gem 'refinerycms', :git => 'git://github.com/resolve/refinerycms.git' +gem 'refinerycms', :path => "~/Code/refinerycms" # :git => 'git://github.com/resolve/refinerycms.git' gem 'awesome_nested_set', :git => 'git://github.com/collectiveidea/awesome_nested_set.git' group :development, :test do require 'rbconfig' + gem 'sqlite3' gem 'mysql2' gem 'pg' diff --git a/app/controllers/refinery/blog/posts_controller.rb b/app/controllers/refinery/blog/posts_controller.rb index aa7d45e..a22d251 100644 --- a/app/controllers/refinery/blog/posts_controller.rb +++ b/app/controllers/refinery/blog/posts_controller.rb @@ -40,10 +40,10 @@ module Refinery end if Refinery::BlogComment::Moderation.enabled? - flash[:notice] = t('thank_you_moderated', :scope => 'blog.posts.comments') + flash[:notice] = t('thank_you_moderated', :scope => 'refinery.blog.posts.comments') redirect_to main_app.blog_post_url(params[:id]) else - flash[:notice] = t('thank_you', :scope => 'blog.posts.comments') + flash[:notice] = t('thank_you', :scope => 'refinery.blog.posts.comments') redirect_to main_app.blog_post_url(params[:id], :anchor => "comment-#{@blog_comment.to_param}") end diff --git a/app/views/refinery/blog/posts/_comment.html.erb b/app/views/refinery/blog/posts/_comment.html.erb index 5503826..659f433 100644 --- a/app/views/refinery/blog/posts/_comment.html.erb +++ b/app/views/refinery/blog/posts/_comment.html.erb @@ -3,8 +3,8 @@ <%= simple_format auto_link(comment.message.to_s) %> <footer class='blog_comment_author'> <p> - <%= t('by', :scope => 'blog.posts.comments', :who => comment.name) %>, - <%= t('time_ago', :scope => 'blog.posts.comments', :time => time_ago_in_words(comment.created_at)) %> + <%= t('by', :scope => 'refinery.blog.posts.comments', :who => comment.name) %>, + <%= t('time_ago', :scope => 'refinery.blog.posts.comments', :time => time_ago_in_words(comment.created_at)) %> </p> </footer> </article> diff --git a/lib/gemspec.rb b/lib/gemspec.rb index df188fe..5508df6 100644 --- a/lib/gemspec.rb +++ b/lib/gemspec.rb @@ -24,6 +24,7 @@ Gem::Specification.new do |s| s.add_dependency 'filters_spam', '~> 0.2' s.add_dependency 'acts-as-taggable-on' s.add_dependency 'seo_meta', '~> 1.2.0.rc1' + s.add_dependency 'rails_autolink' # Development dependencies s.add_development_dependency 'refinerycms-testing', '~> 2.0.0' diff --git a/lib/refinery/blog/engine.rb b/lib/refinery/blog/engine.rb index ef21472..f67d4ab 100644 --- a/lib/refinery/blog/engine.rb +++ b/lib/refinery/blog/engine.rb @@ -1,6 +1,8 @@ module Refinery module Blog class Engine < Rails::Engine + require 'rails_autolink' + config.to_prepare do require 'refinery/blog/tabs' end diff --git a/refinerycms-blog.gemspec b/refinerycms-blog.gemspec index 24016af..46a86d3 100644 --- a/refinerycms-blog.gemspec +++ b/refinerycms-blog.gemspec @@ -5,7 +5,7 @@ Gem::Specification.new do |s| s.name = %q{refinerycms-blog} s.version = %q{2.0.0} s.description = %q{A really straightforward open source Ruby on Rails blog engine designed for integration with RefineryCMS.} - s.date = %q{2011-08-18} + s.date = %q{2011-09-04} s.summary = %q{Ruby on Rails blogging engine for RefineryCMS.} s.email = %q{info@refinerycms.com} s.homepage = %q{http://refinerycms.com/blog} @@ -14,9 +14,10 @@ Gem::Specification.new do |s| # Runtime dependencies s.add_dependency 'refinerycms-core', '~> 2.0.0' - s.add_dependency 'refinerycms-pages', '~> 2.0.0' s.add_dependency 'filters_spam', '~> 0.2' s.add_dependency 'acts-as-taggable-on' + s.add_dependency 'seo_meta', '~> 1.2.0.rc1' + s.add_dependency 'rails_autolink' # Development dependencies s.add_development_dependency 'refinerycms-testing', '~> 2.0.0' @@ -99,6 +100,9 @@ Gem::Specification.new do |s| app/models/refinery/blog_comment.rb app/models/refinery/blog_post.rb app/models/refinery/categorization.rb + app/sweepers + app/sweepers/refinery + app/sweepers/refinery/blog_sweeper.rb app/views app/views/refinery app/views/refinery/admin @@ -204,6 +208,10 @@ Gem::Specification.new do |s| script script/rails spec + spec/factories + spec/factories/blog_categories.rb + spec/factories/blog_comments.rb + spec/factories/blog_posts.rb spec/models spec/models/refinery spec/models/refinery/blog_category_spec.rb @@ -211,17 +219,18 @@ Gem::Specification.new do |s| spec/models/refinery/blog_post_spec.rb spec/rcov.opts spec/requests - spec/requests/blog_categories_spec.rb - spec/requests/blog_posts_spec.rb - spec/requests/manage_blog_posts_spec.rb + spec/requests/refinery + spec/requests/refinery/admin + spec/requests/refinery/admin/blog + spec/requests/refinery/admin/blog/comments_spec.rb + spec/requests/refinery/admin/blog/posts_spec.rb + spec/requests/refinery/blog + spec/requests/refinery/blog/categories_spec.rb + spec/requests/refinery/blog/posts_spec.rb spec/spec_helper.rb spec/support spec/support/database_cleaner.rb spec/support/devise.rb - spec/support/factories - spec/support/factories/blog_categories.rb - spec/support/factories/blog_comments.rb - spec/support/factories/blog_posts.rb spec/support/refinery.rb todo.md ) diff --git a/spec/dummy/.gitignore b/spec/dummy/.gitignore index d80f252..c698a36 100644 --- a/spec/dummy/.gitignore +++ b/spec/dummy/.gitignore @@ -31,6 +31,8 @@ public/themes/* # Public Cache public/javascripts/cache public/stylesheets/cache +public/*.html +public/refinery/cache # Vendor Cache vendor/cache diff --git a/spec/support/factories/blog_categories.rb b/spec/factories/blog_categories.rb index 31ec28b..9ee4f16 100644 --- a/spec/support/factories/blog_categories.rb +++ b/spec/factories/blog_categories.rb @@ -1,5 +1,5 @@ FactoryGirl.define do - factory :blog_category, :class => 'refinery/blog_category' do + factory :blog_category, :class => Refinery::BlogCategory do sequence(:title) { |n| "Shopping #{n}" } end end diff --git a/spec/factories/blog_comments.rb b/spec/factories/blog_comments.rb new file mode 100644 index 0000000..9818c07 --- /dev/null +++ b/spec/factories/blog_comments.rb @@ -0,0 +1,19 @@ +FactoryGirl.define do + factory :blog_comment, :class => Refinery::BlogComment do + name "Joe Commenter" + sequence(:email) { |n| "person#{n}@example.com" } + body "Which one is the best for picking up new shoes?" + association :post, :factory => :blog_post + + trait :approved do + state 'approved' + end + + trait :rejected do + state 'rejected' + end + + factory :approved_comment, :traits => [:approved] + factory :rejected_comment, :traits => [:rejected] + end +end diff --git a/spec/support/factories/blog_posts.rb b/spec/factories/blog_posts.rb index 4586b36..0b8b888 100644 --- a/spec/support/factories/blog_posts.rb +++ b/spec/factories/blog_posts.rb @@ -1,5 +1,5 @@ FactoryGirl.define do - factory :blog_post, :class => 'refinery/blog_post' do + factory :blog_post, :class => Refinery::BlogPost do sequence(:title) { |n| "Top #{n} Shopping Centers in Chicago" } body "These are the top ten shopping centers in Chicago. You're going to read a long blog post about them. Come to peace with it." draft false diff --git a/spec/requests/refinery/blog/posts_spec.rb b/spec/requests/refinery/blog/posts_spec.rb index eba6131..4017d03 100644 --- a/spec/requests/refinery/blog/posts_spec.rb +++ b/spec/requests/refinery/blog/posts_spec.rb @@ -5,36 +5,83 @@ module Refinery login_refinery_user context "when has blog posts" do - let(:blog_post) { FactoryGirl.create(:blog_post, :title => "Refinery CMS blog post") } + let!(:blog_post) { FactoryGirl.create(:blog_post, :title => "Refinery CMS blog post") } it "should display blog post" do visit blog_post_path(blog_post) - page.should have_content("Refinery CMS blog post") + + page.should have_content(blog_post.title) end it "should display the blog rss feed" do get blog_rss_feed_path + response.should be_success response.content_type.should eq("application/rss+xml") end end - + describe "list tagged posts" do context "when has tagged blog posts" do before(:each) do @tag_name = "chicago" @blog_post = FactoryGirl.create(:blog_post, - :title => "I Love my city", - :tag_list => @tag_name) - tag = ::Refinery::BlogPost.tag_counts_on(:tags).first - visit tagged_posts_path(tag.id, @tag_name.parameterize) + :title => "I Love my city", + :tag_list => @tag_name) + @tag = ::Refinery::BlogPost.tag_counts_on(:tags).first end it "should have one tagged post" do + visit tagged_posts_path(@tag.id, @tag_name.parameterize) + page.should have_content(@tag_name) page.should have_content(@blog_post.title) end end end + + describe "#show" do + context "when has no comments" do + let!(:blog_post) { FactoryGirl.create(:blog_post) } + + it "should display the blog post" do + visit blog_post_path(blog_post) + + page.should have_content(blog_post.title) + page.should have_content(blog_post.body) + end + end + + context "when has approved comments" do + let!(:approved_comment) { FactoryGirl.create(:approved_comment) } + + it "should display the comments" do + visit blog_post_path(approved_comment.post) + + page.should have_content(approved_comment.body) + page.should have_content("Posted by #{approved_comment.name}") + end + end + + context "when has rejected comments" do + let!(:rejected_comment) { FactoryGirl.create(:rejected_comment) } + + it "should not display the comments" do + visit blog_post_path(rejected_comment.post) + + page.should_not have_content(rejected_comment.body) + end + end + + context "when has new comments" do + let!(:blog_comment) { FactoryGirl.create(:blog_comment) } + + it "should not display the comments" do + visit blog_post_path(blog_comment.post) + + page.should_not have_content(blog_comment.body) + end + end + end end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a3fe107..b8df592 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,34 +6,39 @@ def setup_environment # need to restart spork for it take effect. # Configure Rails Environment - ENV["RAILS_ENV"] ||= 'test' + ENV["RAILS_ENV"] = 'test' require File.expand_path("../dummy/config/environment.rb", __FILE__) require 'rspec/rails' require 'capybara/rspec' - require 'factory_girl' - require 'refinerycms-testing' - + Rails.backtrace_cleaner.remove_silencers! - Dir[ - File.expand_path("../support/**/*.rb", __FILE__), - File.expand_path("../factories/**/*.rb", __FILE__) - ].each {|f| require f} - RSpec.configure do |config| config.mock_with :rspec - config.use_transactional_fixtures = false end end -def each_run +def each_run + require 'factory_girl_rails' + require 'refinerycms-testing' + + Dir[File.expand_path("../../app/models/**/*.rb", __FILE__)].each do |model| + load model + end + + Dir[ + File.expand_path("../support/**/*.rb", __FILE__), + File.expand_path("../factories/**/*.rb", __FILE__) + ].each {|f| require f} end # If spork is available in the Gemfile it'll be used but we don't force it. unless (begin; require 'spork'; rescue LoadError; nil end).nil? Spork.prefork do setup_environment + + ActiveSupport::Dependencies.clear end Spork.each_run do diff --git a/spec/support/database_cleaner.rb b/spec/support/database_cleaner.rb index a104c53..40acbc9 100644 --- a/spec/support/database_cleaner.rb +++ b/spec/support/database_cleaner.rb @@ -1,6 +1,8 @@ require 'database_cleaner' RSpec.configure do |config| + config.use_transactional_fixtures = false + config.before(:suite) do DatabaseCleaner.strategy = :truncation end diff --git a/spec/support/factories/blog_comments.rb b/spec/support/factories/blog_comments.rb deleted file mode 100644 index 0bb5206..0000000 --- a/spec/support/factories/blog_comments.rb +++ /dev/null @@ -1,8 +0,0 @@ -FactoryGirl.define do - factory :blog_comment, :class => 'refinery/blog_comment' do - name "Joe Commenter" - sequence(:email) { |n| "person#{n}@example.com" } - body "Which one is the best for picking up new shoes?" - association :post, :factory => :blog_post - end -end |