zeebe_bpmn_rspec 0.4.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a8ab5c676ef52ca21100add177726c7443298348603c89e8a53e1692b2876e21
4
- data.tar.gz: a9a7acca330b1377991b524cb9e31d91ccd7599ef0391ca58aef6700dc7da168
3
+ metadata.gz: dbc8b0a3a6bf05f4ef29f2a5285b452afa1e733f2e166a521ba28e48dc2f94d1
4
+ data.tar.gz: 5ef538eea22fce15ba4356ea06204891b69ec51170706cc804d005f1639107f6
5
5
  SHA512:
6
- metadata.gz: aae2aa7d081b9dd5cc342f955f060b0a605f23c680b3a7b9368857fc08ada31a58fb047cdd41e419d8394127786b29b76486c8feb0ce5aef1925e9ee3f88237d
7
- data.tar.gz: 5639b3ee712ea0af3b961e3402d5c606d3b26f55279785d844909030557fa8054c2ab344c62d10afcf020408055c58491eba9dcfc288eef673d37fd5d3eca799
6
+ metadata.gz: 89756e04128e43c7386cc13f785dc3146568b76a7ed5b841c9ec71851f243f043c5d91e1709dd6a44ec41dc05f6e8c2c2414e20fb4227eb3a896b1ee12efad5f
7
+ data.tar.gz: 3e2f49b5e1ad94878f83ac4b6efb69028a77728e3f53b8f46b2fa134cc6ea63b19f7f3c9e88717ab9942cc0daf97d103ebdfdb12492e937c5f59361b1ec069dd
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # zeebe_bpmn_rspec
2
2
 
3
+ ## v1.0.0
4
+ - Support Zeebe 1.0.0. Method names now use `process` instead of `workflow`
5
+ to match the renaming in Zeebe. Previous methods are deprecated and will be
6
+ removed in a future release.
7
+
8
+ ## v0.5.0 (unreleased)
9
+ - Require Ruby 2.6 or later.
10
+ - Require `worker` to be specified when activating a job. This argument is
11
+ defaulted but can no longer be specified as blank.
12
+
3
13
  ## v0.4.1
4
14
  - Allow `with_workflow_instance` to be called without a block.
5
15
  - Allow `worker` to be specified when activating a job.
data/README.md CHANGED
@@ -41,24 +41,24 @@ The gem adds the following helper methods to RSpec.
41
41
 
42
42
  The gem also defines [Custom Matchers](#custom-matchers).
43
43
 
44
- ### Deploy Workflow
44
+ ### Deploy Process
45
45
 
46
- The `deploy_workflow` method requires a path to a BPMN file and deploys it to Zeebe. There is no support for
46
+ The `deploy_process` (previously `deploy_workflow`) method requires a path to a BPMN file and deploys it to Zeebe. There is no support for
47
47
  removing a BPMN file once deployed, so this can be done once before the examples that use it.
48
48
 
49
49
  ```ruby
50
- before(:all) { deploy_workflow(filepath) }
50
+ before(:all) { deploy_process(filepath) }
51
51
  ```
52
52
 
53
- A custom name can also be specified for the workflow:
53
+ A custom name can also be specified for the process:
54
54
 
55
55
  ```ruby
56
- before(:all) { deploy_workflow(filepath, "custom_name") }
56
+ before(:all) { deploy_process(filepath, "custom_name") }
57
57
  ```
58
58
 
59
- ### With Workflow Instance
59
+ ### With Process Instance
60
60
 
61
- The `with_workflow_instance` method is used to create an instance for the specified workflow
61
+ The `with_process_instance` (previously `with_workflow_instance`) method is used to create an instance for the specified process
62
62
  and then yields a block that can interact with the instance.
63
63
 
64
64
  This method ensures that an active instance is cancelled at the end of the block.
@@ -67,14 +67,14 @@ For testing BPMN files it is expected that most of the test definition will be w
67
67
  call to this method.
68
68
 
69
69
  ```ruby
70
- with_workflow_instance("file_basename") do
70
+ with_process_instance("file_basename") do
71
71
  ...
72
72
  end
73
73
  ```
74
74
 
75
75
  ### Processing Jobs
76
76
 
77
- A single job can be processed for a workflow by calling `activate_job` (previously `process_job`).
77
+ A single job can be processed for a process by calling `activate_job` (previously `process_job`).
78
78
  `activate_job` is called with a job type:
79
79
 
80
80
  ```ruby
@@ -129,8 +129,8 @@ activate_job("my_job").
129
129
  expect_input(user_id: 123).
130
130
  and_complete
131
131
 
132
- # Jobs can be completed with data that is merged with variables in the workflow
133
- project_job("my_job").
132
+ # Jobs can be completed with data that is merged with variables in the process
133
+ activate_job("my_job").
134
134
  and_complete(status: "ACTIVATED")
135
135
  ```
136
136
 
@@ -198,17 +198,17 @@ The maximum number of jobs to return can be specified:
198
198
  jobs = activate_jobs("my_job", max_jobs: 2).to_a
199
199
  ```
200
200
 
201
- ### Workflow Complete
201
+ ### Process Complete
202
202
 
203
- The `workflow_complete!` method can be used to assert that the current workflow is complete at the end of a
204
- test. This is implemented by cancelling the workflow and checking for an error that it is already
203
+ The `process_complete!` (previously `workflow_complete!`) method can be used to assert that the current process is complete at the end of a
204
+ test. This is implemented by cancelling the process and checking for an error that it is already
205
205
  complete.
206
206
 
207
207
  ```ruby
208
- with_workflow_instance("file_basename") do
208
+ with_process_instance("file_basename") do
209
209
  ...
210
210
 
211
- workflow_complete!
211
+ process_complete!
212
212
  end
213
213
  ```
214
214
 
@@ -242,8 +242,8 @@ The `set_variables` method can be used to set variables for a specified
242
242
  scope in Zeebe:
243
243
 
244
244
  ```ruby
245
- # workflow_instance_key is a method that returns the key for the current workflow instance
246
- set_variables(workflow_instance_key, { foo: "bar" })
245
+ # process_instance_key is a method that returns the key for the current process instance
246
+ set_variables(process_instance_key, { foo: "bar" })
247
247
  ```
248
248
 
249
249
  An activated job can be used to determine the key for the task that it is associated with:
@@ -370,7 +370,7 @@ to specify a short duration.
370
370
 
371
371
  The current gem and approach have some limitations:
372
372
 
373
- 1. You can interact with only one workflow at a time.
373
+ 1. You can interact with only one process at a time.
374
374
 
375
375
  ## Development
376
376
 
@@ -0,0 +1,17 @@
1
+ version: "3.4"
2
+
3
+ services:
4
+ zeebe:
5
+ volumes:
6
+ - ./compose/zeebe-hazelcast-exporter.jar:/usr/local/zeebe/exporters/zeebe-hazelcast-exporter.jar
7
+ - ./compose/application.yml:/usr/local/zeebe/config/application.yaml
8
+
9
+ monitor:
10
+ image: camunda/zeebe-simple-monitor:0.19.1
11
+ environment:
12
+ - zeebe.client.broker.contactPoint=zeebe:26500
13
+ - zeebe.client.worker.hazelcast.connection=zeebe:5701
14
+ ports:
15
+ - "8082:8082"
16
+ depends_on:
17
+ - zeebe
data/docker-compose.yml CHANGED
@@ -8,7 +8,7 @@ x-environment: &default-environment
8
8
  BUNDLE_DISABLE_SHARED_GEMS: "true"
9
9
  ZEEBE_ADDRESS: zeebe:26500
10
10
  x-service: &default-service
11
- image: ruby:2.6.6
11
+ image: ruby:2.7.3
12
12
  volumes:
13
13
  - .:/usr/src/gem
14
14
  - ./compose/entrypoint.sh:/tmp/entrypoint.sh
@@ -18,22 +18,9 @@ x-service: &default-service
18
18
  stdin_open: true
19
19
  services:
20
20
  zeebe:
21
- image: camunda/zeebe:${ZEEBE_VERSION:-0.24.1}
21
+ image: camunda/zeebe:${ZEEBE_VERSION:-1.0.0}
22
22
  environment:
23
23
  ZEEBE_LOG_LEVEL: debug
24
- volumes:
25
- - ./compose/zeebe-hazelcast-exporter.jar:/usr/local/zeebe/exporters/zeebe-hazelcast-exporter.jar
26
- - ./compose/application.yml:/usr/local/zeebe/config/application.yaml
27
-
28
- monitor:
29
- image: camunda/zeebe-simple-monitor:0.19.0
30
- environment:
31
- - zeebe.client.broker.contactPoint=zeebe:26500
32
- - zeebe.client.worker.hazelcast.connection=zeebe:5701
33
- ports:
34
- - "8082:8082"
35
- depends_on:
36
- - zeebe
37
24
 
38
25
  console:
39
26
  <<: *default-service
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "active_support"
3
4
  require "rspec"
4
5
  require "zeebe/client"
6
+ require "zeebe_bpmn_rspec/deprecate_workflow_alias"
5
7
  require "zeebe_bpmn_rspec/helpers"
6
8
  require "zeebe_bpmn_rspec/version"
7
9
  require "zeebe_bpmn_rspec/matchers/have_activated"
@@ -1,19 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "active_support"
4
3
  require "active_support/core_ext/hash/keys"
5
4
  require "json"
6
5
 
7
6
  module ZeebeBpmnRspec
8
7
  class ActivatedJob
9
8
  include ::Zeebe::Client::GatewayProtocol # for direct reference of request classes
9
+ extend DeprecateWorkflowAlias
10
10
 
11
11
  attr_reader :job, :type
12
12
 
13
- def initialize(job, type:, workflow_instance_key:, client:, context:, validate:) # rubocop:disable Metrics/ParameterLists
13
+ def initialize(job, type:, process_instance_key:, client:, context:, validate:) # rubocop:disable Metrics/ParameterLists
14
14
  @job = job
15
15
  @type = type
16
- @workflow_instance_key = workflow_instance_key
16
+ @process_instance_key = process_instance_key
17
17
  @client = client
18
18
  @context = context
19
19
 
@@ -21,7 +21,7 @@ module ZeebeBpmnRspec
21
21
  context.instance_eval do
22
22
  expect(job).not_to be_nil, "expected to receive job of type '#{type}' but received none"
23
23
  aggregate_failures do
24
- expect(job.workflowInstanceKey).to eq(workflow_instance_key)
24
+ expect(job.processInstanceKey).to eq(process_instance_key)
25
25
  expect(job.type).to eq(type)
26
26
  end
27
27
  end
@@ -36,9 +36,10 @@ module ZeebeBpmnRspec
36
36
  job.key
37
37
  end
38
38
 
39
- def workflow_instance_key
40
- job.workflowInstanceKey
39
+ def process_instance_key
40
+ job.processInstanceKey
41
41
  end
42
+ deprecate_workflow_alias :workflow_instance_key, :process_instance_key
42
43
 
43
44
  def retries
44
45
  job.retries
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/deprecation"
4
+
5
+ module ZeebeBpmnRspec
6
+ module DeprecateWorkflowAlias
7
+ WorkflowDeprecation = ActiveSupport::Deprecation.new("v2.0", "ZeebeBpmnRspec")
8
+
9
+ def deprecate_workflow_alias(deprecated_name, new_name)
10
+ alias_method deprecated_name, new_name
11
+ deprecate deprecated_name => new_name, deprecator: WorkflowDeprecation
12
+ end
13
+ end
14
+ end
@@ -1,42 +1,44 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "active_support/core_ext/object/blank"
3
4
  require "zeebe_bpmn_rspec/activated_job"
4
5
 
5
6
  module ZeebeBpmnRspec
6
7
  module Helpers # rubocop:disable Metrics/ModuleLength
7
8
  include ::Zeebe::Client::GatewayProtocol # for direct reference of request classes
8
-
9
- def deploy_workflow(path, name = nil)
10
- _zeebe_client.deploy_workflow(DeployWorkflowRequest.new(
11
- workflows: [WorkflowRequestObject.new(
12
- name: (name && "#{name}.bpmn") || File.basename(path),
13
- type: WorkflowRequestObject::ResourceType::FILE,
14
- definition: File.read(path)
15
- )]
16
- ))
9
+ extend DeprecateWorkflowAlias
10
+
11
+ def deploy_process(path, name = nil)
12
+ _zeebe_client.deploy_process(DeployProcessRequest.new(
13
+ processes: [ProcessRequestObject.new(
14
+ name: (name && "#{name}.bpmn") || File.basename(path),
15
+ definition: File.read(path)
16
+ )]
17
+ ))
17
18
  rescue StandardError => e
18
- raise "Failed to deploy workflow: #{e}"
19
+ raise "Failed to deploy precess: #{e}"
19
20
  end
21
+ deprecate_workflow_alias :deploy_workflow, :deploy_process
20
22
 
21
- def with_workflow_instance(name, variables = {})
23
+ def with_process_instance(name, variables = {})
22
24
  system_error = nil
23
- workflow = _zeebe_client.create_workflow_instance(CreateWorkflowInstanceRequest.new(
24
- bpmnProcessId: name,
25
- version: -1, # always latest
26
- variables: variables.to_json
27
- ))
28
- @__workflow_instance_key = workflow.workflowInstanceKey
29
- yield(workflow.workflowInstanceKey) if block_given?
25
+ process = _zeebe_client.create_process_instance(CreateProcessInstanceRequest.new(
26
+ bpmnProcessId: name,
27
+ version: -1, # always latest
28
+ variables: variables.to_json
29
+ ))
30
+ @__process_instance_key = process.processInstanceKey
31
+ yield(process.processInstanceKey) if block_given?
30
32
  rescue Exception => e # rubocop:disable Lint/RescueException
31
33
  # exceptions are rescued to ensure that instances are cancelled
32
34
  # any error is re-raised below
33
35
  system_error = e
34
36
  ensure
35
- if workflow&.workflowInstanceKey
37
+ if process&.processInstanceKey
36
38
  begin
37
- _zeebe_client.cancel_workflow_instance(CancelWorkflowInstanceRequest.new(
38
- workflowInstanceKey: workflow.workflowInstanceKey
39
- ))
39
+ _zeebe_client.cancel_process_instance(CancelProcessInstanceRequest.new(
40
+ processInstanceKey: process.processInstanceKey
41
+ ))
40
42
  rescue GRPC::NotFound => _e
41
43
  # expected
42
44
  rescue StandardError => _e
@@ -45,26 +47,31 @@ module ZeebeBpmnRspec
45
47
  end
46
48
  raise system_error if system_error
47
49
  end
50
+ deprecate_workflow_alias :with_workflow_instance, :with_process_instance
48
51
 
49
- def workflow_complete!
52
+ def process_complete!(wait_seconds: 0.25)
50
53
  error = nil
51
- sleep 0.25 # TODO: configurable?
54
+ sleep(wait_seconds)
52
55
  begin
53
- _zeebe_client.cancel_workflow_instance(CancelWorkflowInstanceRequest.new(
54
- workflowInstanceKey: workflow_instance_key
55
- ))
56
+ _zeebe_client.cancel_process_instance(CancelProcessInstanceRequest.new(
57
+ processInstanceKey: process_instance_key
58
+ ))
56
59
  rescue GRPC::NotFound => e
57
60
  error = e
58
61
  end
59
62
 
60
- raise "Expected workflow instance #{workflow_instance_key} to be complete" if error.nil?
63
+ raise "Expected process instance #{process_instance_key} to be complete" if error.nil?
61
64
  end
65
+ deprecate_workflow_alias :workflow_complete!, :process_complete!
62
66
 
63
- def workflow_instance_key
64
- @__workflow_instance_key
67
+ def process_instance_key
68
+ @__process_instance_key
65
69
  end
70
+ deprecate_workflow_alias :workflow_instance_key, :process_instance_key
66
71
 
67
72
  def activate_job(type, fetch_variables: nil, validate: true, worker: "#{type}-#{SecureRandom.hex}")
73
+ raise ArgumentError.new("'worker' cannot be blank") if worker.blank?
74
+
68
75
  stream = _zeebe_client.activate_jobs(ActivateJobsRequest.new({
69
76
  type: type,
70
77
  worker: worker,
@@ -80,13 +87,13 @@ module ZeebeBpmnRspec
80
87
 
81
88
  ActivatedJob.new(job,
82
89
  type: type,
83
- workflow_instance_key: workflow_instance_key,
90
+ process_instance_key: process_instance_key,
84
91
  client: _zeebe_client,
85
92
  context: self,
86
93
  validate: validate)
87
94
  end
88
95
  alias process_job activate_job
89
- # TODO: deprecate process_job
96
+ deprecate process_job: :activate_job
90
97
 
91
98
  def job_with_type(type, fetch_variables: nil)
92
99
  activate_job(type, fetch_variables: fetch_variables, validate: false)
@@ -111,7 +118,7 @@ module ZeebeBpmnRspec
111
118
  response.jobs.each do |job|
112
119
  yielder << ActivatedJob.new(job,
113
120
  type: type,
114
- workflow_instance_key: workflow_instance_key,
121
+ process_instance_key: process_instance_key,
115
122
  client: _zeebe_client,
116
123
  context: self,
117
124
  validate: true)
@@ -140,7 +147,7 @@ module ZeebeBpmnRspec
140
147
  end
141
148
 
142
149
  def reset_zeebe!
143
- @__workflow_instance_key = nil
150
+ @__process_instance_key = nil
144
151
  end
145
152
 
146
153
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ZeebeBpmnRspec
4
- VERSION = "0.4.1"
4
+ VERSION = "1.0.0"
5
5
  end
@@ -41,7 +41,9 @@ Gem::Specification.new do |spec|
41
41
  spec.executables = []
42
42
  spec.require_paths = ["lib"]
43
43
 
44
- spec.add_development_dependency "bundler", "~> 1.12"
44
+ spec.required_ruby_version = ">= 2.6"
45
+
46
+ spec.add_development_dependency "bundler", "~> 2.1"
45
47
  spec.add_development_dependency "ezcater_rubocop", "2.0.0"
46
48
  spec.add_development_dependency "overcommit"
47
49
  spec.add_development_dependency "rake", "~> 10.0"
@@ -50,5 +52,5 @@ Gem::Specification.new do |spec|
50
52
 
51
53
  spec.add_runtime_dependency "activesupport"
52
54
  spec.add_runtime_dependency "rspec", "~> 3.4"
53
- spec.add_runtime_dependency "zeebe-client"
55
+ spec.add_runtime_dependency "zeebe-client", "~> 0.14.0"
54
56
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zeebe_bpmn_rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ezCater, Inc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-05 00:00:00.000000000 Z
11
+ date: 2021-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.12'
19
+ version: '2.1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.12'
26
+ version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: ezcater_rubocop
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -126,16 +126,16 @@ dependencies:
126
126
  name: zeebe-client
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
131
+ version: 0.14.0
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '0'
138
+ version: 0.14.0
139
139
  description: Zeebe BPMN testing using RSpec
140
140
  email:
141
141
  - engineering@ezcater.com
@@ -148,9 +148,11 @@ files:
148
148
  - Gemfile
149
149
  - LICENSE.txt
150
150
  - README.md
151
+ - docker-compose.simple-monitor.yml
151
152
  - docker-compose.yml
152
153
  - lib/zeebe_bpmn_rspec.rb
153
154
  - lib/zeebe_bpmn_rspec/activated_job.rb
155
+ - lib/zeebe_bpmn_rspec/deprecate_workflow_alias.rb
154
156
  - lib/zeebe_bpmn_rspec/helpers.rb
155
157
  - lib/zeebe_bpmn_rspec/matchers/have_activated.rb
156
158
  - lib/zeebe_bpmn_rspec/matchers/have_headers.rb
@@ -170,14 +172,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
172
  requirements:
171
173
  - - ">="
172
174
  - !ruby/object:Gem::Version
173
- version: '0'
175
+ version: '2.6'
174
176
  required_rubygems_version: !ruby/object:Gem::Requirement
175
177
  requirements:
176
178
  - - ">="
177
179
  - !ruby/object:Gem::Version
178
180
  version: '0'
179
181
  requirements: []
180
- rubygems_version: 3.0.3
182
+ rubygems_version: 3.1.4
181
183
  signing_key:
182
184
  specification_version: 4
183
185
  summary: Zeebe BPMN testing using RSpec