Sha256: f0f93917934635c864aae084a20745d44741fa4c89080f84a560b372069bc25b

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

# frozen_string_literal: true

require_relative "helper"

class RoutingTest < Minitest::Test
  def setup
    @app = Class.new(Tynn)
  end

  def test_raise_if_not_handler
    assert_raises { @app.call({}) }
  end

  def test_path_matching
    @app.define do
      on "hello" do
        res.write("hello")
      end
    end

    ts = Tynn::Test.new(@app)
    ts.get("/")

    assert_equal 404, ts.res.status

    ts.get("/hello")

    assert_equal 200, ts.res.status
    assert_equal "hello", ts.res.body
  end

  def test_http_methods
    methods = %i(get post put patch delete head options)

    methods.each do |method|
      @app.define do
        send(method) { res.write(method) }
      end

      ts = Tynn::Test.new(@app)
      ts.send(method, "/")

      assert_equal 200, ts.res.status
      assert_equal method.to_s, ts.res.body
    end
  end

  def test_capturing_path
    @app.define do
      on(:foo) do |foo|
        on(:bar) do |bar|
          res.write(sprintf("%s/%s", foo, bar))
        end
      end
    end

    ts = Tynn::Test.new(@app)
    ts.get("/john/doe")

    assert_equal 200, ts.res.status
    assert_equal "john/doe", ts.res.body
  end

  def test_composition
    foo = Class.new(@app)

    @app.define do
      on("foo") do
        run(foo, foo: 42)
      end
    end

    foo.define do
      get do
        res.write(inbox[:foo])
      end
    end

    ts = Tynn::Test.new(@app)
    ts.get("/foo")

    assert_equal 200, ts.res.status
    assert_equal "42", ts.res.body
  end

  def test_request_class
    @app.define do
      get do
        res.write(req.class.name)
      end
    end

    ts = Tynn::Test.new(@app)
    ts.get("/")

    assert_equal Tynn::Request.name, ts.res.body
  end

  def test_response_class
    @app.define do
      get do
        res.write(res.class.name)
      end
    end

    ts = Tynn::Test.new(@app)
    ts.get("/")

    assert_equal Tynn::Response.name, ts.res.body
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tynn-2.0.0.alpha test/routing_test.rb