Sha256: 7c817dc764232f39a7b94ef0c0e87acb4422abdbc0d2a4da48ab5e44edb9abc6

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

require 'spec_helper'


describe "Workflows" do
  it "runs the whole workflow in proper order" do
    flow = TestWorkflow.create
    flow.start!

    expect(Gush::Worker).to have_jobs(flow.id, ["Prepare"])

    Gush::Worker.perform_one
    expect(Gush::Worker).to have_jobs(flow.id, ["FetchFirstJob", "FetchSecondJob"])

    Gush::Worker.perform_one
    expect(Gush::Worker).to have_jobs(flow.id, ["FetchSecondJob", "PersistFirstJob"])

    Gush::Worker.perform_one
    expect(Gush::Worker).to have_jobs(flow.id, ["PersistFirstJob", "NormalizeJob"])

    Gush::Worker.perform_one
    expect(Gush::Worker).to have_jobs(flow.id, ["NormalizeJob"])

    Gush::Worker.perform_one

    expect(Gush::Worker.jobs).to be_empty

    flow = flow.reload
    expect(flow).to be_finished
    expect(flow).to_not be_failed
  end

  it "passes payloads down the workflow" do
    class UpcaseJob < Gush::Job
      def work
        output params[:input].upcase
      end
    end

    class PrefixJob < Gush::Job
      def work
        output params[:prefix].capitalize
      end
    end

    class PrependJob < Gush::Job
      def work
        string = "#{payloads["PrefixJob"]}: #{payloads["UpcaseJob"]}"
        output string
      end
    end

    class PayloadWorkflow < Gush::Workflow
      def configure
        run UpcaseJob, params: {input: "some text"}
        run PrefixJob, params: {prefix: "a prefix"}
        run PrependJob, after: [UpcaseJob, PrefixJob]
      end
    end

    flow = PayloadWorkflow.create
    flow.start!

    Gush::Worker.perform_one
    expect(flow.reload.find_job("UpcaseJob").output_payload).to eq("SOME TEXT")

    Gush::Worker.perform_one
    expect(flow.reload.find_job("PrefixJob").output_payload).to eq("A prefix")

    Gush::Worker.perform_one
    expect(flow.reload.find_job("PrependJob").output_payload).to eq("A prefix: SOME TEXT")
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gush-0.1.2 spec/features/integration_spec.rb