spec/botfly/responder/responder_spec.rb in botfly-0.3.3 vs spec/botfly/responder/responder_spec.rb in botfly-0.3.4

- old
+ new

@@ -1,82 +1,165 @@ \ No newline at end of file +require 'spec_helper' + +include Botfly +describe Botfly::Responder do + describe ".new" do + subject { Responder.new(mock("bot")) } + it { should assign :matcher_chain } + it { should assign :bot } + it { should_not assign :callback } + it "should assign callback if block given" do + proc = Proc.new {} + Responder.new(mock("bot"), &proc).should assign :callback + end + it "should give out incremental IDs" do + bot = mock("bot") + @id = Responder.new(bot).id + expect { @id = Responder.new(bot).id }.to change {@id}.by(1) + end + end + + context "instance" do + let(:bot) { mock "bot" } + subject { Responder.new(bot) } + it "should delegate client to @bot" do + bot.should_receive :client + subject.client + end + it "should delegate quit to @bot" do + bot.should_receive :quit + subject.quit + end + it "should provide attr_reader for @bot" do + subject.bot.should be bot + end + it { should be_a CommonResponderMethods } + end + + describe "#method_missing" do + subject { Responder.new(mock("bot")) } + before(:all) { class FooMatchMatcher < Matcher; end } + it "should add matcher" do + subject.should_receive(:add_matcher).with(:foo_match,:bar) + subject.foo_match(:bar) + end + it "should assign callback if block given" do + expect { subject.foo_match(:bar) { :baz } }.to change { subject.instance_variable_get(:'@callback') } + end + it "should return self" do + subject.foo_match(:bar).should be subject + end + end + + describe "#add_matcher" do + subject { Responder.new(mock("bot")) } + before(:all) { class FooBarMatcher; def initialize(*args); end; end } + it "should map matcher name to proper class" do + FooBarMatcher.should_receive(:new) + subject.send(:add_matcher, :foo_bar, :baz) + end + it "should add instanciated matcher to matcher chain" do + expect { subject.send(:add_matcher, :foo_bar, :baz) }.to change { subject.instance_variable_get(:'@matcher_chain').count }.by(1) + end + end + + describe "#callback_with" do + subject { Responder.new(mock "bot") } + let(:params) { double "params" } + after(:each) { subject.callback_with(params) } + it "should create callback context" do + CallbackContext.should_receive(:new).with(subject, params) + subject.instance_variable_set(:"@callback", Proc.new {} ) + end + it "should execute callback in created context" do + context = mock("Context", :foo => :bar) + CallbackContext.should_receive(:new).and_return(context) + context.should_receive(:instance_eval) + end + end + + describe "#callback_context" do + specify { Responder.new(mock("bot")).send(:callback_context, {}).should be_a CallbackContext } + end +end