tracks/vendor/plugins/scenarios/spec/scenarios_spec.rb
2008-06-24 20:35:30 +02:00

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