mirror of
https://github.com/TracksApp/tracks.git
synced 2026-01-07 17:58:50 +01:00
185 lines
No EOL
5.1 KiB
Ruby
185 lines
No EOL
5.1 KiB
Ruby
require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
|
|
|
|
class ExplodesOnSecondInstantiationScenario < Scenario::Base
|
|
cattr_accessor :instance
|
|
def initialize(*args)
|
|
raise "Should only be created once" if self.class.instance
|
|
self.class.instance = super(*args)
|
|
end
|
|
end
|
|
|
|
describe "Scenario loading" do
|
|
scenario :explodes_on_second_instantiation
|
|
|
|
it "should work" do
|
|
end
|
|
|
|
it 'should work again' do
|
|
end
|
|
end
|
|
|
|
describe "Scenario loading" do
|
|
it "should load from configured directories" do
|
|
Scenario.load(:empty)
|
|
EmptyScenario
|
|
end
|
|
|
|
it "should raise Scenario::NameError when the scenario does not exist" do
|
|
lambda { Scenario.load(:whatcha_talkin_bout) }.should raise_error(Scenario::NameError)
|
|
end
|
|
|
|
it "should allow us to add helper methods through the helpers class method" do
|
|
klass = :empty.to_scenario
|
|
klass.helpers do
|
|
def hello
|
|
"Hello World"
|
|
end
|
|
end
|
|
klass.new.methods.should include('hello')
|
|
end
|
|
|
|
it "should provide a built-in scenario named :blank which clears all tables found in schema.rb" do
|
|
Scenario.load(:blank)
|
|
BlankScenario
|
|
end
|
|
end
|
|
|
|
describe Scenarios::TableMethods do
|
|
scenario :things
|
|
|
|
it "should understand namespaced models" do
|
|
create_record "ModelModule::Model", :raking, :name => "Raking", :description => "Moving leaves around"
|
|
models(:raking).should_not be_nil
|
|
end
|
|
|
|
it "should include record creation methods" do
|
|
create_record(:thing, :three, :name => "Three")
|
|
things(:three).name.should == "Three"
|
|
end
|
|
|
|
it "should include other example helper methods" do
|
|
create_thing("The Thing")
|
|
things(:the_thing).name.should == "The Thing"
|
|
end
|
|
|
|
describe "for retrieving objects" do
|
|
it "should have a pluralized name" do
|
|
should respond_to("things")
|
|
should_not respond_to("thing")
|
|
end
|
|
|
|
it "should answer a single object given a single name" do
|
|
things(:one).should be_kind_of(Thing)
|
|
things("one").should be_kind_of(Thing)
|
|
things(:two).name.should == "two"
|
|
end
|
|
|
|
it "should answer an array of objects given multiple names" do
|
|
things(:one, :two).should be_kind_of(Array)
|
|
things(:one, :two).should eql([things(:one), things(:two)])
|
|
end
|
|
|
|
it "should just return the argument if an AR instance is given" do
|
|
thing = things(:one)
|
|
things(thing).should eql(thing)
|
|
end
|
|
end
|
|
|
|
describe "for retrieving ids" do
|
|
it "should have a singular name" do
|
|
should respond_to("thing_id")
|
|
should_not respond_to("thing_ids")
|
|
should_not respond_to("things_id")
|
|
end
|
|
|
|
it "should answer a single id given a single name" do
|
|
thing_id(:one).should be_kind_of(Fixnum)
|
|
thing_id("one").should be_kind_of(Fixnum)
|
|
end
|
|
|
|
it "should answer an array of ids given multiple names" do
|
|
thing_id(:one, :two).should be_kind_of(Array)
|
|
thing_id(:one, :two).should eql([thing_id(:one), thing_id(:two)])
|
|
thing_id("one", "two").should eql([thing_id(:one), thing_id(:two)])
|
|
end
|
|
|
|
it "should answer the id of the argument if an AR instance id given" do
|
|
thing = things(:one)
|
|
thing_id(thing).should == thing.id
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "it uses people and things scenarios", :shared => true do
|
|
it "should have reader helper methods for each used scenario" do
|
|
should respond_to(:things)
|
|
should respond_to(:people)
|
|
end
|
|
|
|
it "should allow us to use helper methods from each scenario inside an example" do
|
|
should respond_to(:create_thing)
|
|
should respond_to(:create_person)
|
|
end
|
|
end
|
|
|
|
describe "A composite scenario" do
|
|
scenario :composite
|
|
|
|
it_should_behave_like "it uses people and things scenarios"
|
|
|
|
it "should allow us to use helper methods scenario" do
|
|
should respond_to(:method_from_composite_scenario)
|
|
end
|
|
end
|
|
|
|
describe "Multiple scenarios" do
|
|
scenario :things, :people
|
|
|
|
it_should_behave_like "it uses people and things scenarios"
|
|
end
|
|
|
|
describe "A complex composite scenario" do
|
|
scenario :complex_composite
|
|
|
|
it_should_behave_like "it uses people and things scenarios"
|
|
|
|
it "should have correct reader helper methods" do
|
|
should respond_to(:places)
|
|
end
|
|
|
|
it "should allow us to use correct helper methods" do
|
|
should respond_to(:create_place)
|
|
end
|
|
end
|
|
|
|
describe "Overlapping scenarios" do
|
|
scenario :composite, :things, :people
|
|
|
|
it "should not cause scenarios to be loaded twice" do
|
|
Person.find_all_by_first_name("John").size.should == 1
|
|
end
|
|
end
|
|
|
|
describe "create_record table method" do
|
|
scenario :empty
|
|
|
|
it "should automatically set timestamps" do
|
|
create_record :note, :first, :content => "first note"
|
|
note = notes(:first)
|
|
note.created_at.should be_instance_of(Time)
|
|
end
|
|
end
|
|
|
|
describe "create_model table method" do
|
|
scenario :empty
|
|
|
|
it "should support symbolic names" do
|
|
thing = create_model Thing, :mything, :name => "My Thing", :description => "For testing"
|
|
things(:mything).should == thing
|
|
end
|
|
|
|
it "should blast any table touched as a side effect of creating a model (callbacks, observers, etc.)" do
|
|
create_model SideEffectyThing
|
|
blasted_tables.should include(Thing.table_name)
|
|
end
|
|
end |