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/logins_controller_spec.rb

66 lines
1.4 KiB
Ruby

require 'rails_helper'
describe LoginsController do
describe "#new" do
subject { get :new }
it "renders 'new' template" do
should render_template('new')
end
end
describe "#create" do
subject { post :create, email: "foo@example.com" }
let(:login_service) { double(:login_service) }
before do
allow(controller).to receive(:login_service) { login_service }
allow(login_service).to receive(:login).with("foo@example.com") { login_success }
end
context "when login succeeds" do
let(:login_success) { true }
it "sets email_recipient in flash" do
subject
expect(flash[:email_recipient]).to eq("foo@example.com")
end
it "redirects to 'sent' page" do
should redirect_to(sent_login_path)
end
end
context "when login fails" do
let(:login_success) { false }
it "renders 'new' template" do
should render_template('new')
end
end
end
describe "#sent" do
subject { get :sent, {}, {}, { email_recipient: email_recipient } }
context "when email_recipient is set in flash" do
let(:email_recipient) { "foo@example.com" }
it "renders 'sent' template" do
should render_template('sent')
end
end
context "when email_recipient is not set in flash" do
let(:email_recipient) { nil }
it "redirects to login page" do
should redirect_to(new_login_path)
end
end
end
end