docbrown/spec/requests/internal_users_spec.rb
2019-03-18 16:29:11 -04:00

80 lines
2.5 KiB
Ruby

require "rails_helper"
RSpec.describe "internal/users", type: :request do
let(:mentor) { create(:user) }
let(:mentee) { create(:user) }
let(:admin) { create(:user, :super_admin) }
before do
sign_in(admin)
mentor
mentee
end
describe "GETS /internal/users" do
it "renders to appropriate page" do
get "/internal/users"
expect(response.body).to include(mentor.username)
end
it "only displays mentors on ?state=mentors" do
get "/internal/users?state=mentors"
expect(response.body).not_to include(mentee.username)
end
it "only displays mentees on ?state=mentees" do
get "/internal/users?state=mentees"
expect(response.body).not_to include(mentor.username)
end
end
describe "GET /internal/users/:id" do
it "renders to appropriate page" do
get "/internal/users/#{mentor.id}"
expect(response.body).to include(mentor.username)
end
end
describe "PUT internal/users/:id" do
it "pairs mentor with a mentee" do
put "/internal/users/#{mentor.id}", params: { user: { add_mentee: mentee.id } }
expect(mentee.mentors[0].id).to eq(mentor.id)
end
it "pairs mentee with a mentor" do
put "/internal/users/#{mentee.id}", params: { user: { add_mentor: mentor.id } }
expect(mentor.mentees[0].id).to eq(mentee.id)
end
it "deactivates existing mentorships when user is banned" do
put "/internal/users/#{mentor.id}", params: { user: { add_mentee: mentee.id } }
patch "/internal/users/#{mentor.id}/user_status", params: { user: { toggle_mentorship: "1", mentorship_note: "banned from mentorship" } }
expect(MentorRelationship.where(mentor_id: mentor.id)[0].active).to eq(false)
expect(mentor.notes[0].reason).to eq("banned_from_mentorship")
end
end
describe "GET internal/users/:id/edit" do
it "redirects from /username/moderate" do
get "/#{mentor.username}/moderate"
expect(response).to redirect_to("/internal/users/#{mentor.id}")
end
it "shows banish button for new users" do
get "/internal/users/#{mentor.id}/edit"
expect(response.body).to include("Banish User for Spam!")
end
it "does not show banish button for non-admins" do
sign_out(admin)
expect { get "/internal/users/#{mentor.id}/edit" }.to raise_error(Pundit::NotAuthorizedError)
end
end
describe "PUT internal/users/:id/edit" do
it "bans user for spam" do
post "/internal/users/#{mentor.id}/banish"
expect(mentor.reload.username).to include("spam")
end
end
end