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
This commit is contained in:
Jamie Winsor 2011-09-04 03:20:51 -07:00
parent 40be4f71ee
commit 7903bdfed2
14 changed files with 123 additions and 43 deletions

View file

@ -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'

View file

@ -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

View file

@ -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>

View file

@ -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'

View file

@ -1,6 +1,8 @@
module Refinery
module Blog
class Engine < Rails::Engine
require 'rails_autolink'
config.to_prepare do
require 'refinery/blog/tabs'
end

View file

@ -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
)

View file

@ -31,6 +31,8 @@ public/themes/*
# Public Cache
public/javascripts/cache
public/stylesheets/cache
public/*.html
public/refinery/cache
# Vendor Cache
vendor/cache

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -5,15 +5,17 @@ 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
@ -26,15 +28,60 @@ module Refinery
@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)
@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

View file

@ -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!
RSpec.configure do |config|
config.mock_with :rspec
end
end
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}
RSpec.configure do |config|
config.mock_with :rspec
config.use_transactional_fixtures = false
end
end
def each_run
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

View file

@ -1,6 +1,8 @@
require 'database_cleaner'
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end

View file

@ -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