1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
# frozen_string_literal: true
require 'spec_helper'
require 'rack/test'
describe OmniAuth::MultiPassword::Base do # rubocop:disable RSpec/FilePath
subject { strategy }
let(:app) { instance_double(Proc) }
let(:strategy) do
OmniAuth::Strategies::OneTest.new(app, *args, &block)
end
let(:args) { [] }
let(:block) { nil }
describe '#username_id' do
subject(:username_id) { strategy.username_id }
it 'defaults to :username' do
expect(username_id).to eq :username
end
context 'when configured' do
let(:args) { [{fields: %i[user pass]}] }
it { is_expected.to eq :user }
end
end
describe '#password_id' do
subject(:password_id) { strategy.password_id }
it 'defaults to :password' do
expect(password_id).to eq :password
end
context 'when configured' do
let(:args) { [{fields: %i[user pass]}] }
it { is_expected.to eq :pass }
end
end
describe 'single strategy' do
include Rack::Test::Methods
let(:app) do
Rack::Builder.new do
use OmniAuth::Test::PhonySession
use OmniAuth::Strategies::OneTest
run ->(env) { [404, {'Content-Type' => 'text/plain'}, [env.key?('omniauth.auth').to_s]] }
end.to_app
end
it 'shows login FORM' do
get '/auth/onetest'
expect(last_response.body).to include '<form'
end
it 'redirect on wrong password' do
post '/auth/onetest/callback', username: 'john', password: 'wrong'
expect(last_response).to be_redirect
expect(last_response.headers['Location']).to eq '/auth/failure?message=invalid_credentials&strategy=onetest'
end
it 'authenticates john with correct password' do
post '/auth/onetest/callback', username: 'john', password: 'secret'
expect(last_response.body).to eq 'true'
end
end
end
|