Back to Repositories

Testing Application Routing and Request Handling in DevDocs

This comprehensive test suite validates the core functionality of the DevDocs application routing and request handling. It covers HTTP/HTTPS redirects, static page handling, documentation routing, and API endpoints using RSpec and Rack::Test.

Test Coverage Overview

The test suite provides extensive coverage of the application’s routing logic and request handling mechanisms.

  • HTTPS and security header validation
  • Static page routing and redirects
  • Documentation page handling and versioning
  • Asset file serving
  • Special route handling (feed, ping, shortcuts)

Implementation Analysis

The testing approach uses Minitest::Spec with Rack::Test for HTTP request simulation. It implements behavior-driven development patterns with nested describe blocks and focused test cases. The tests utilize session manipulation and cookie handling to verify complex routing scenarios.

Technical Details

  • Testing Framework: Minitest::Spec
  • HTTP Testing: Rack::Test
  • Environment Simulation: HTTPS, User-Agent headers
  • Cookie Management: Session state testing
  • Response Validation: Status codes, headers, redirects

Best Practices Demonstrated

The test suite exemplifies robust testing practices including isolation of test cases, comprehensive edge case coverage, and clear test organization. It demonstrates effective use of before hooks, helper methods, and consistent assertion patterns. The tests maintain high readability while covering complex routing logic.

freecodecamp/devdocs

test/app_test.rb

            
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="{"name":"HTML","slug":"html~4"'
    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="{"name":"HTML","slug":"html~5"'
    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
  end
end