spec/omniauth/strategies/cas_spec.rb in omniauth-cas-1.0.3 vs spec/omniauth/strategies/cas_spec.rb in omniauth-cas-1.0.4
- old
+ new
@@ -79,75 +79,87 @@
subject.headers['Location'].should == '/auth/failure?message=invalid_ticket&strategy=cas'
end
end
describe 'GET /auth/cas/callback with a valid ticket' do
- let(:return_url) { 'http://127.0.0.10/?some=parameter' }
+ shared_examples :successful_validation do
+ before do
+ stub_request(:get, /^http:\/\/cas.example.org:8080?\/serviceValidate\?([^&]+&)?ticket=593af/)
+ .with { |request| @request_uri = request.uri.to_s }
+ .to_return( body: File.read("spec/fixtures/#{xml_file_name}") )
- before do
- stub_request(:get, /^http:\/\/cas.example.org:8080?\/serviceValidate\?([^&]+&)?ticket=593af/)
- .with { |request| @request_uri = request.uri.to_s }
- .to_return( body: File.read('spec/fixtures/cas_success.xml') )
+ get "/auth/cas/callback?ticket=593af&url=#{return_url}"
+ end
- get "/auth/cas/callback?ticket=593af&url=#{return_url}"
- end
+ it 'should strip the ticket parameter from the callback URL' do
+ @request_uri.scan('ticket=').length.should == 1
+ end
- it 'should strip the ticket parameter from the callback URL' do
- @request_uri.scan('ticket=').length.should == 1
- end
+ it 'should properly encode the service URL' do
+ WebMock.should have_requested(:get, 'http://cas.example.org:8080/serviceValidate')
+ .with(query: {
+ ticket: '593af',
+ service: 'http://example.org/auth/cas/callback?url=' + Rack::Utils.escape('http://127.0.0.10/?some=parameter')
+ })
+ end
- it 'should properly encode the service URL' do
- WebMock.should have_requested(:get, 'http://cas.example.org:8080/serviceValidate')
- .with(query: {
- ticket: '593af',
- service: 'http://example.org/auth/cas/callback?url=' + Rack::Utils.escape('http://127.0.0.10/?some=parameter')
- })
- end
+ context "request.env['omniauth.auth']" do
+ subject { last_request.env['omniauth.auth'] }
- context "request.env['omniauth.auth']" do
- subject { last_request.env['omniauth.auth'] }
+ it { should be_kind_of Hash }
- it { should be_kind_of Hash }
+ its(:provider) { should == :cas }
- its(:provider) { should == :cas }
+ its(:uid) { should == '54'}
- its(:uid) { should == '54'}
+ context 'the info hash' do
+ subject { last_request.env['omniauth.auth']['info'] }
- context 'the info hash' do
- subject { last_request.env['omniauth.auth']['info'] }
+ it { should have(6).items }
- it { should have(6).items }
+ its(:name) { should == 'Peter Segel' }
+ its(:first_name) { should == 'Peter' }
+ its(:last_name) { should == 'Segel' }
+ its(:email) { should == 'psegel@intridea.com' }
+ its(:location) { should == 'Washington, D.C.' }
+ its(:image) { should == '/images/user.jpg' }
+ its(:phone) { should == '555-555-5555' }
+ end
- its(:name) { should == 'Peter Segel' }
- its(:first_name) { should == 'Peter' }
- its(:last_name) { should == 'Segel' }
- its(:email) { should == 'psegel@intridea.com' }
- its(:location) { should == 'Washington, D.C.' }
- its(:image) { should == '/images/user.jpg' }
- its(:phone) { should == '555-555-5555' }
- end
+ context 'the extra hash' do
+ subject { last_request.env['omniauth.auth']['extra'] }
- context 'the extra hash' do
- subject { last_request.env['omniauth.auth']['extra'] }
+ it { should have(3).items }
- it { should have(3).items }
+ its(:user) { should == 'psegel' }
+ its(:employeeid) { should == '54' }
+ its(:hire_date) { should == '2004-07-13' }
+ end
- its(:user) { should == 'psegel' }
- its(:employeeid) { should == '54' }
- its(:hire_date) { should == '2004-07-13' }
- end
+ context 'the credentials hash' do
+ subject { last_request.env['omniauth.auth']['credentials'] }
- context 'the credentials hash' do
- subject { last_request.env['omniauth.auth']['credentials'] }
+ it { should have(1).items }
- it { should have(1).items }
+ its(:ticket) { should == '593af' }
+ end
+ end
- its(:ticket) { should == '593af' }
+ it 'should call through to the master app' do
+ last_response.body.should == 'true'
end
end
- it 'should call through to the master app' do
- last_response.body.should == 'true'
+ let(:return_url) { 'http://127.0.0.10/?some=parameter' }
+
+ context 'with JASIG flavored XML' do
+ let(:xml_file_name) { 'cas_success_jasig.xml' }
+ it_behaves_like :successful_validation
+ end
+
+ context 'with classic XML' do
+ let(:xml_file_name) { 'cas_success.xml' }
+ it_behaves_like :successful_validation
end
end
end