spec/omniauth/strategies/cas_spec.rb in omniauth-cas-0.0.7 vs spec/omniauth/strategies/cas_spec.rb in omniauth-cas-1.0.0

- old
+ new

@@ -1,148 +1,146 @@ -require File.expand_path( 'spec/spec_helper' ) - -describe OmniAuth::Strategies::CAS, :type => :strategy do +describe OmniAuth::Strategies::CAS, type: :strategy do include Rack::Test::Methods class MyCasProvider < OmniAuth::Strategies::CAS; end # TODO: Not really needed. just an alias but it requires the :name option which might confuse users... def app Rack::Builder.new { use OmniAuth::Test::PhonySession - use MyCasProvider, :name => :cas, :host => 'cas.example.org', :uid_key => :employeeid + use MyCasProvider, name: :cas, host: 'cas.example.org', uid_key: :employeeid run lambda { |env| [404, {'Content-Type' => 'text/plain'}, [env.key?('omniauth.auth').to_s]] } }.to_app end # TODO: Verify that these are even useful tests - shared_examples_for "a CAS redirect response" do - let(:redirect_params) { "service=" + Rack::Utils.escape("http://example.org/auth/cas/callback?url=#{Rack::Utils.escape(return_url)}") } - before do - get url, nil, request_env - end + shared_examples_for 'a CAS redirect response' do + let(:redirect_params) { 'service=' + Rack::Utils.escape("http://example.org/auth/cas/callback?url=#{Rack::Utils.escape(return_url)}") } + + before { get url, nil, request_env } + subject { last_response } + it { should be_redirect } - it "should redirect to the CAS server" do - subject.headers['Location'].should == "https://cas.example.org/login?" + redirect_params + + it 'should redirect to the CAS server' do + subject.headers['Location'].should == 'https://cas.example.org/login?' + redirect_params end end describe 'GET /auth/cas' do let(:return_url) { 'http://myapp.com/admin/foo' } - context "with a referer" do + context 'with a referer' do let(:url) { '/auth/cas' } + let(:request_env) { { 'HTTP_REFERER' => return_url } } - it_behaves_like "a CAS redirect response" + + it_behaves_like 'a CAS redirect response' end - context "with an explicit return URL" do + + context 'with an explicit return URL' do let(:url) { "/auth/cas?url=#{return_url}" } + let(:request_env) { {} } - it_behaves_like "a CAS redirect response" + it_behaves_like 'a CAS redirect response' end end describe 'GET /auth/cas/callback without a ticket' do - before do - get '/auth/cas/callback' - end + before { get '/auth/cas/callback' } subject { last_response } it { should be_redirect } - it "should have a failure message" do - subject.headers['Location'].should == "/auth/failure?message=no_ticket&strategy=cas" + + it 'should have a failure message' do + subject.headers['Location'].should == '/auth/failure?message=no_ticket&strategy=cas' end end describe 'GET /auth/cas/callback with an invalid ticket' do before do stub_request(:get, /^https:\/\/cas.example.org(:443)?\/serviceValidate\?([^&]+&)?ticket=9391d/). - to_return( :body => File.read('spec/fixtures/cas_failure.xml') ) + to_return( body: File.read('spec/fixtures/cas_failure.xml') ) get '/auth/cas/callback?ticket=9391d' end subject { last_response } it { should be_redirect } + it 'should have a failure message' do - subject.headers['Location'].should == "/auth/failure?message=invalid_ticket&strategy=cas" + 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" } + let(:return_url) { 'http://127.0.0.10/?some=parameter' } + before do - stub_request(:get, /^https:\/\/cas.example.org(:443)?\/serviceValidate\?([^&]+&)?ticket=593af/). - with { |request| @request_uri = request.uri.to_s }. - to_return( :body => File.read('spec/fixtures/cas_success.xml') ) + stub_request(:get, /^https:\/\/cas.example.org(:443)?\/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 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, "https://cas.example.org/serviceValidate") - .with(:query => { - :ticket => "593af", - :service => "http://example.org/auth/cas/callback?url=" + Rack::Utils.escape("http://127.0.0.10/?some=parameter") + it 'should properly encode the service URL' do + WebMock.should have_requested(:get, 'https://cas.example.org/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'] } + it { should be_kind_of Hash } + its(:provider) { should == :cas } + its(:uid) { should == '54'} - context "the info hash" do + context 'the info hash' do subject { last_request.env['omniauth.auth']['info'] } + 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' } + + 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 + + context 'the extra hash' do subject { last_request.env['omniauth.auth']['extra'] } + it { should have(3).items } - its('user') { should == 'psegel' } - its('employeeid') { should == '54' } - its('hire_date') { should == '2004-07-13' } + + its(:user) { should == 'psegel' } + its(:employeeid) { should == '54' } + its(:hire_date) { should == '2004-07-13' } end - context "the credentials hash" do + + context 'the credentials hash' do subject { last_request.env['omniauth.auth']['credentials'] } + it { should have(1).items } - its('ticket') { should == '593af' } + + its(:ticket) { should == '593af' } end end it 'should call through to the master app' do last_response.body.should == 'true' end end - # unless RUBY_VERSION =~ /^1\.8\.\d$/ - # describe 'GET /auth/cas/callback with a valid ticket and gzipped response from the server on ruby >1.8' do - # before do - # zipped = StringIO.new - # Zlib::GzipWriter.wrap zipped do |io| - # io.write File.read(File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cas_success.xml')) - # end - # stub_request(:get, /^https:\/\/cas.example.org(:443)?\/serviceValidate\?([^&]+&)?ticket=593af/). - # with { |request| @request_uri = request.uri.to_s }. - # to_return(:body => zipped.string, :headers => { 'content-encoding' => 'gzip' }) - # get '/auth/cas/callback?ticket=593af' - # end - # - # it 'should call through to the master app when response is gzipped' do - # last_response.body.should == 'true' - # end - # end - # end end \ No newline at end of file