Sha256: 0e7c84b6d285b9354ad2fca1156398b597bd3f1b88c36357a010b273f6a7437e

Contents?: true

Size: 1.82 KB

Versions: 1

Compression:

Stored size: 1.82 KB

Contents

require 'minitest_helper'

class TestController < Rasti::Web::Controller
  CustomError = Class.new StandardError
  
  def test
    render.html 'Test HTML'
  end

  def exception
    raise 'Unexpected error'
  end

  def explicit_fail
    raise CustomError, 'Explicit error'
  end

  def implicit_fail
    raise EOFError, 'Implicit error'
  end

  rescue_from CustomError do |ex|
    render.status 500, ex.message
  end

  rescue_from IOError do |ex|
    render.status 500, ex.message
  end

end

describe Rasti::Web::Controller do
  
  it 'Action endpoint' do
    action = TestController.action :test
    env = Rack::MockRequest.env_for '/test'
    status, headers, response = action.call env

    action.must_be_instance_of Rasti::Web::Endpoint
    status.must_equal 200
    headers['Content-Type'].must_equal 'text/html; charset=utf-8'
    response.body.must_equal ['Test HTML']
  end

  it 'Invalid action' do
    error = proc { TestController.action :invalid }.must_raise RuntimeError
    error.message.must_equal "Undefined action 'invalid' in TestController"
  end

  it 'Rescue explicit exception' do
    action = TestController.action :explicit_fail
    env = Rack::MockRequest.env_for '/explicit_fail'
    status, headers, response = action.call env

    status.must_equal 500
    response.body.must_equal ['Explicit error']
  end

  it 'Rescue implicit exception' do
    action = TestController.action :implicit_fail
    env = Rack::MockRequest.env_for '/implicit_fail'
    status, headers, response = action.call env

    status.must_equal 500
    response.body.must_equal ['Implicit error']
  end

  it 'Unexpected exception' do
    action = TestController.action :exception
    env = Rack::MockRequest.env_for '/exception'
    
    error = proc { action.call env }.must_raise RuntimeError
    error.message.must_equal 'Unexpected error'
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rasti-web-1.1.0 spec/controller_spec.rb