You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
asciinema.org/spec/controllers/sessions_controller_spec.rb

92 lines
1.9 KiB
Ruby

require 'rails_helper'
describe SessionsController do
describe "#new" do
subject { get :new, token: 'the-to-ken' }
before do
subject
end
it "displays button" do
should render_template('new')
end
end
describe "#create" do
subject { post :create, token: 'the-to-ken' }
let(:login_service) { double(:login_service) }
before do
allow(controller).to receive(:login_service) { login_service }
allow(login_service).to receive(:validate).with('the-to-ken') { user }
end
context "when token is successfully validated" do
let(:user) { stub_model(User) }
before do
allow(controller).to receive(:current_user=)
subject
end
it "sets the current_user" do
expect(controller).to have_received(:current_user=).with(user)
end
it "sets a notice" do
expect(flash[:notice]).to_not be_blank
end
context "when user has username" do
let(:user) { User.new(username: "foobar") }
it "redirects to user's profile" do
should redirect_to(public_profile_path(username: "foobar"))
end
end
context "when user has no username" do
let(:user) { User.new }
it "redirects to new username page" do
should redirect_to(new_username_path)
end
end
end
context "when token is not validated" do
let(:user) { nil }
before do
subject
end
it "displays error" do
should render_template('error')
end
end
end
describe "#destroy" do
before do
allow(controller).to receive(:current_user=)
get :destroy
end
it "sets current_user to nil" do
expect(controller).to have_received(:current_user=).with(nil)
end
it "redirects to root_path with a notice" do
expect(flash[:notice]).to_not be_blank
should redirect_to(root_path)
end
end
end