require 'spec_helper'

module Naught
  class NullClassBuilder
    module Commands
      class TestCommand
      end
    end
  end

  describe NullClassBuilder do
    subject(:builder) { NullClassBuilder.new }
    it 'responds to commands defined in NullObjectBuilder::Commands' do
      expect(builder).to respond_to(:test_command)
    end

    it 'translates method calls into command invocations including arguments' do
      test_command = double
      NullClassBuilder::Commands::TestCommand.should_receive(:new).
        with(builder, "foo", 42).
        and_return(test_command)
      test_command.should_receive(:call).and_return("COMMAND RESULT")
      expect(builder.test_command("foo", 42)).to eq("COMMAND RESULT")
    end

    it 'handles missing non-command missing methods normally' do
      expect(builder).not_to respond_to(:nonexistant_method)
      expect{builder.nonexistent_method}.to raise_error(NoMethodError)
    end
  end
end

require 'spec_helper'

module Naught
  class NullClassBuilder
    module Commands
      class TestCommand
      end
    end
  end

  describe NullClassBuilder do
    subject(:builder) { NullClassBuilder.new }
    it 'responds to commands defined in NullObjectBuilder::Commands' do
      expect(builder).to respond_to(:test_command)
    end

    it 'translates method calls into command invocations including arguments' do
      test_command = double
      expect(NullClassBuilder::Commands::TestCommand).to receive(:new).
        with(builder, "foo", 42).
        and_return(test_command)
      expect(test_command).to receive(:call).and_return("COMMAND RESULT")
      expect(builder.test_command("foo", 42)).to eq("COMMAND RESULT")
    end

    it 'handles missing non-command missing methods normally' do
      expect(builder).not_to respond_to(:nonexistant_method)
      expect{builder.nonexistent_method}.to raise_error(NoMethodError)
    end
  end
end

Use the new expect(...).to receive syntax
Use the new expect(...).to receive syntax
