require File.expand_path('spec_helper', File.dirname(__FILE__))
shared_examples_for "session" do
describe '#app' do
it "should remember the application" do
@session.app.should == TestApp
end
end
describe '#visit' do
it "should fetch a response from the driver" do
@session.visit('/')
@session.body.should == 'Hello world!'
@session.visit('/foo')
@session.body.should == 'Another World'
end
end
describe '#click_link' do
before do
@session.visit('/with_html')
end
context "with id given" do
it "should take user to the linked page" do
@session.click_link('foo')
@session.body.should == 'Another World'
end
end
context "with text given" do
it "should take user to the linked page" do
@session.click_link('labore')
@session.body.should == '
Bar
'
end
end
context "with title given" do
it "should take user to the linked page" do
@session.click_link('awesome title')
@session.body.should == 'Bar
'
end
end
context "with a locator that doesn't exist" do
it "should raise an error" do
running do
@session.click_link('does not exist')
end.should raise_error(Webcat::ElementNotFound)
end
end
end
describe '#click_button' do
before do
@session.visit('/form')
end
context "with value given" do
before do
@session.click_button('awesome')
@results = YAML.load(@session.body)
end
it "should serialize and submit text fields" do
@results['first_name'].should == 'John'
end
it "should not serialize fields from other forms" do
@results['middle_name'].should be_nil
end
it "should submit the button that was clicked, but not other buttons" do
@results['awesome'].should == 'awesome'
@results['crappy'].should be_nil
end
it "should serialize radio buttons" do
@results['gender'].should == 'female'
end
it "should serialize check boxes" do
@results['pets'].should include('dog', 'hamster')
@results['pets'].should_not include('cat')
end
it "should serialize text areas" do
@results['description'].should == 'Descriptive text goes here'
end
it "should serialize select tag with values" do
@results['locale'].should == 'en'
end
it "should serialize select tag without values" do
@results['region'].should == 'Norway'
end
it "should serialize first option for select tag with no selection" do
@results['city'].should == 'London'
end
it "should not serialize a select tag without options" do
@results['tendency'].should be_nil
end
context "with multipart form" do
it "should attach the file"
end
context "with normal form" do
it "should serialize the file path"
end
end
context "with id given" do
it "should submit the associated form" do
@session.click_button('awe123')
results = YAML.load(@session.body)
results['first_name'].should == 'John'
end
end
end
describe "#fill_in" do
before do
@session.visit('/form')
end
it "should fill in a field by id" do
@session.fill_in('form_first_name', :with => 'Harry')
@session.click_button('awesome')
YAML.load(@session.body)['first_name'].should == 'Harry'
end
it "should fill in a field by label" do
@session.fill_in('First Name', :with => 'Harry')
@session.click_button('awesome')
YAML.load(@session.body)['first_name'].should == 'Harry'
end
it "should fill in a textarea by id" do
@session.fill_in('form_description', :with => 'Texty text')
@session.click_button('awesome')
YAML.load(@session.body)['description'].should == 'Texty text'
end
it "should fill in a textarea by label" do
@session.fill_in('Description', :with => 'Texty text')
@session.click_button('awesome')
YAML.load(@session.body)['description'].should == 'Texty text'
end
end
end
describe Webcat::Session do
context 'with non-existant driver' do
it "should raise an error" do
running {
Webcat::Session.new(:quox, TestApp).driver
}.should raise_error(Webcat::DriverNotFoundError)
end
end
end