disu.se

Lookout-Rack

Lookout-Rack provides easy interaction with Rack from Lookout. It provides you with a session connected to your Rack application through which you can make requests, check responses, follow redirects and set, inspect, and clear cookies.

Installation

Install Lookout-Rack with

% gem install lookout-rack

Usage

Include the following code in your Rakefile (provided that you’re using Lookout-Rake):

require 'lookout-rack-3.0'

Lookout::Rake::Tasks::Test.new do |t|
  t.requires << 'lookout-rack-3.0'
end

Then set up a fixtures/config.ru file that Lookout-Rack will use for loading your Rack app.

load 'path/to/app.rb'
use Rack::Lint
run Path::To::App

This file, if it exists, will be loaded during the first call to #session. If it doesn’t exist, config.ru will be used instead.

You can now test your app:

Expectations do
  expect 200 do
    session.get('/').response.status
  end
end

The #session method returns an object that lets you #get, #post, #put, and #delete resources from the Rack app. You call these method with a URI that you want to access/modify together with any parameters that you want to pass and any Rack environment that you want to use (which isn’t very common). For example, let’s get /pizzas/ with olives on them:

expect 200 do
  session.get('/pizzas/', 'olives' => '1').response.status
end

The #response method on #session returns a mock Rack response object that can be queried for results. Similarly, there’s a #request method that lets you inspect the request that was made.

Lookout-Rack also deals with cookies. Assuming that /cookies/set/ will set any cookies that we pass it and that /cookies/show/ will simply do nothing relevant, the following expectation will pass:

expect 'value' => '1' do
  session.
    get('/cookies/set/', 'value' => '1').
    get('/cookies/show/').request.cookies
end

Sometimes you may want to set cookies yourself before making a request. You then use the #cookie method, which takes a String of KEY=VALUE pairs separated by newlines, commas, and/or semicolons and sets those cookies in the session:

expect 'value' => '1', 'other' => '2' do
  session.
    cookie("value=1\n\nother=2").
    get('/cookies/show/').request.cookies
end

You may also want to clear all cookies in your session using #clear:

expect({}) do
  session.
    get('/cookies/set', 'value' => '1').
    clear.
    get('/cookies/show').request.cookies
end

Finally, to test redirects, call the #redirect! method on the session object, assuming that /redirected/ redirects to another location:

expect result.redirect? do
  session.get('/redirected/').response
end

expect result.not.redirect? do
  session.get('/redirected/').redirect!.response
end

That’s basically all there’s to it. You can check the API documentation for more information.

Financing

Currently, most of my time is spent at my day job and in my rather busy private life. Please motivate me to spend time on this piece of software by donating some of your money to this project. Yeah, I realize that requesting money to develop software is a bit, well, capitalistic of me. But please realize that I live in a capitalistic society and I need money to have other people give me the things that I need to continue living under the rules of said society. So, if you feel that this piece of software has helped you out enough to warrant a reward, please PayPal a donation to now@disu.se. Thanks! Your support won’t go unnoticed!

Reporting Bugs

Please report any bugs that you encounter to the issue tracker.

Authors

Nikolai Weibull wrote the code, the tests, the documentation, and this README.

Licensing

Lookout-Rack is free software: you may redistribute it and/or modify it under the terms of the GNU Lesser General Public License, version 3 or later, as published by the Free Software Foundation.