From eeb516a1108fdea48371748d9c428854b4e393d0 Mon Sep 17 00:00:00 2001 From: kaiji <762907794@qq.com> Date: Thu, 10 Dec 2020 16:30:38 +0800 Subject: [PATCH 1/3] fix controller test --- spec/factories/relationship.rb | 4 +++ spec/factories/users.rb | 17 +++++++--- spec/requests/users_spec.rb | 58 ++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 spec/factories/relationship.rb diff --git a/spec/factories/relationship.rb b/spec/factories/relationship.rb new file mode 100644 index 000000000..ebe79559e --- /dev/null +++ b/spec/factories/relationship.rb @@ -0,0 +1,4 @@ +FactoryBot.define do + factory :relationship do + end +end \ No newline at end of file diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 4cf7dcad1..4e46c5364 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -1,7 +1,16 @@ FactoryBot.define do - factory :user do - name { Faker::Name.name } - email { Faker::Internet.email } - password { 'password' } + FactoryBot.define do + factory :user, class: User do + name { Faker::Name.name } + email { Faker::Internet.email } + 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 end diff --git a/spec/requests/users_spec.rb b/spec/requests/users_spec.rb index 868cb1c55..a8bda5399 100644 --- a/spec/requests/users_spec.rb +++ b/spec/requests/users_spec.rb @@ -66,4 +66,62 @@ end end end + + describe "#show" do + context 'when user is signned in' do + before do + @user = create(:test_user) + sign_in_as(@user) + end + + subject { get user_path(id: @user.id) } + + it "retunrs a 200 response" do + subject + expect(response).to have_http_status(200) + end + + it 'render show template' do + expect(subject).to render_template(:show) + end + end + end + + describe "#create" do + let(:user_params) { attributes_for(:test_user) } + + it "should save user" do + post users_path, params: { user: user_params } + expect(response).to redirect_to root_url + end + + it "should 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 'should 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 'should 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 From b7de63c165758b66b3bb152f536150c5ba71b9ae Mon Sep 17 00:00:00 2001 From: kaiji <762907794@qq.com> Date: Thu, 10 Dec 2020 16:59:08 +0800 Subject: [PATCH 2/3] add model test --- spec/factories/microposts.rb | 5 +++++ spec/models/user_spec.rb | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 spec/factories/microposts.rb diff --git a/spec/factories/microposts.rb b/spec/factories/microposts.rb new file mode 100644 index 000000000..976a9d4b9 --- /dev/null +++ b/spec/factories/microposts.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :micropost do + user + end +end \ No newline at end of file diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index dcd1199f8..0720bbb02 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -18,4 +18,25 @@ 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 end From 7cec0fd3da86eb2499ffd643214f60a972172431 Mon Sep 17 00:00:00 2001 From: kaiji <762907794@qq.com> Date: Sat, 12 Dec 2020 15:27:44 +0800 Subject: [PATCH 3/3] add model test --- spec/factories/users.rb | 24 ++++++------ spec/models/user_spec.rb | 12 +++++- spec/requests/users_spec.rb | 76 ++++++++++++++++++------------------- 3 files changed, 60 insertions(+), 52 deletions(-) diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 4e46c5364..fb38cd980 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -1,16 +1,14 @@ FactoryBot.define do - FactoryBot.define do - factory :user, class: User do - name { Faker::Name.name } - email { Faker::Internet.email } - 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 + factory :user, class: User do + name { Faker::Name.name } + email { Faker::Internet.email } + 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 diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 0720bbb02..3cccc6d45 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -14,7 +14,7 @@ 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 @@ -29,6 +29,7 @@ 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") @@ -39,4 +40,13 @@ 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 diff --git a/spec/requests/users_spec.rb b/spec/requests/users_spec.rb index a8bda5399..1254eff74 100644 --- a/spec/requests/users_spec.rb +++ b/spec/requests/users_spec.rb @@ -1,122 +1,122 @@ -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 + context "when user is signned in" do + subject { get user_path(id: user.id) } + + let(:user) { create(:test_user) } + before do - @user = create(:test_user) - sign_in_as(@user) + sign_in_as(user) end - - subject { get user_path(id: @user.id) } it "retunrs a 200 response" do - subject - expect(response).to have_http_status(200) + expect(response).to have_http_status(:ok) end - it 'render show template' do - expect(subject).to render_template(:show) + 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 "should save user" do - post users_path, params: { user: user_params } - expect(response).to redirect_to root_url - end + let(:user_params) { attributes_for(:test_user) } - it "should render new" do - post users_path, params: { user: {name: 'test'} } - expect(response).to render_template :new - end + 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 + describe "#destroy" do let(:admin) { create(:test_user, admin: true) } let(:user) { create(:test_user) } - - it 'should return success' do + + it "return success" do sign_in_as(admin) delete user_path(user) expect(response).to redirect_to users_url end end - describe '#following' do + 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 'should return success' do + + it "return success" do user = users.first sign_in_as(user) get following_user_path(user)