Sha256: f2dc48eb02b08a8ee6b71205d4b0ddca0bc41ef65ca85db80bb538faa3927188

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 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 fail
    raise CustomError, 'Expected error'
  end

  rescue_from CustomError 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'
    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 exception' do
    action = TestController.action :fail
    env = Rack::MockRequest.env_for '/fail'
    status, headers, response = action.call env

    status.must_equal 500
    response.body.must_equal ['Expected 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

2 entries across 2 versions & 1 rubygems

Version Path
rasti-web-0.0.2 spec/controller_spec.rb
rasti-web-0.0.1 spec/controller_spec.rb