spec/models/user_spec.rb (80 lines of code) (raw):
require "rails_helper"
RSpec.describe User do
before do
@user = build(:user, name: "Example User", email: "user@example.com", admin: false)
@michael = build(:user)
@archer = build(:user, name: "Sterling Archer", email: "duchess@example.gov", admin: false)
@lana = build(:user, name: "Lana Kane", email: "hands@example.gov", admin: false)
end
it "should be valid" do
expect(@user.valid?).to eq(true)
end
it "name should be present" do
@user.name = " "
expect(@user.valid?).to eq(false)
end
it "email should be present" do
@user.email = " "
expect(@user.valid?).to eq(false)
end
it("name should not be too long") do
@user.name = ("a" * 51)
expect(@user.valid?).to eq(false)
end
it("email should not be too long") do
@user.email = (("a" * 244) + "@example.com")
expect(@user.valid?).to eq(false)
end
it("email validation should accept valid addresses") do
valid_addresses = ["user@example.com", "USER@foo.COM", "A_US-ER@foo.bar.org", "first.last@foo.jp", "alice+bob@baz.cn"]
valid_addresses.each do |valid_address|
@user.email = valid_address
expect(@user.valid?).to eq(true)
end
end
it("email validation should reject invalid addresses") do
invalid_addresses = ["user@example,com", "user_at_foo.org", "user.name@example.", "foo@bar_baz.com", "foo@bar+baz.com"]
invalid_addresses.each do |invalid_address|
@user.email = invalid_address
expect(@user.valid?).to be false
end
end
it("email addresses should be unique") do
duplicate_user = @user.dup
@user.save
expect(duplicate_user.valid?).to eq(false)
end
it("password should be present (nonblank)") do
@user.password = @user.password_confirmation = (" " * 6)
expect(@user.valid?).to eq(false)
end
it("password should have a minimum length") do
@user.password = @user.password_confirmation = ("a" * 5)
expect(@user.valid?).to eq(false)
end
it("authenticated? should return false for a user with nil digest") do
expect(@user.authenticated?(:remember, "")).to eq(false)
end
it("associated microposts should be destroyed") do
@user.save
@user.microposts.create!(:content => "Lorem ipsum")
expect { @user.destroy }.to(change { Micropost.count }.by(-1))
end
it("should follow and unfollow a user") do
@michael.follow(@archer)
expect(@michael.following?(@archer)).to eq(true)
# expect(archer.followers.include?(michael)).to eq(true)
@michael.unfollow(@archer)
expect(@michael.following?(@archer)).to eq(false)
end
it("feed should have the right posts") do
@lana.microposts.each do |post_following|
expect(@michael.feed.include?(post_following)).to eq(true)
end
@michael.microposts.each do |post_self|
expect(@michael.feed.include?(post_self)).to eq(true)
end
@archer.microposts.each do |post_unfollowed|
assert_not(@michael.feed.include?(post_unfollowed))
end
end
end