284 lines · 8.3 KB · Ruby
RawDownload
require 'test_helper'require 'rack/test'require 'app' class AppTest < Minitest::Spec  include Rack::Test::Methods   MODERN_BROWSER = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0'   def app    App  end   before do    current_session.env('HTTPS', 'on')  end   it 'redirects to HTTPS' do    get 'http://example.com/test?q=1', {}, 'HTTPS' => 'off'    assert last_response.redirect?    assert_equal 'https://example.com/test?q=1', last_response['Location']  end   it 'returns HSTS header' do    get 'https://example.com/test'    assert_equal 'max-age=31536000; includeSubDomains', last_response['Strict-Transport-Security']  end   describe "/" do    it "works" do      get '/'      assert last_response.ok?    end     it "redirects to /#q= when there is a 'q' query param" do      get '/search', q: 'foo'      assert last_response.redirect?      assert_equal 'https://example.org/#q=foo', last_response['Location']    end     it "redirects without the query string" do      get '/', foo: 'bar'      assert last_response.redirect?      assert_equal 'https://example.org/', last_response['Location']    end  end   describe "/[static-page]" do    it "redirects to /#/[static-page] by default" do      %w(offline about news help).each do |page|        get "/#{page}", {}, 'HTTP_USER_AGENT' => MODERN_BROWSER        assert last_response.redirect?        assert_equal "https://example.org/#/#{page}", last_response['Location']      end    end     it "redirects via JS cookie when a cookie exists" do      %w(offline about news help).each do |page|        set_cookie('foo=bar')        get "/#{page}", {}, 'HTTP_USER_AGENT' => MODERN_BROWSER        assert last_response.redirect?        assert_equal 'https://example.org/', last_response['Location']        assert last_response['Set-Cookie'].start_with?("initial_path=%2F#{page}; path=/; expires=")      end    end  end   describe "/search" do    it "redirects to /#q=" do      get '/search'      assert last_response.redirect?      assert_equal 'https://example.org/#q=', last_response['Location']       get '/search', q: 'foo'      assert last_response.redirect?      assert_equal 'https://example.org/#q=foo', last_response['Location']    end  end   describe "/[doc]" do    it "renders when the doc exists and isn't enabled" do      set_cookie('docs=html~5')      get '/html~4/', {}, 'HTTP_USER_AGENT' => MODERN_BROWSER      assert last_response.ok?    end     it "renders when the doc exists, is a default doc, and all docs are enabled" do      set_cookie('docs=')      get '/css/', {}, 'HTTP_USER_AGENT' => MODERN_BROWSER      assert last_response.ok?    end     it "redirects via JS cookie when the doc exists and is enabled" do      set_cookie('docs=html~5')      get '/html~5/', {}, 'HTTP_USER_AGENT' => MODERN_BROWSER      assert last_response.redirect?      assert_equal 'https://example.org/', last_response['Location']      assert last_response['Set-Cookie'].start_with?("initial_path=%2Fhtml%7E5%2F; path=/; expires=")    end     it "renders when the doc exists, has no version in the path, and isn't enabled" do      get '/html/', {}, 'HTTP_USER_AGENT' => MODERN_BROWSER      assert last_response.ok?    end     it "redirects via JS cookie when the doc exists, has no version in the path, and a version is enabled" do      set_cookie('docs=html~5')      get '/html/', {}, 'HTTP_USER_AGENT' => MODERN_BROWSER      assert last_response.redirect?      assert_equal 'https://example.org/', last_response['Location']      assert last_response['Set-Cookie'].start_with?("initial_path=%2Fhtml%2F; path=/; expires=")    end     it "renders when the doc exists and is enabled, and the request is from Googlebot" do      set_cookie('docs=html')      get '/html/', {}, 'HTTP_USER_AGENT' => 'Mozilla/5.0 (compatible; Googlebot/2.1; +https://www.google.com/bot.html)'      assert last_response.ok?    end     it "returns 404 when the doc doesn't exist" do      get '/html~6/'      assert last_response.not_found?    end     it "decodes '~' properly" do      get '/html%7E5/'      assert last_response.ok?       get '/html%7E42/'      assert last_response.not_found?    end     it "redirects with trailing slash" do      get '/html'      assert last_response.redirect?      assert_equal 'https://example.org/html/', last_response['Location']       get '/html', bar: 'baz'      assert last_response.redirect?      assert_equal 'https://example.org/html/?bar=baz', last_response['Location']    end     it "redirects old docs" do      get '/iojs/'      assert last_response.redirect?      assert_equal 'https://example.org/node/', last_response['Location']    end  end   describe "/[doc]-[type]" do    it "works when the doc exists" do      get '/html~4-foo-bar_42/'      assert last_response.ok?      assert_includes last_response.body, 'data-doc="{&quot;name&quot;:&quot;HTML&quot;,&quot;slug&quot;:&quot;html~4&quot;'    end     it "works when the doc has no version in the path and a version exists" do      get '/html-foo-bar_42/'      assert last_response.ok?      assert_includes last_response.body, 'data-doc="{&quot;name&quot;:&quot;HTML&quot;,&quot;slug&quot;:&quot;html~5&quot;'    end     it "returns 404 when the type is blank" do      get '/css-/'      assert last_response.not_found?    end     it "returns 404 when the type is not alpha-numeric" do      get '/css-foo:bar/'      assert last_response.not_found?    end     it "returns 404 when the doc doesn't exist" do      get '/html~6-bar/'      assert last_response.not_found?    end     it "redirects with trailing slash" do      get '/css-foo'      assert last_response.redirect?      assert_equal 'https://example.org/css-foo/', last_response['Location']       get '/css-foo', bar: 'baz'      assert last_response.redirect?      assert_equal 'https://example.org/css-foo/?bar=baz', last_response['Location']    end     it "redirects old docs" do      get '/yii1-foo/'      assert last_response.redirect?      assert_equal 'https://example.org/yii~1.1-foo/', last_response['Location']    end  end   describe "/[doc+type]/[path]" do    it "works when the doc exists" do      get '/css/foo'      assert last_response.ok?       get '/css-bar/foo'      assert last_response.ok?    end     it "returns 404 when the doc doesn't exist" do      get '/foo/bar'      assert last_response.not_found?    end     it "redirects without trailing slash" do      get '/css/foo/'      assert last_response.redirect?      assert_equal 'https://example.org/css/foo', last_response['Location']       get '/css/foo/', bar: 'baz'      assert last_response.redirect?      assert_equal 'https://example.org/css/foo?bar=baz', last_response['Location']    end     it "redirects old docs" do      get '/python2/foo'      assert last_response.redirect?      assert_equal 'https://example.org/python~2.7/foo', last_response['Location']    end  end   describe "/docs.json" do    it "returns to the asset path" do      get '/docs.json'      assert last_response.redirect?      assert_equal 'https://example.org/assets/docs.json', last_response['Location']    end  end   describe "/application.js" do    it "returns to the asset path" do      get '/application.js'      assert last_response.redirect?      assert_equal 'https://example.org/assets/application.js', last_response['Location']    end  end   describe "/application.css" do    it "returns to the asset path" do      get '/application.css'      assert last_response.redirect?      assert_equal 'https://example.org/assets/application.css', last_response['Location']    end  end   describe "/feed" do    it "returns an atom feed" do      get '/feed'      assert last_response.ok?      assert_equal 'application/atom+xml', last_response['Content-Type']       get '/feed.atom'      assert last_response.ok?      assert_equal 'application/atom+xml', last_response['Content-Type']    end  end   describe "/s/[link]" do    it "redirects" do      %w(maxcdn shopify code-school jetbrains tw fb re).each do |link|        get "/s/#{link}"        assert last_response.redirect?      end    end  end   describe "/ping" do    it "works" do      get '/ping'      assert last_response.ok?    end  end   describe "404" do    it "works" do      get '/foo'      assert last_response.not_found?    end  endend