require "spec_helper" class MockRepo def [](key)#should_receive :[] does not work so well... singular key end end describe 'FastGettext::TranslationRepository::Chain' do describe "empty chain" do before do @rep = FastGettext::TranslationRepository.build('chain', :chain=>[], :type=>:chain) end it "has no locales" do @rep.available_locales.should == [] end it "cannot translate" do @rep['car'].should == nil end it "cannot pluralize" do @rep.plural('Axis','Axis').should == [] end it "has no pluralisation rule" do @rep.pluralisation_rule.should == nil end it "returns true on reload" do @rep.reload.should be_true end end describe "filled chain" do before do @one = MockRepo.new @one.stub(:singular).with('xx').and_return 'one' @two = MockRepo.new @two.stub(:singular).with('xx').and_return 'two' @rep = FastGettext::TranslationRepository.build('chain', :chain=>[@one, @two], :type=>:chain) end describe :singular do it "uses the first repo in the chain if it responds" do @rep['xx'].should == 'one' end it "uses the second repo in the chain if the first does not respond" do @one.should_receive(:singular).and_return nil @rep['xx'].should == 'two' end end describe :plural do it "uses the first repo in the chain if it responds" do @one.should_receive(:plural).with('a','b').and_return ['A','B'] @rep.plural('a','b').should == ['A','B'] end it "uses the second repo in the chain if the first does not respond" do @one.should_receive(:plural).with('a','b').and_return [] @two.should_receive(:plural).with('a','b').and_return ['A','B'] @rep.plural('a','b').should == ['A','B'] end end describe :available_locales do it "should be the sum of all added repositories" do @one.should_receive(:available_locales).and_return ['de'] @two.should_receive(:available_locales).and_return ['de','en'] @rep.available_locales.should == ['de','en'] end end describe :pluralisation_rule do it "chooses the first that exists" do @one.should_receive(:pluralisation_rule).and_return nil @two.should_receive(:pluralisation_rule).and_return 'x' @rep.pluralisation_rule.should == 'x' end end describe :reload do it "reloads all repositories" do @one.should_receive(:reload) @two.should_receive(:reload) @rep.reload end it "returns true" do @rep.chain.each { |c| c.stub(:reload) } @rep.reload.should be_true end end end end