Feature: block local expectations

  Background:
    Given a file named "lib/account.rb" with:
      """
      class Account
        def self.create
          yield new
        end

        def opening_balance(amount, currency)
        end
      end
      """

  Scenario: passing example
    Given a file named "spec/account_spec.rb" with:
      """
      require 'account'

      describe "account DSL" do
        it "it succeeds when the block local receives the given call" do
          account = double("Account")
          Account.should_receive(:create).and_yield(account) do |account|
            account.should_receive(:opening_balance).with(100, :USD)
          end
          Account.create do |account|
            account.opening_balance 100, :USD
          end
        end
      end
      """
    When I run `rspec spec/account_spec.rb`
    Then the output should contain "1 example, 0 failures"

  Scenario: failing example

    Given a file named "spec/account_spec.rb" with:
      """
      require 'account'

      describe "account DSL" do
        it "fails when the block local does not receive the expected call" do
          Account.should_receive(:create).and_yield do |account|
            account.should_receive(:opening_balance).with(100, :USD)
          end
          Account.create do |account|
            # opening_balance is not called here
          end
        end
      end
      """

    When I run `rspec spec/account_spec.rb`
    Then the output should contain "1 example, 1 failure"