* half way done getting tests repaired for removal of followers/microsposts
This commit is contained in:
parent
15042a9c9b
commit
5e38fa130a
15
Gemfile
15
Gemfile
|
|
@ -1,4 +1,7 @@
|
|||
source 'https://rubygems.org'
|
||||
# Look for $WORKSPACE, otherwise use "workspace" as dev path.
|
||||
|
||||
workspace = ENV["WORKSPACE"] || "~/workspace"
|
||||
|
||||
gem 'rails', '3.2.8'
|
||||
gem 'jquery-rails', '2.0.2'
|
||||
|
|
@ -8,8 +11,15 @@ gem 'faker', '1.0.1'
|
|||
gem 'will_paginate', '3.0.3'
|
||||
gem 'bootstrap-will_paginate', '0.0.6'
|
||||
|
||||
gem 'uuidtools', '2.1.2'
|
||||
gem 'ruby-protocol-buffers', '1.2.2'
|
||||
gem 'pg_migrate','0.1.5' #:path => "#{workspace}/pg_migrate_ruby"
|
||||
gem 'jam_db', :path => "#{workspace}/jam-db/target/ruby_package"
|
||||
gem 'jam_ruby', :path => "#{workspace}/jam-ruby"
|
||||
gem 'jampb', :path => "#{workspace}/jam-pb/target/ruby/jampb"
|
||||
gem 'pg', '0.14.0'
|
||||
|
||||
group :development, :test do
|
||||
gem 'sqlite3', '1.3.5'
|
||||
gem 'rspec-rails', '2.11.0'
|
||||
gem 'guard-rspec', '0.5.5'
|
||||
end
|
||||
|
|
@ -34,6 +44,3 @@ group :test do
|
|||
# gem 'growl', '1.0.3'
|
||||
end
|
||||
|
||||
group :production do
|
||||
gem 'pg', '0.12.2'
|
||||
end
|
||||
62
Gemfile.lock
62
Gemfile.lock
|
|
@ -1,3 +1,19 @@
|
|||
PATH
|
||||
remote: ~/workspace/jam-db/target/ruby_package
|
||||
specs:
|
||||
jam_db (0.0.1)
|
||||
pg_migrate (= 0.1.5)
|
||||
|
||||
PATH
|
||||
remote: ~/workspace/jam-pb/target/ruby/jampb
|
||||
specs:
|
||||
jampb (0.0.1)
|
||||
|
||||
PATH
|
||||
remote: ~/workspace/jam-ruby
|
||||
specs:
|
||||
jam_ruby (0.0.1)
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
|
|
@ -42,8 +58,8 @@ GEM
|
|||
rack-test (>= 0.5.4)
|
||||
selenium-webdriver (~> 2.0)
|
||||
xpath (~> 0.1.4)
|
||||
childprocess (0.3.2)
|
||||
ffi (~> 1.0.6)
|
||||
childprocess (0.3.5)
|
||||
ffi (~> 1.0, >= 1.0.6)
|
||||
coffee-rails (3.2.2)
|
||||
coffee-script (>= 2.2.0)
|
||||
railties (~> 3.2.0)
|
||||
|
|
@ -51,10 +67,10 @@ GEM
|
|||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.3.3)
|
||||
cucumber (1.2.0)
|
||||
cucumber (1.2.1)
|
||||
builder (>= 2.1.2)
|
||||
diff-lcs (>= 1.1.3)
|
||||
gherkin (~> 2.10.0)
|
||||
gherkin (~> 2.11.0)
|
||||
json (>= 1.4.6)
|
||||
cucumber-rails (1.2.1)
|
||||
capybara (>= 1.1.2)
|
||||
|
|
@ -72,10 +88,10 @@ GEM
|
|||
railties (>= 3.0.0)
|
||||
faker (1.0.1)
|
||||
i18n (~> 0.4)
|
||||
ffi (1.0.11)
|
||||
gherkin (2.10.0)
|
||||
ffi (1.1.5)
|
||||
gherkin (2.11.2)
|
||||
json (>= 1.4.6)
|
||||
guard (1.1.1)
|
||||
guard (1.3.2)
|
||||
listen (>= 0.4.2)
|
||||
thor (>= 0.14.6)
|
||||
guard-rspec (0.5.5)
|
||||
|
|
@ -89,15 +105,18 @@ GEM
|
|||
jquery-rails (2.0.2)
|
||||
railties (>= 3.2.0, < 5.0)
|
||||
thor (~> 0.14)
|
||||
json (1.7.4)
|
||||
json (1.7.5)
|
||||
launchy (2.1.0)
|
||||
addressable (~> 2.2.6)
|
||||
libwebsocket (0.1.3)
|
||||
libwebsocket (0.1.5)
|
||||
addressable
|
||||
listen (0.4.2)
|
||||
listen (0.4.7)
|
||||
rb-fchange (~> 0.0.5)
|
||||
rb-fsevent (~> 0.9.1)
|
||||
rb-inotify (~> 0.8.8)
|
||||
little-plugger (1.1.3)
|
||||
logging (1.7.2)
|
||||
little-plugger (>= 1.1.3)
|
||||
mail (2.4.4)
|
||||
i18n (>= 0.4.0)
|
||||
mime-types (~> 1.16)
|
||||
|
|
@ -105,7 +124,11 @@ GEM
|
|||
mime-types (1.19)
|
||||
multi_json (1.3.6)
|
||||
nokogiri (1.5.5)
|
||||
pg (0.12.2)
|
||||
pg (0.14.0)
|
||||
pg_migrate (0.1.5)
|
||||
logging (= 1.7.2)
|
||||
pg (= 0.14.0)
|
||||
thor (= 0.15.4)
|
||||
polyglot (0.3.3)
|
||||
rack (1.4.1)
|
||||
rack-cache (1.2)
|
||||
|
|
@ -150,15 +173,15 @@ GEM
|
|||
activesupport (>= 3.0)
|
||||
railties (>= 3.0)
|
||||
rspec (~> 2.11.0)
|
||||
rubyzip (0.9.8)
|
||||
ruby-protocol-buffers (1.2.2)
|
||||
rubyzip (0.9.9)
|
||||
sass (3.2.1)
|
||||
sass-rails (3.2.5)
|
||||
railties (~> 3.2.0)
|
||||
sass (>= 3.1.10)
|
||||
tilt (~> 1.3)
|
||||
selenium-webdriver (2.22.2)
|
||||
selenium-webdriver (2.25.0)
|
||||
childprocess (>= 0.2.5)
|
||||
ffi (~> 1.0)
|
||||
libwebsocket (~> 0.1.3)
|
||||
multi_json (~> 1.0)
|
||||
rubyzip
|
||||
|
|
@ -167,7 +190,6 @@ GEM
|
|||
hike (~> 1.2)
|
||||
rack (~> 1.0)
|
||||
tilt (~> 1.1, != 1.3.0)
|
||||
sqlite3 (1.3.5)
|
||||
thor (0.15.4)
|
||||
tilt (1.3.3)
|
||||
treetop (1.4.10)
|
||||
|
|
@ -177,6 +199,7 @@ GEM
|
|||
uglifier (1.2.3)
|
||||
execjs (>= 0.3.0)
|
||||
multi_json (>= 1.0.2)
|
||||
uuidtools (2.1.2)
|
||||
will_paginate (3.0.3)
|
||||
xpath (0.1.4)
|
||||
nokogiri (~> 1.3)
|
||||
|
|
@ -196,13 +219,18 @@ DEPENDENCIES
|
|||
faker (= 1.0.1)
|
||||
guard-rspec (= 0.5.5)
|
||||
guard-spork (= 0.3.2)
|
||||
jam_db!
|
||||
jam_ruby!
|
||||
jampb!
|
||||
jquery-rails (= 2.0.2)
|
||||
launchy (= 2.1.0)
|
||||
pg (= 0.12.2)
|
||||
pg (= 0.14.0)
|
||||
pg_migrate (= 0.1.5)
|
||||
rails (= 3.2.8)
|
||||
rspec-rails (= 2.11.0)
|
||||
ruby-protocol-buffers (= 1.2.2)
|
||||
sass-rails (= 3.2.5)
|
||||
spork (= 0.9.0)
|
||||
sqlite3 (= 1.3.5)
|
||||
uglifier (= 1.2.3)
|
||||
uuidtools (= 2.1.2)
|
||||
will_paginate (= 3.0.3)
|
||||
|
|
|
|||
|
|
@ -1,40 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe RelationshipsController do
|
||||
|
||||
let(:user) { FactoryGirl.create(:user) }
|
||||
let(:other_user) { FactoryGirl.create(:user) }
|
||||
|
||||
before { sign_in user }
|
||||
|
||||
describe "creating a relationship with Ajax" do
|
||||
|
||||
it "should increment the Relationship count" do
|
||||
expect do
|
||||
xhr :post, :create, relationship: { followed_id: other_user.id }
|
||||
end.to change(Relationship, :count).by(1)
|
||||
end
|
||||
|
||||
it "should respond with success" do
|
||||
xhr :post, :create, relationship: { followed_id: other_user.id }
|
||||
response.should be_success
|
||||
end
|
||||
end
|
||||
|
||||
describe "destroying a relationship with Ajax" do
|
||||
|
||||
before { user.follow!(other_user) }
|
||||
let(:relationship) { user.relationships.find_by_followed_id(other_user) }
|
||||
|
||||
it "should decrement the Relationship count" do
|
||||
expect do
|
||||
xhr :delete, :destroy, id: relationship.id
|
||||
end.to change(Relationship, :count).by(-1)
|
||||
end
|
||||
|
||||
it "should respond with success" do
|
||||
xhr :delete, :destroy, id: relationship.id
|
||||
response.should be_success
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -10,8 +10,4 @@ FactoryGirl.define do
|
|||
end
|
||||
end
|
||||
|
||||
factory :micropost do
|
||||
content "Lorem ipsum"
|
||||
user
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,44 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Micropost do
|
||||
|
||||
let(:user) { FactoryGirl.create(:user) }
|
||||
before { @micropost = user.microposts.build(content: "Lorem ipsum") }
|
||||
|
||||
subject { @micropost }
|
||||
|
||||
it { should respond_to(:content) }
|
||||
it { should respond_to(:user_id) }
|
||||
it { should respond_to(:user) }
|
||||
its(:user) { should == user }
|
||||
|
||||
it { should be_valid }
|
||||
|
||||
describe "accessible attributes" do
|
||||
it "should not allow access to user_id" do
|
||||
expect do
|
||||
Micropost.new(user_id: user.id)
|
||||
end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)
|
||||
end
|
||||
end
|
||||
|
||||
describe "when user_id is not present" do
|
||||
before { @micropost.user_id = nil }
|
||||
it { should_not be_valid }
|
||||
end
|
||||
|
||||
describe "when user_id is not present" do
|
||||
before { @micropost.user_id = nil }
|
||||
it { should_not be_valid }
|
||||
end
|
||||
|
||||
describe "with blank content" do
|
||||
before { @micropost.content = " " }
|
||||
it { should_not be_valid }
|
||||
end
|
||||
|
||||
describe "with content that is too long" do
|
||||
before { @micropost.content = "a" * 141 }
|
||||
it { should_not be_valid }
|
||||
end
|
||||
end
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Relationship do
|
||||
|
||||
let(:follower) { FactoryGirl.create(:user) }
|
||||
let(:followed) { FactoryGirl.create(:user) }
|
||||
let(:relationship) { follower.relationships.build(followed_id: followed.id) }
|
||||
|
||||
subject { relationship }
|
||||
|
||||
it { should be_valid }
|
||||
|
||||
describe "accessible attributes" do
|
||||
it "should not allow access to follower_id" do
|
||||
expect do
|
||||
Relationship.new(follower_id: follower.id)
|
||||
end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)
|
||||
end
|
||||
end
|
||||
|
||||
describe "follower methods" do
|
||||
it { should respond_to(:follower) }
|
||||
it { should respond_to(:followed) }
|
||||
its(:follower) { should == follower }
|
||||
its(:followed) { should == followed }
|
||||
end
|
||||
|
||||
describe "when followed id is not present" do
|
||||
before { relationship.followed_id = nil }
|
||||
it { should_not be_valid }
|
||||
end
|
||||
|
||||
describe "when follower id is not present" do
|
||||
before { relationship.follower_id = nil }
|
||||
it { should_not be_valid }
|
||||
end
|
||||
end
|
||||
|
|
@ -1,214 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe User do
|
||||
|
||||
before do
|
||||
@user = User.new(name: "Example User", email: "user@example.com",
|
||||
password: "foobar", password_confirmation: "foobar")
|
||||
end
|
||||
|
||||
subject { @user }
|
||||
|
||||
it { should respond_to(:name) }
|
||||
it { should respond_to(:email) }
|
||||
it { should respond_to(:password_digest) }
|
||||
it { should respond_to(:password) }
|
||||
it { should respond_to(:password_confirmation) }
|
||||
it { should respond_to(:remember_token) }
|
||||
it { should respond_to(:admin) }
|
||||
it { should respond_to(:authenticate) }
|
||||
it { should respond_to(:microposts) }
|
||||
it { should respond_to(:feed) }
|
||||
it { should respond_to(:relationships) }
|
||||
it { should respond_to(:followed_users) }
|
||||
it { should respond_to(:reverse_relationships) }
|
||||
it { should respond_to(:followers) }
|
||||
it { should respond_to(:following?) }
|
||||
it { should respond_to(:follow!) }
|
||||
it { should respond_to(:unfollow!) }
|
||||
|
||||
it { should be_valid }
|
||||
it { should_not be_admin }
|
||||
|
||||
describe "accessible attributes" do
|
||||
it "should not allow access to admin" do
|
||||
expect do
|
||||
User.new(admin: true)
|
||||
end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)
|
||||
end
|
||||
end
|
||||
|
||||
describe "with admin attribute set to 'true'" do
|
||||
before do
|
||||
@user.save!
|
||||
@user.toggle!(:admin)
|
||||
end
|
||||
|
||||
it { should be_admin }
|
||||
end
|
||||
|
||||
describe "when name is not present" do
|
||||
before { @user.name = " " }
|
||||
it { should_not be_valid }
|
||||
end
|
||||
|
||||
describe "when email is not present" do
|
||||
before { @user.email = " " }
|
||||
it { should_not be_valid }
|
||||
end
|
||||
|
||||
describe "when name is too long" do
|
||||
before { @user.name = "a" * 51 }
|
||||
it { should_not be_valid }
|
||||
end
|
||||
|
||||
describe "when email format is invalid" do
|
||||
it "should be invalid" do
|
||||
addresses = %w[user@foo,com user_at_foo.org example.user@foo.]
|
||||
addresses.each do |invalid_address|
|
||||
@user.email = invalid_address
|
||||
@user.should_not be_valid
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "when email format is valid" do
|
||||
it "should be valid" do
|
||||
addresses = %w[user@foo.COM A_US-ER@f.b.org frst.lst@foo.jp a+b@baz.cn]
|
||||
addresses.each do |valid_address|
|
||||
@user.email = valid_address
|
||||
@user.should be_valid
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "when email address is already taken" do
|
||||
before do
|
||||
user_with_same_email = @user.dup
|
||||
user_with_same_email.email = @user.email.upcase
|
||||
user_with_same_email.save
|
||||
end
|
||||
|
||||
it { should_not be_valid }
|
||||
end
|
||||
|
||||
describe "email address with mixed case" do
|
||||
let(:mixed_case_email) { "Foo@ExAMPle.CoM" }
|
||||
|
||||
it "should be saved as all lower-case" do
|
||||
@user.email = mixed_case_email
|
||||
@user.save
|
||||
@user.reload.email.should == mixed_case_email.downcase
|
||||
end
|
||||
end
|
||||
|
||||
describe "when password is not present" do
|
||||
before { @user.password = @user.password_confirmation = " " }
|
||||
it { should_not be_valid }
|
||||
end
|
||||
|
||||
describe "when password doesn't match confirmation" do
|
||||
before { @user.password_confirmation = "mismatch" }
|
||||
it { should_not be_valid }
|
||||
end
|
||||
|
||||
describe "when password confirmation is nil" do
|
||||
before { @user.password_confirmation = nil }
|
||||
it { should_not be_valid }
|
||||
end
|
||||
|
||||
describe "with a password that's too short" do
|
||||
before { @user.password = @user.password_confirmation = "a" * 5 }
|
||||
it { should be_invalid }
|
||||
end
|
||||
|
||||
describe "return value of authenticate method" do
|
||||
before { @user.save }
|
||||
let(:found_user) { User.find_by_email(@user.email) }
|
||||
|
||||
describe "with valid password" do
|
||||
it { should == found_user.authenticate(@user.password) }
|
||||
end
|
||||
|
||||
describe "with invalid password" do
|
||||
let(:user_for_invalid_password) { found_user.authenticate("invalid") }
|
||||
|
||||
it { should_not == user_for_invalid_password }
|
||||
specify { user_for_invalid_password.should be_false }
|
||||
end
|
||||
end
|
||||
|
||||
describe "remember token" do
|
||||
before { @user.save }
|
||||
its(:remember_token) { should_not be_blank }
|
||||
end
|
||||
|
||||
|
||||
describe "micropost associations" do
|
||||
|
||||
before { @user.save }
|
||||
let!(:older_micropost) do
|
||||
FactoryGirl.create(:micropost, user: @user, created_at: 1.day.ago)
|
||||
end
|
||||
let!(:newer_micropost) do
|
||||
FactoryGirl.create(:micropost, user: @user, created_at: 1.hour.ago)
|
||||
end
|
||||
|
||||
it "should have the right microposts in the right order" do
|
||||
@user.microposts.should == [newer_micropost, older_micropost]
|
||||
end
|
||||
|
||||
it "should destroy associated microposts" do
|
||||
microposts = @user.microposts
|
||||
@user.destroy
|
||||
microposts.each do |micropost|
|
||||
Micropost.find_by_id(micropost.id).should be_nil
|
||||
end
|
||||
end
|
||||
|
||||
describe "status" do
|
||||
let(:unfollowed_post) do
|
||||
FactoryGirl.create(:micropost, user: FactoryGirl.create(:user))
|
||||
end
|
||||
|
||||
let(:followed_user) { FactoryGirl.create(:user) }
|
||||
|
||||
before do
|
||||
@user.follow!(followed_user)
|
||||
3.times { followed_user.microposts.create!(content: "Lorem ipsum") }
|
||||
end
|
||||
|
||||
its(:feed) { should include(newer_micropost) }
|
||||
its(:feed) { should include(older_micropost) }
|
||||
its(:feed) { should_not include(unfollowed_post) }
|
||||
its(:feed) do
|
||||
followed_user.microposts.each do |micropost|
|
||||
should include(micropost)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "following" do
|
||||
let(:other_user) { FactoryGirl.create(:user) }
|
||||
before do
|
||||
@user.save
|
||||
@user.follow!(other_user)
|
||||
end
|
||||
|
||||
it { should be_following(other_user) }
|
||||
its(:followed_users) { should include(other_user) }
|
||||
|
||||
describe "followed user" do
|
||||
subject { other_user }
|
||||
its(:followers) { should include(@user) }
|
||||
end
|
||||
|
||||
describe "and unfollowing" do
|
||||
before { @user.unfollow!(other_user) }
|
||||
|
||||
it { should_not be_following(other_user) }
|
||||
its(:followed_users) { should_not include(other_user) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe "Micropost pages" do
|
||||
|
||||
subject { page }
|
||||
|
||||
let(:user) { FactoryGirl.create(:user) }
|
||||
before { sign_in user }
|
||||
|
||||
describe "micropost creation" do
|
||||
before { visit root_path }
|
||||
|
||||
describe "with invalid information" do
|
||||
|
||||
it "should not create a micropost" do
|
||||
expect { click_button "Post" }.not_to change(Micropost, :count)
|
||||
end
|
||||
|
||||
describe "error messages" do
|
||||
before { click_button "Post" }
|
||||
it { should have_content('error') }
|
||||
end
|
||||
end
|
||||
|
||||
describe "with valid information" do
|
||||
|
||||
before { fill_in 'micropost_content', with: "Lorem ipsum" }
|
||||
it "should create a micropost" do
|
||||
expect { click_button "Post" }.to change(Micropost, :count).by(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "micropost destruction" do
|
||||
before { FactoryGirl.create(:micropost, user: user) }
|
||||
|
||||
describe "as correct user" do
|
||||
before { visit root_path }
|
||||
|
||||
it "should delete a micropost" do
|
||||
expect { click_link "delete" }.to change(Micropost, :count).by(-1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -14,28 +14,9 @@ describe "Static pages" do
|
|||
describe "for signed-in users" do
|
||||
let(:user) { FactoryGirl.create(:user) }
|
||||
before do
|
||||
FactoryGirl.create(:micropost, user: user, content: "Lorem ipsum")
|
||||
FactoryGirl.create(:micropost, user: user, content: "Dolor sit amet")
|
||||
sign_in user
|
||||
visit root_path
|
||||
end
|
||||
|
||||
it "should render the user's feed" do
|
||||
user.feed.each do |item|
|
||||
page.should have_selector("li##{item.id}", text: item.content)
|
||||
end
|
||||
end
|
||||
|
||||
describe "follower/following counts" do
|
||||
let(:other_user) { FactoryGirl.create(:user) }
|
||||
before do
|
||||
other_user.follow!(user)
|
||||
visit root_path
|
||||
end
|
||||
|
||||
it { should have_link("0 following", href: following_user_path(user)) }
|
||||
it { should have_link("1 followers", href: followers_user_path(user)) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -74,4 +55,4 @@ describe "Static pages" do
|
|||
click_link "sample app"
|
||||
page.should have_selector 'h1', text: 'Sample App'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -84,65 +84,6 @@ describe "User pages" do
|
|||
|
||||
it { should have_selector('h1', text: user.name) }
|
||||
it { should have_selector('title', text: user.name) }
|
||||
|
||||
describe "microposts" do
|
||||
it { should have_content(m1.content) }
|
||||
it { should have_content(m2.content) }
|
||||
it { should have_content(user.microposts.count) }
|
||||
end
|
||||
|
||||
it { should have_selector('h1', text: user.name) }
|
||||
it { should have_selector('title', text: user.name) }
|
||||
|
||||
describe "follow/unfollow buttons" do
|
||||
let(:other_user) { FactoryGirl.create(:user) }
|
||||
before { sign_in user }
|
||||
|
||||
describe "following a user" do
|
||||
before { visit user_path(other_user) }
|
||||
|
||||
it "should increment the followed user count" do
|
||||
expect do
|
||||
click_button "Follow"
|
||||
end.to change(user.followed_users, :count).by(1)
|
||||
end
|
||||
|
||||
it "should increment the other user's followers count" do
|
||||
expect do
|
||||
click_button "Follow"
|
||||
end.to change(other_user.followers, :count).by(1)
|
||||
end
|
||||
|
||||
describe "toggling the button" do
|
||||
before { click_button "Follow" }
|
||||
it { should have_selector('input', value: 'Unfollow') }
|
||||
end
|
||||
end
|
||||
|
||||
describe "unfollowing a user" do
|
||||
before do
|
||||
user.follow!(other_user)
|
||||
visit user_path(other_user)
|
||||
end
|
||||
|
||||
it "should decrement the followed user count" do
|
||||
expect do
|
||||
click_button "Unfollow"
|
||||
end.to change(user.followed_users, :count).by(-1)
|
||||
end
|
||||
|
||||
it "should decrement the other user's followers count" do
|
||||
expect do
|
||||
click_button "Unfollow"
|
||||
end.to change(other_user.followers, :count).by(-1)
|
||||
end
|
||||
|
||||
describe "toggling the button" do
|
||||
before { click_button "Unfollow" }
|
||||
it { should have_selector('input', value: 'Follow') }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "signup page" do
|
||||
|
|
@ -232,32 +173,4 @@ describe "User pages" do
|
|||
specify { user.reload.email.should == new_email }
|
||||
end
|
||||
end
|
||||
|
||||
describe "following/followers" do
|
||||
let(:user) { FactoryGirl.create(:user) }
|
||||
let(:other_user) { FactoryGirl.create(:user) }
|
||||
before { user.follow!(other_user) }
|
||||
|
||||
describe "followed users" do
|
||||
before do
|
||||
sign_in user
|
||||
visit following_user_path(user)
|
||||
end
|
||||
|
||||
it { should have_selector('title', text: full_title('Following')) }
|
||||
it { should have_selector('h3', text: 'Following') }
|
||||
it { should have_link(other_user.name, href: user_path(other_user)) }
|
||||
end
|
||||
|
||||
describe "followers" do
|
||||
before do
|
||||
sign_in other_user
|
||||
visit followers_user_path(other_user)
|
||||
end
|
||||
|
||||
it { should have_selector('title', text: full_title('Followers')) }
|
||||
it { should have_selector('h3', text: 'Followers') }
|
||||
it { should have_link(user.name, href: user_path(user)) }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,6 +3,14 @@ require 'spork'
|
|||
#uncomment the following line to use spork with the debugger
|
||||
#require 'spork/ext/ruby-debug'
|
||||
|
||||
require 'active_record'
|
||||
require 'jam_db'
|
||||
require 'spec_db'
|
||||
|
||||
# recreate test database and migrate it
|
||||
db_config = YAML::load(File.open('config/database.yml'))["test"]
|
||||
SpecDb::recreate_database(db_config)
|
||||
|
||||
Spork.prefork do
|
||||
# Loading more in this block will cause your tests to run faster. However,
|
||||
# if you change any configuration or code from libraries loaded here, you'll
|
||||
|
|
|
|||
Loading…
Reference in New Issue