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

61 lines
1.3 KiB
Ruby

require 'rails_helper'
describe ApiTokensController do
describe '#create' do
subject { get :create, api_token: 'a-toh-can' }
let(:user) { double('user', assign_api_token: nil) }
before do
login_as(user)
end
context 'for guest user' do
let(:user) { nil }
before do
subject
end
it { should redirect_to(login_path) }
specify { expect(flash[:notice]).to match(/sign in to proceed/) }
end
context "when assigning succeeds" do
before do
allow(user).to receive(:assign_api_token).with('a-toh-can')
subject
end
it { should redirect_to(profile_path(user)) }
specify { expect(flash[:notice]).to_not be_blank }
end
context "when token is invalid" do
before do
allow(user).to receive(:assign_api_token).with('a-toh-can').
and_raise(ActiveRecord::RecordInvalid, ApiToken.new)
end
it 'displays error page' do
expect(subject).to render_template(:error)
end
end
context "when token is taken" do
before do
allow(user).to receive(:assign_api_token).with('a-toh-can').
and_raise(ApiToken::ApiTokenTakenError)
end
it 'displays error page' do
expect(subject).to render_template(:error)
end
end
end
end