dor-workflow-client 3.7.0 → 3.8.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: dc0e250229c8ecc7c2e6301ce8315580d3b00c722b3c433d2449f4f463e2ce8a
4
- data.tar.gz: 589ae27fd6229f5f4484bedb4e17f519552e7c832ca0c9eaa8c483890c721546
3
+ metadata.gz: 79af115a9f02f6d3de631dcf9dd88d6160b1fddc865cb19bf39e2f76077a7992
4
+ data.tar.gz: 41a3bb9cd2cfe4a7ae7eb74617c4bb54b0f351a266b3c56e13e1ce7962fdc9a9
5
5
  SHA512:
6
- metadata.gz: 0e94ca49bca7bc61552a167fec185994184b718a28b8143aca6a66091669b768868d111101103067a08313d86b40e5319009fdc4177f166736c333477c10177f
7
- data.tar.gz: 7970103464337acdbc9fe721f1521d8192bb5ba14f055743d930e38984106160007fa574e5dd690c445507076566a2af39d58b5877eef0d3eaaa4ae5fb606773
6
+ metadata.gz: 1e0e3579ec7be81ae999485c736d9314a71e4daf63116e19aaa7af92c86af59031795e61eca32114e5459c3c314fbe46f31d6640dde2fada2ec124abc1a1ff1c
7
+ data.tar.gz: 6ff468132eb597d1dc96e0901b828c4e4b9764832a4159ecbbb4920a3d9b705efc848586425eccd2fff195411a48e02a9a8e4e70c808e5ef350a98a636430c45
@@ -13,20 +13,23 @@ module Dor
13
13
  # @param [String] repo repository name
14
14
  # @param [String] druid object id
15
15
  # @param [String] milestone_name the name of the milestone being queried for
16
+ # @param [Number] version the version to query for
16
17
  # @return [Time] when the milestone was achieved. Returns nil if the milestone does not exist
17
18
  #
18
- def lifecycle(repo, druid, milestone_name)
19
- filter_milestone(query_lifecycle(repo, druid), milestone_name)
19
+ def lifecycle(repo, druid, milestone_name, version: nil)
20
+ filter_milestone(query_lifecycle(repo, druid, version: version), milestone_name)
20
21
  end
21
22
 
22
- # Returns the Date for a requested milestone ONLY FROM THE ACTIVE workflow table
23
+ # Returns the Date for a requested milestone ONLY for the current version.
24
+ # This is slow as the workflow server will query dor-services-app for the version.
25
+ # A better approach is #lifecycle with the version tag.
23
26
  # @param [String] repo repository name
24
27
  # @param [String] druid object id
25
28
  # @param [String] milestone_name the name of the milestone being queried for
26
29
  # @return [Time] when the milestone was achieved. Returns nil if the milestone does not exis
27
30
  #
28
31
  def active_lifecycle(repo, druid, milestone_name)
29
- filter_milestone(query_lifecycle(repo, druid, true), milestone_name)
32
+ filter_milestone(query_lifecycle(repo, druid, active_only: true), milestone_name)
30
33
  end
31
34
 
32
35
  # @return [Hash]
@@ -54,9 +57,15 @@ module Dor
54
57
  # <milestone date="2010-06-15T16:08:58-0700">released</milestone>
55
58
  # </lifecycle>
56
59
  #
57
- def query_lifecycle(repo, druid, active_only = false)
60
+ def query_lifecycle(repo, druid, active_only: false, version: nil)
58
61
  req = "#{repo}/objects/#{druid}/lifecycle"
59
- req += '?active-only=true' if active_only
62
+ req += if version
63
+ "?version=#{version}"
64
+ elsif active_only
65
+ '?active-only=true'
66
+ else
67
+ ''
68
+ end
60
69
  Nokogiri::XML(requestor.request(req))
61
70
  end
62
71
 
@@ -3,7 +3,7 @@
3
3
  module Dor
4
4
  module Workflow
5
5
  class Client
6
- VERSION = '3.7.0'
6
+ VERSION = '3.8.0'
7
7
  end
8
8
  end
9
9
  end
@@ -145,9 +145,10 @@ module Dor
145
145
  # Updates the status of one step in a workflow to error.
146
146
  # Returns true on success. Caller must handle any exceptions
147
147
  #
148
- # @param [String] repo The repository the object resides in. The service recoginzes "dor" and "sdr" at the moment
148
+ # @param [String] _repo The repository the object resides in. The service recoginzes "dor" and "sdr" at the moment
149
149
  # @param [String] druid The id of the object
150
150
  # @param [String] workflow The name of the workflow
151
+ # @param [String] process The name of the workflow step
151
152
  # @param [String] error_msg The error message. Ideally, this is a brief message describing the error
152
153
  # @param [Hash] opts optional values for the workflow step
153
154
  # @option opts [String] :error_text A slot to hold more information about the error, like a full stacktrace
@@ -157,14 +158,35 @@ module Dor
157
158
  # ==
158
159
  # The method does an HTTP PUT to the URL defined in `Dor::WF_URI`.
159
160
  #
160
- # PUT "/dor/objects/pid:123/workflows/GoogleScannedWF/convert"
161
+ # PUT "/objects/pid:123/workflows/GoogleScannedWF/convert"
161
162
  # <process name=\"convert\" status=\"error\" />"
162
- def update_workflow_error_status(repo, druid, workflow, process, error_msg, opts = {})
163
- opts = { error_text: nil }.merge!(opts)
164
- xml = create_process_xml({ name: process, status: 'error', errorMessage: error_msg }.merge!(opts))
165
- requestor.request "#{repo}/objects/#{druid}/workflows/#{workflow}/#{process}", 'put', xml, content_type: 'application/xml'
163
+ def update_workflow_error_status(_repo, druid, workflow, process, error_msg, opts = {})
164
+ update_error_status(druid: druid, workflow: workflow, process: process, error_msg: error_msg, error_text: opts[:error_text])
166
165
  true
167
166
  end
167
+ deprecation_deprecate update_workflow_error_status: 'use update_error_status instead.'
168
+
169
+ # Updates the status of one step in a workflow to error.
170
+ # Returns true on success. Caller must handle any exceptions
171
+ #
172
+ # @param [String] druid The id of the object
173
+ # @param [String] workflow The name of the workflow
174
+ # @param [String] process The name of the workflow step
175
+ # @param [String] error_msg The error message. Ideally, this is a brief message describing the error
176
+ # @param [String] error_text A slot to hold more information about the error, like a full stacktrace
177
+ # @return [Workflow::Response::Update]
178
+ #
179
+ # Http Call
180
+ # ==
181
+ # The method does an HTTP PUT to the URL defined in `Dor::WF_URI`.
182
+ #
183
+ # PUT "/objects/pid:123/workflows/GoogleScannedWF/convert"
184
+ # <process name=\"convert\" status=\"error\" />"
185
+ def update_error_status(druid:, workflow:, process:, error_msg:, error_text: nil)
186
+ xml = create_process_xml(name: process, status: 'error', errorMessage: error_msg, error_text: error_text)
187
+ response = requestor.request "objects/#{druid}/workflows/#{workflow}/#{process}", 'put', xml, content_type: 'application/xml'
188
+ Workflow::Response::Update.new(json: response)
189
+ end
168
190
 
169
191
  #
170
192
  # Retrieves the raw XML for all the workflows for the the given object
@@ -41,7 +41,8 @@ module Dor
41
41
 
42
42
  delegate :create_workflow, :create_workflow_by_name, :update_workflow_status, :workflow_status,
43
43
  :workflow_xml, :update_workflow_error_status, :all_workflows_xml, :workflows,
44
- :workflow, :delete_workflow, :delete_all_workflows, :update_status, to: :workflow_routes
44
+ :workflow, :delete_workflow, :delete_all_workflows, :update_status, :update_error_status,
45
+ to: :workflow_routes
45
46
 
46
47
  delegate :lifecycle, :active_lifecycle, :milestones, to: :lifecycle_routes
47
48
 
@@ -3,9 +3,9 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  RSpec.describe Dor::Workflow::Client::LifecycleRoutes do
6
- let(:mock_requestor) { instance_double(Dor::Workflow::Client::Requestor) }
7
-
8
- let(:routes) { described_class.new(requestor: mock_requestor) }
6
+ let(:requestor) { instance_double(Dor::Workflow::Client::Requestor, request: response) }
7
+ let(:response) { '<xml />' }
8
+ let(:routes) { described_class.new(requestor: requestor) }
9
9
 
10
10
  describe '#milestones' do
11
11
  let(:ng_xml) { Nokogiri::XML(xml) }
@@ -24,4 +24,24 @@ RSpec.describe Dor::Workflow::Client::LifecycleRoutes do
24
24
  expect(milestones.first[:version]).to eq('2')
25
25
  end
26
26
  end
27
+
28
+ describe '#lifecycle' do
29
+ context 'without version' do
30
+ subject(:lifecycle) { routes.lifecycle('dor', 'druid:gv054hp4128', 'submitted') }
31
+
32
+ it 'make the request' do
33
+ lifecycle
34
+ expect(requestor).to have_received(:request).with('dor/objects/druid:gv054hp4128/lifecycle')
35
+ end
36
+ end
37
+
38
+ context 'with version' do
39
+ subject(:lifecycle) { routes.lifecycle('dor', 'druid:gv054hp4128', 'submitted', version: 3) }
40
+
41
+ it 'makes the request with the version' do
42
+ lifecycle
43
+ expect(requestor).to have_received(:request).with('dor/objects/druid:gv054hp4128/lifecycle?version=3')
44
+ end
45
+ end
46
+ end
27
47
  end
@@ -67,6 +67,31 @@ RSpec.describe Dor::Workflow::Client::WorkflowRoutes do
67
67
  end
68
68
  end
69
69
 
70
+ describe '#update_error_status' do
71
+ let(:mock_requestor) { instance_double(Dor::Workflow::Client::Requestor, request: '{"next_steps":["submit-marc"]}') }
72
+ let(:druid) { 'druid:mw971zk1113' }
73
+
74
+ context 'when the request is successful' do
75
+ it 'updates workflow status and return true if successful' do
76
+ expect(routes.update_error_status(druid: druid, workflow: 'etdSubmitWF', process: 'registrar-approval', error_msg: 'broken')).to be_kind_of Dor::Workflow::Response::Update
77
+ expect(mock_requestor).to have_received(:request)
78
+ .with('objects/druid:mw971zk1113/workflows/etdSubmitWF/registrar-approval',
79
+ 'put',
80
+ "<?xml version=\"1.0\"?>\n<process name=\"registrar-approval\" status=\"error\" errorMessage=\"broken\"/>\n",
81
+ content_type: 'application/xml')
82
+ end
83
+ end
84
+
85
+ context 'when the PUT to the DOR workflow service throws an exception' do
86
+ before do
87
+ allow(mock_requestor).to receive(:request).and_raise(Dor::WorkflowException, 'status 400')
88
+ end
89
+ it 'raises an exception' do
90
+ expect { routes.update_error_status(druid: druid, workflow: 'errorWF', process: 'registrar-approval', error_msg: 'broken') }.to raise_error(Dor::WorkflowException, /status 400/)
91
+ end
92
+ end
93
+ end
94
+
70
95
  describe '#delete_all_workflows' do
71
96
  subject(:delete_all_workflows) do
72
97
  routes.delete_all_workflows(pid: 'druid:mw971zk1113')
@@ -169,17 +169,21 @@ RSpec.describe Dor::Workflow::Client do
169
169
  describe '#update_workflow_error_status' do
170
170
  let(:stubs) do
171
171
  Faraday::Adapter::Test::Stubs.new do |stub|
172
- stub.put("#{@repo}/objects/#{@druid}/workflows/etdSubmitWF/reader-approval") do |env|
172
+ stub.put("objects/#{@druid}/workflows/etdSubmitWF/reader-approval") do |env|
173
173
  expect(env.body).to match(/status="error" errorMessage="Some exception" errorText="The optional stacktrace"/)
174
- [201, {}, '']
174
+ [201, {}, '{"next_steps":["submit-marc"]}']
175
175
  end
176
176
 
177
- stub.put("#{@repo}/objects/#{@druid}/workflows/errorWF/reader-approval") do |_env|
177
+ stub.put("objects/#{@druid}/workflows/errorWF/reader-approval") do |_env|
178
178
  [400, {}, '']
179
179
  end
180
180
  end
181
181
  end
182
182
 
183
+ before do
184
+ allow(Deprecation).to receive(:warn)
185
+ end
186
+
183
187
  it 'should update workflow status to error and return true if successful' do
184
188
  client.update_workflow_error_status(@repo, @druid, 'etdSubmitWF', 'reader-approval', 'Some exception', error_text: 'The optional stacktrace')
185
189
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dor-workflow-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.7.0
4
+ version: 3.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willy Mene
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-09-16 00:00:00.000000000 Z
12
+ date: 2019-09-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport