From ce0ff3774f34c17ca362fa9ac0d07044f76e81a7 Mon Sep 17 00:00:00 2001 From: Ben Zimmer Date: Sun, 12 May 2013 13:57:04 +0200 Subject: [PATCH 1/4] adds spec support for active record It's not very nice at the moment, because it spits out the migration output on every run, but it works. --- spec/support/active_record.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 spec/support/active_record.rb diff --git a/spec/support/active_record.rb b/spec/support/active_record.rb new file mode 100644 index 000000000..5dc79b586 --- /dev/null +++ b/spec/support/active_record.rb @@ -0,0 +1,13 @@ +require 'active_record' + +ActiveRecord::Base.establish_connection adapter: "sqlite3", database: "db/stringer_test.sqlite" +ActiveRecord::Migrator.up "db/migrate" + +RSpec.configure do |config| + config.around do |example| + ActiveRecord::Base.transaction do + example.run + raise ActiveRecord::Rollback + end + end +end From a1cee780586b6171198b975cbf1970836fa4790d Mon Sep 17 00:00:00 2001 From: Ben Zimmer Date: Sun, 12 May 2013 13:58:45 +0200 Subject: [PATCH 2/4] adds Story specs --- spec/models/story_spec.rb | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 spec/models/story_spec.rb diff --git a/spec/models/story_spec.rb b/spec/models/story_spec.rb new file mode 100644 index 000000000..3667a4dbd --- /dev/null +++ b/spec/models/story_spec.rb @@ -0,0 +1,40 @@ +require "spec_helper" +require 'support/active_record' + +app_require "models/story" + +describe "Story" do + + let(:story) do + Story.new( + title: Faker::Lorem.sentence(50), + body: Faker::Lorem.sentence(50) + ) + end + + describe "#headline" do + it "truncates to 50 chars" do + story.headline.size.should eq(50) + end + + it "uses a fallback string if story has no title" do + story.title = nil + story.headline.should eq(Story::UNTITLED) + end + end + + describe "#lead" do + it "truncates to 100 chars" do + story.lead.size.should eq(100) + end + end + + describe "#source" do + let(:feed) { Feed.new(name: 'Superfeed') } + before { story.feed = feed } + + it "returns the feeds name" do + story.source.should eq(feed.name) + end + end +end From 1e233473cbd7fd97f2ff27cb605cd697d5d44ed5 Mon Sep 17 00:00:00 2001 From: Ben Zimmer Date: Sun, 12 May 2013 14:00:22 +0200 Subject: [PATCH 3/4] removes some trailing white-spaces --- spec/factories/story_factory.rb | 6 +++--- spec/spec_helper.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/factories/story_factory.rb b/spec/factories/story_factory.rb index f8fc02b81..d4f7d022a 100644 --- a/spec/factories/story_factory.rb +++ b/spec/factories/story_factory.rb @@ -14,11 +14,11 @@ def source def self.build(params = {}) FakeStory.new( id: rand(100), - title: params[:title] || Faker::Lorem.sentence, - permalink: params[:permalink] || Faker::Internet.url, + title: params[:title] || Faker::Lorem.sentence, + permalink: params[:permalink] || Faker::Internet.url, body: params[:body] || Faker::Lorem.paragraph, feed: params[:feed] || FeedFactory.build, is_read: params[:is_read] || false, published: params[:published] ||Time.now) end -end \ No newline at end of file +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a04da648f..15cc78502 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -30,5 +30,5 @@ def app end def session - last_request.env['rack.session'] + last_request.env['rack.session'] end From af948ef7b353097a8054d85a3946bd56d636655c Mon Sep 17 00:00:00 2001 From: Ben Zimmer Date: Sun, 12 May 2013 14:17:26 +0200 Subject: [PATCH 4/4] specs: only run migrations if necessary --- spec/support/active_record.rb | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/spec/support/active_record.rb b/spec/support/active_record.rb index 5dc79b586..fdcc6d699 100644 --- a/spec/support/active_record.rb +++ b/spec/support/active_record.rb @@ -1,7 +1,20 @@ require 'active_record' ActiveRecord::Base.establish_connection adapter: "sqlite3", database: "db/stringer_test.sqlite" -ActiveRecord::Migrator.up "db/migrate" + +def need_to_migrate? + current_migration = ActiveRecord::Migrator.current_version + latest_migration = begin + ActiveRecord::Migrator.get_all_versions.last + rescue ActiveRecord::StatementInvalid + nil + end + current_migration != latest_migration +end + +if need_to_migrate? + ActiveRecord::Migrator.up "db/migrate" +end RSpec.configure do |config| config.around do |example|