Sha256: 5404e9c2d7ca0ab2c76b4d2bf8dcda4d3e2bff972ff1120574d897ecf929e1bb

Contents?: true

Size: 1.97 KB

Versions: 6

Compression:

Stored size: 1.97 KB

Contents

RSpec.describe "publishing step events" do
  let(:transaction) {
    Dry.Transaction(container: container) do
      map :process
      step :verify
      tee :persist
    end
  }

  let(:container) {
    {
      process:  -> input { {name: input["name"]} },
      verify:   -> input { input[:name].to_s != "" ? Right(input) : Left("no name") },
      persist:  -> input { Test::DB << input and true }
    }
  }

  let(:subscriber) { spy(:subscriber) }

  before do
    Test::DB = []
  end

  context "subscribing to all step events" do
    before do
      transaction.subscribe(subscriber)
    end

    specify "subscriber receives success events" do
      transaction.call("name" => "Jane")

      expect(subscriber).to have_received(:process_success).with(name: "Jane")
      expect(subscriber).to have_received(:verify_success).with(name: "Jane")
      expect(subscriber).to have_received(:persist_success).with(name: "Jane")
    end

    specify "subsriber receives success events for passing steps, a failure event for the failing step, and no subsequent events" do
      transaction.call("name" => "")

      expect(subscriber).to have_received(:process_success).with(name: "")
      expect(subscriber).to have_received(:verify_failure).with({name: ""}, "no name")
      expect(subscriber).not_to have_received(:persist_success)
    end
  end

  context "subscribing to particular step events" do
    before do
      transaction.subscribe(verify: subscriber)
    end

    specify "subscriber receives success event for the specified step" do
      transaction.call("name" => "Jane")

      expect(subscriber).to have_received(:verify_success).with(name: "Jane")
      expect(subscriber).not_to have_received(:process_success)
      expect(subscriber).not_to have_received(:persist_success)
    end

    specify "subscriber receives failure event for the specified step" do
      transaction.call("name" => "")

      expect(subscriber).to have_received(:verify_failure).with({name: ""}, "no name")
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
dry-transaction-0.9.0 spec/integration/publishing_step_events_spec.rb
dry-transaction-0.8.0 spec/integration/publishing_step_events_spec.rb
dry-transaction-0.7.0 spec/integration/publishing_step_events_spec.rb
dry-transaction-0.6.0 spec/integration/publishing_step_events_spec.rb
dry-transaction-0.5.0 spec/integration/publishing_step_events_spec.rb
dry-transaction-0.4.0 spec/integration/publishing_step_events_spec.rb