Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions spec/factories/microposts.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
FactoryBot.define do
factory :micropost do
user
end
end
4 changes: 4 additions & 0 deletions spec/factories/relationship.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
FactoryBot.define do
factory :relationship do
end
end
13 changes: 10 additions & 3 deletions spec/factories/users.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
FactoryBot.define do
factory :user do
name { Faker::Name.name }
factory :user, class: User do
name { Faker::Name.name }
email { Faker::Internet.email }
password { 'password' }
password { "password" }
end
factory :test_user, class: User do
name { Faker::Name.name }
email { Faker::Internet.email }
password { "password" }
activated { true }
activated_at { Time.zone.now }
end
end
33 changes: 32 additions & 1 deletion spec/models/user_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,39 @@
end

describe 'validations' do
it { is_expected.to validate_presence_of(:name)}
it { is_expected.to validate_presence_of(:name) }
it { is_expected.to validate_presence_of(:email) }
it { is_expected.to validate_presence_of(:password) }
end

describe '#feed' do
let(:user) { create(:user) }

it 'return []' do
expect(user.feed.any?).to equal(false)
end

context "when user have micopost" do
let(:user) { create(:user) }
let(:followed_user) { create(:user) }

before do
create(:relationship, follower_id: user.id, followed_id: followed_user.id)
create(:micropost, user_id: user.id, content: "test")
end

it 'get feed' do
expect(user.feed.any?).to eq true
end
end
end

describe '#send_password_reset_email' do
let(:user) { described_class.new(email: Faker::Internet.email, password: SecureRandom.hex(6), name: Faker::Name.name) }

it 'save success' do
allow(UserMailer).to receive_message_chain(:password_reset, :deliver_now)
expect(user.save).to be true
end
end
end
84 changes: 71 additions & 13 deletions spec/requests/users_spec.rb
Original file line number Diff line number Diff line change
@@ -1,69 +1,127 @@
require 'rails_helper'
require "rails_helper"

RSpec.describe "Users", type: :request do
describe "#index" do
context 'when user is signned in' do
context "when user is signned in" do
subject(:visit_users) { get users_path }

let(:user) { create(:user, activated: true, activated_at: Time.zone.now) }

it 'retunrs a 200 response' do
it "retunrs a 200 response" do
sign_in_as(user)
visit_users
expect(response).to have_http_status(:ok)
end

it 'render index template' do
it "render index template" do
sign_in_as(user)
expect(visit_users).to render_template(:index)
end
end

context 'when user is not signned in' do
context "when user is not signned in" do
subject(:visit_users) { get users_path }

it 'retunrs a 302 response' do
it "retunrs a 302 response" do
visit_users
expect(response).to have_http_status(:found)
end

it 'render index template' do
it "render index template" do
expect(visit_users).to redirect_to(login_url)
end
end
end

describe "#edit" do
context 'when user is signned in' do
context "when user is signned in" do
subject(:visit_edit_user_page) { get edit_user_path(user) }

let(:user) { create(:user, activated: true, activated_at: Time.zone.now) }

it 'retunrs a 200 response' do
it "retunrs a 200 response" do
sign_in_as(user)
visit_edit_user_page
expect(response).to have_http_status(:ok)
end

it 'render edit template' do
it "render edit template" do
sign_in_as(user)
expect(visit_edit_user_page).to render_template(:edit)
end
end

context 'when user is not signned in' do
context "when user is not signned in" do
subject(:visit_edit_user_page) { get edit_user_path(user) }

let(:user) { create(:user, activated: true, activated_at: Time.zone.now) }

it 'returns a 302 response' do
it "returns a 302 response" do
visit_edit_user_page
expect(response).to have_http_status(:found)
end

it 'render index template' do
it "render index template" do
expect(visit_edit_user_page).to redirect_to(login_url)
end
end
end

describe "#show" do
context "when user is signned in" do
subject { get user_path(id: user.id) }

let(:user) { create(:test_user) }

before do
sign_in_as(user)
end

it "retunrs a 200 response" do
expect(response).to have_http_status(:ok)
end

it "render show template" do
expect(response).to render_template(:show)
end
end
end

describe "#create" do
let(:user_params) { attributes_for(:test_user) }

it "save user" do
post users_path, params: { user: user_params }
expect(response).to redirect_to root_url
end

it "render new" do
post users_path, params: { user: { name: "test" } }
expect(response).to render_template :new
end
end

describe "#destroy" do
let(:admin) { create(:test_user, admin: true) }
let(:user) { create(:test_user) }

it "return success" do
sign_in_as(admin)
delete user_path(user)
expect(response).to redirect_to users_url
end
end

describe "#following" do
let(:users) { create_list(:test_user, 2) }
let(:relationship) { create(:relationship, follower_id: users.first.id, followed_id: users.last.id) }

it "return success" do
user = users.first
sign_in_as(user)
get following_user_path(user)
expect(assigns(:users).any?).to eq true
expect(response).to render_template :show_follow
end
end
end