dor-workflow-service 1.7.6 → 1.7.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  module Dor
2
2
  module Workflow
3
3
  module Service
4
- VERSION = "1.7.6"
4
+ VERSION = '1.7.7'
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dor::WorkflowService do
4
+ before :each do
5
+ @logger1 = double('Logger')
6
+ allow(Dor::WorkflowService).to receive(:default_logger).and_return(@logger1)
7
+ end
8
+ describe '#configure' do
9
+ it 'pulls default_logger if not specified' do
10
+ expect(Dor::WorkflowService).to receive(:default_logger).and_return(@logger1)
11
+ Dor::WorkflowService.configure('https://dortest.stanford.edu/workflow')
12
+ end
13
+ it 'accepts :logger if specified' do
14
+ expect(Dor::WorkflowService).not_to receive(:default_logger)
15
+ Dor::WorkflowService.configure('https://dortest.stanford.edu/workflow', {:logger => @logger1})
16
+ end
17
+ end
18
+ end
data/spec/spec_helper.rb CHANGED
@@ -5,9 +5,6 @@ require 'dor-workflow-service'
5
5
  require 'equivalent-xml'
6
6
  require 'equivalent-xml/rspec_matchers'
7
7
 
8
- Bundler.require(:default, :development)
9
-
10
8
  # RSpec.configure do |conf|
11
9
  # end
12
10
 
13
- Rails = Object.new unless defined? Rails
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Dor::WorkflowService do
4
-
5
4
  let(:wf_xml) { <<-EOXML
6
5
  <workflow id="etdSubmitWF">
7
6
  <process name="register-object" status="completed" attempts="1" />
@@ -26,131 +25,130 @@ describe Dor::WorkflowService do
26
25
  }
27
26
 
28
27
  before(:each) do
29
- @repo = 'dor'
28
+ @repo = 'dor'
30
29
  @druid = 'druid:123'
31
-
32
- @mock_logger = double('logger').as_null_object
33
- allow(Rails).to receive(:logger).and_return(@mock_logger)
34
-
35
30
  @mock_resource = double('mock_rest_client_resource')
31
+ @mock_logger = double('Logger')
36
32
  allow(@mock_resource).to receive(:[]).and_return(@mock_resource)
37
33
  allow(@mock_resource).to receive(:options).and_return( {} )
34
+ allow(@mock_resource).to receive(:url).and_return( 'https://dortest.stanford.edu/workflow' )
35
+ allow(@mock_logger).to receive(:info)
38
36
  allow(RestClient::Resource).to receive(:new).and_return(@mock_resource)
37
+ allow(Dor::WorkflowService).to receive(:default_logger).and_return(@mock_logger)
39
38
  Dor::WorkflowService.configure 'https://dortest.stanford.edu/workflow'
40
39
  end
41
40
 
42
- describe "#create_workflow" do
43
- it "should pass workflow xml to the DOR workflow service and return the URL to the workflow" do
44
- expect(@mock_resource).to receive(:put).with(wf_xml_label, anything()).and_return('')
41
+ describe '#create_workflow' do
42
+ it 'should pass workflow xml to the DOR workflow service and return the URL to the workflow' do
43
+ expect(@mock_resource).to receive(:put).with(wf_xml_label, anything).and_return('')
45
44
  Dor::WorkflowService.create_workflow(@repo, @druid, 'etdSubmitWF', wf_xml)
46
45
  end
47
46
 
48
- it "should log an error and return false if the PUT to the DOR workflow service throws an exception" do
49
- ex = Exception.new("exception thrown")
50
- expect(@mock_resource).to receive(:put).and_raise(ex)
51
- expect{ Dor::WorkflowService.create_workflow(@repo, @druid, 'etdSubmitWF', wf_xml) }.to raise_error(Exception, "exception thrown")
47
+ it 'should log an error and retry upon a targetted RestClient exception, raise on an unexpected Exception' do
48
+ ex = RestClient::Exception.new(nil, 418)
49
+ ex.message = "I'm A Teapot"
50
+ runs = 0
51
+ expect(@mock_resource).to receive(:put).twice {
52
+ runs += 1
53
+ raise ex if runs == 1
54
+ raise Exception.new('Something Else Happened') if runs == 2
55
+ }
56
+ expect(@mock_logger).to receive(:warn).with(/\[Attempt 1\] RestClient::Exception: #{ex.message}/)
57
+ expect{ Dor::WorkflowService.create_workflow(@repo, @druid, 'etdSubmitWF', wf_xml) }.to raise_error(Exception, 'Something Else Happened')
52
58
  end
53
59
 
54
- it "sets the create-ds param to the value of the passed in options hash" do
60
+ it 'sets the create-ds param to the value of the passed in options hash' do
55
61
  expect(@mock_resource).to receive(:put).with(wf_xml_label, :content_type => 'application/xml',
56
62
  :params => {'create-ds' => false}).and_return('')
57
63
  Dor::WorkflowService.create_workflow(@repo, @druid, 'etdSubmitWF', wf_xml, :create_ds => false)
58
64
  end
59
65
 
60
- it "adds lane_id attributes to all steps if passed in as an option" do
61
-
66
+ it 'adds lane_id attributes to all steps if passed in as an option' do
67
+ skip 'test not implemented'
62
68
  end
63
-
64
69
  end
65
70
 
66
- describe "#add_lane_id_to_workflow_xml" do
67
-
68
- it "adds laneId attributes to all process elements" do
71
+ describe '#add_lane_id_to_workflow_xml' do
72
+ it 'adds laneId attributes to all process elements' do
69
73
  expected = <<-XML
70
74
  <workflow id="etdSubmitWF">
71
- <process name="register-object" status="completed" attempts="1" laneId="lane1"/>
72
- <process name="submit" status="waiting" laneId="lane1"/>
73
- <process name="reader-approval" status="waiting" laneId="lane1"/>
74
- <process name="registrar-approval" status="waiting" laneId="lane1"/>
75
- <process name="start-accession" status="waiting" laneId="lane1"/>
75
+ <process name="register-object" status="completed" attempts="1" laneId="lane1"/>
76
+ <process name="submit" status="waiting" laneId="lane1"/>
77
+ <process name="reader-approval" status="waiting" laneId="lane1"/>
78
+ <process name="registrar-approval" status="waiting" laneId="lane1"/>
79
+ <process name="start-accession" status="waiting" laneId="lane1"/>
76
80
  </workflow>
77
81
  XML
78
-
79
82
  expect(Dor::WorkflowService.send(:add_lane_id_to_workflow_xml, 'lane1', wf_xml)).to be_equivalent_to(expected)
80
83
  end
81
84
  end
82
85
 
83
- describe "#update_workflow_status" do
84
- before(:each) do
86
+ describe '#update_workflow_status' do
87
+ before :each do
85
88
  @xml_re = /name="reader-approval"/
86
89
  end
87
90
 
88
- it "should update workflow status and return true if successful" do
91
+ it 'should update workflow status and return true if successful' do
89
92
  built_xml = "<?xml version=\"1.0\"?>\n<process name=\"reader-approval\" status=\"completed\" elapsed=\"0\" note=\"annotation\" version=\"2\" laneId=\"lane2\"/>\n"
90
93
  expect(@mock_resource).to receive(:put).with(built_xml, { :content_type => 'application/xml' }).and_return('')
91
- expect(Dor::WorkflowService.update_workflow_status(@repo, @druid, "etdSubmitWF", "reader-approval", "completed", :version => 2, :note => 'annotation', :lane_id => 'lane2')).to be true
94
+ expect(Dor::WorkflowService.update_workflow_status(@repo, @druid, 'etdSubmitWF', 'reader-approval', 'completed', :version => 2, :note => 'annotation', :lane_id => 'lane2')).to be true
92
95
  end
93
96
 
94
- it "should return false if the PUT to the DOR workflow service throws an exception" do
95
- ex = Exception.new("exception thrown")
97
+ it 'should return false if the PUT to the DOR workflow service throws an exception' do
98
+ ex = Exception.new('exception thrown')
96
99
  expect(@mock_resource).to receive(:put).with(@xml_re, { :content_type => 'application/xml' }).and_raise(ex)
97
- expect{ Dor::WorkflowService.update_workflow_status(@repo, @druid, "etdSubmitWF", "reader-approval", "completed") }.to raise_error(Exception, "exception thrown")
100
+ expect{ Dor::WorkflowService.update_workflow_status(@repo, @druid, 'etdSubmitWF', 'reader-approval', 'completed') }.to raise_error(Exception, 'exception thrown')
98
101
  end
99
102
 
100
- it "performs a conditional update when current-status is passed as a parameter" do
101
- expect(@mock_resource).to receive(:[]).with("dor/objects/druid:123/workflows/etdSubmitWF/reader-approval?current-status=queued")
103
+ it 'performs a conditional update when current-status is passed as a parameter' do
104
+ expect(@mock_resource).to receive(:[]).with('dor/objects/druid:123/workflows/etdSubmitWF/reader-approval?current-status=queued')
102
105
  expect(@mock_resource).to receive(:put).with(@xml_re, { :content_type => 'application/xml' }).and_return('')
103
- expect(Dor::WorkflowService.update_workflow_status(@repo, @druid, "etdSubmitWF", "reader-approval", "completed", :version => 2, :note => 'annotation', :lane_id => 'lane1', :current_status => 'queued')).to be true
106
+ expect(Dor::WorkflowService.update_workflow_status(@repo, @druid, 'etdSubmitWF', 'reader-approval', 'completed', :version => 2, :note => 'annotation', :lane_id => 'lane1', :current_status => 'queued')).to be true
104
107
  end
105
108
  end
106
109
 
107
- describe "#update_workflow_error_status" do
108
- it "should update workflow status to error and return true if successful" do
110
+ describe '#update_workflow_error_status' do
111
+ it 'should update workflow status to error and return true if successful' do
109
112
  expect(@mock_resource).to receive(:put).with(/status="error" errorMessage="Some exception" errorText="The optional stacktrace"/, { :content_type => 'application/xml' }).and_return('')
110
- Dor::WorkflowService.update_workflow_error_status(@repo, @druid, "etdSubmitWF", "reader-approval", "Some exception", :error_text =>"The optional stacktrace")
113
+ Dor::WorkflowService.update_workflow_error_status(@repo, @druid, 'etdSubmitWF', 'reader-approval', 'Some exception', :error_text =>'The optional stacktrace')
111
114
  end
112
-
113
- it "should return false if the PUT to the DOR workflow service throws an exception" do
114
- ex = Exception.new("exception thrown")
115
+ it 'should return false if the PUT to the DOR workflow service throws an exception' do
116
+ ex = Exception.new('exception thrown')
115
117
  expect(@mock_resource).to receive(:put).with(/status="completed"/, { :content_type => 'application/xml' }).and_raise(ex)
116
- expect{ Dor::WorkflowService.update_workflow_status(@repo, @druid, "etdSubmitWF", "reader-approval", "completed") }.to raise_error(Exception, "exception thrown")
118
+ expect{ Dor::WorkflowService.update_workflow_status(@repo, @druid, 'etdSubmitWF', 'reader-approval', 'completed') }.to raise_error(Exception, 'exception thrown')
117
119
  end
118
120
  end
119
121
 
120
- describe "#get_workflow_status" do
121
- it "parses workflow xml and returns status as a string" do
122
+ describe '#get_workflow_status' do
123
+ it 'parses workflow xml and returns status as a string' do
122
124
  expect(@mock_resource).to receive(:get).and_return('<process name="registrar-approval" status="completed" />')
123
125
  expect(Dor::WorkflowService.get_workflow_status('dor', 'druid:123', 'etdSubmitWF', 'registrar-approval')).to eq('completed')
124
126
  end
125
-
126
- it "should throw an exception if it fails for any reason" do
127
- ex = Exception.new("exception thrown")
127
+ it 'should throw an exception if it fails for any reason' do
128
+ ex = Exception.new('exception thrown')
128
129
  expect(@mock_resource).to receive(:get).and_raise(ex)
129
-
130
- expect{ Dor::WorkflowService.get_workflow_status('dor', 'druid:123', 'etdSubmitWF', 'registrar-approval') }.to raise_error(Exception, "exception thrown")
130
+ expect{ Dor::WorkflowService.get_workflow_status('dor', 'druid:123', 'etdSubmitWF', 'registrar-approval') }.to raise_error(Exception, 'exception thrown')
131
131
  end
132
-
133
- it "should throw an exception if it cannot parse the response" do
132
+ it 'should throw an exception if it cannot parse the response' do
134
133
  expect(@mock_resource).to receive(:get).and_return('something not xml')
135
134
  expect{ Dor::WorkflowService.get_workflow_status('dor', 'druid:123', 'etdSubmitWF', 'registrar-approval') }.to raise_error(Exception, "Unable to parse response:\nsomething not xml")
136
135
  end
137
- it "should return nil if the workflow/process combination doesnt exist" do
136
+ it 'should return nil if the workflow/process combination doesnt exist' do
138
137
  expect(@mock_resource).to receive(:get).and_return('<process name="registrar-approval" status="completed" />')
139
- expect(Dor::WorkflowService.get_workflow_status('dor', 'druid:123', 'accessionWF', 'publish')).to eq(nil)
138
+ expect(Dor::WorkflowService.get_workflow_status('dor', 'druid:123', 'accessionWF', 'publish')).to be_nil
140
139
  end
141
-
142
140
  end
143
141
 
144
- describe "#get_workflow_xml" do
145
- it "returns the xml for a given repository, druid, and workflow" do
142
+ describe '#get_workflow_xml' do
143
+ it 'returns the xml for a given repository, druid, and workflow' do
146
144
  xml = '<workflow id="etdSubmitWF"><process name="registrar-approval" status="completed" /></workflow>'
147
145
  expect(@mock_resource).to receive(:get).and_return(xml)
148
146
  expect(Dor::WorkflowService.get_workflow_xml('dor', 'druid:123', 'etdSubmitWF')).to eq(xml)
149
147
  end
150
148
  end
151
149
 
152
- describe "#get_lifecycle" do
153
- it "returns a Time object reprenting when the milestone was reached" do
150
+ describe '#get_lifecycle' do
151
+ it 'returns a Time object reprenting when the milestone was reached' do
154
152
  xml = <<-EOXML
155
153
  <lifecycle objectId="druid:ct011cv6501">
156
154
  <milestone date="2010-04-27T11:34:17-0700">registered</milestone>
@@ -166,104 +164,96 @@ describe Dor::WorkflowService do
166
164
  expect(@mock_resource).to receive(:get).and_return('<lifecycle/>')
167
165
  expect(Dor::WorkflowService.get_lifecycle('dor', 'druid:abc', 'inprocess')).to be_nil
168
166
  end
169
-
170
167
  end
171
168
 
172
- describe "#get_objects_for_workstep" do
169
+ describe '#get_objects_for_workstep' do
173
170
  before :each do
174
- @repository = "dor"
175
- @workflow = "googleScannedBookWF"
176
- @completed = "google-download"
177
- @waiting = "process-content"
171
+ @repository = 'dor'
172
+ @workflow = 'googleScannedBookWF'
173
+ @completed = 'google-download'
174
+ @waiting = 'process-content'
178
175
  end
179
176
 
180
- context "a query with one step completed and one waiting" do
181
- it "creates the URI string with only the one completed step" do
177
+ context 'a query with one step completed and one waiting' do
178
+ it 'creates the URI string with only the one completed step' do
182
179
  expect(@mock_resource).to receive(:[]).with("workflow_queue?waiting=#{@repository}:#{@workflow}:#{@waiting}&completed=#{@repository}:#{@workflow}:#{@completed}&lane-id=default")
183
180
  expect(@mock_resource).to receive(:get).and_return(%{<objects count="1"><object id="druid:ab123de4567"/><object id="druid:ab123de9012"/></objects>})
184
- expect(Dor::WorkflowService.get_objects_for_workstep(@completed, @waiting, 'default', :default_repository => @repository, :default_workflow => @workflow)).to eq(['druid:ab123de4567','druid:ab123de9012'])
181
+ expect(Dor::WorkflowService.get_objects_for_workstep(@completed, @waiting, 'default', :default_repository => @repository, :default_workflow => @workflow)).to eq(['druid:ab123de4567', 'druid:ab123de9012'])
185
182
  end
186
183
  end
187
184
 
188
- context "a query with TWO steps completed and one waiting" do
189
- it "creates the URI string with the two completed steps correctly" do
190
- second_completed="google-convert"
185
+ context 'a query with TWO steps completed and one waiting' do
186
+ it 'creates the URI string with the two completed steps correctly' do
187
+ second_completed = 'google-convert'
191
188
  expect(@mock_resource).to receive(:[]).with("workflow_queue?waiting=#{@repository}:#{@workflow}:#{@waiting}&completed=#{@repository}:#{@workflow}:#{@completed}&completed=#{@repository}:#{@workflow}:#{second_completed}&lane-id=default")
192
189
  expect(@mock_resource).to receive(:get).and_return(%{<objects count="1"><object id="druid:ab123de4567"/><object id="druid:ab123de9012"/></objects>})
193
- expect(Dor::WorkflowService.get_objects_for_workstep([@completed,second_completed], @waiting, 'default', :default_repository => @repository, :default_workflow => @workflow)).to eq(['druid:ab123de4567','druid:ab123de9012'])
190
+ expect(Dor::WorkflowService.get_objects_for_workstep([@completed, second_completed], @waiting, 'default', :default_repository => @repository, :default_workflow => @workflow)).to eq(['druid:ab123de4567', 'druid:ab123de9012'])
194
191
  end
195
192
  end
196
193
 
197
- context "a query using qualified workflow names for completed and waiting" do
198
- it "creates the URI string with the two completed steps across repositories correctly" do
199
- qualified_waiting = "#{@repository}:#{@workflow}:#{@waiting}"
200
- qualified_completed = "#{@repository}:#{@workflow}:#{@completed}"
201
- repo2 = "sdr"
202
- workflow2 = "sdrIngestWF"
203
- completed2="complete-deposit"
204
- completed3="ingest-transfer"
205
- qualified_completed2 = "#{repo2}:#{workflow2}:#{completed2}"
206
- qualified_completed3 = "#{repo2}:#{workflow2}:#{completed3}"
207
- expect(@mock_resource).to receive(:[]).with("workflow_queue?waiting=#{qualified_waiting}&completed=#{qualified_completed}&completed=#{qualified_completed2}&completed=#{qualified_completed3}&lane-id=default")
208
- expect(@mock_resource).to receive(:get).and_return(%{<objects count="2"><object id="druid:ab123de4567"/><object id="druid:ab123de9012"/></objects>})
209
- expect(Dor::WorkflowService.get_objects_for_workstep([qualified_completed, qualified_completed2, qualified_completed3], qualified_waiting)).to eq(['druid:ab123de4567', 'druid:ab123de9012'])
194
+ context 'a query using qualified workflow names for completed and waiting' do
195
+ before :each do
196
+ @qualified_waiting = "#{@repository}:#{@workflow}:#{@waiting}"
197
+ @qualified_completed = "#{@repository}:#{@workflow}:#{@completed}"
210
198
  end
211
199
 
212
- it "same but with lane_id" do
213
- qualified_waiting = "#{@repository}:#{@workflow}:#{@waiting}"
214
- qualified_completed = "#{@repository}:#{@workflow}:#{@completed}"
215
- repo2 = "sdr"
216
- workflow2 = "sdrIngestWF"
217
- completed2="complete-deposit"
218
- completed3="ingest-transfer"
219
- qualified_completed2 = "#{repo2}:#{workflow2}:#{completed2}"
220
- qualified_completed3 = "#{repo2}:#{workflow2}:#{completed3}"
221
- expect(@mock_resource).to receive(:[]).with("workflow_queue?waiting=#{qualified_waiting}&completed=#{qualified_completed}&completed=#{qualified_completed2}&completed=#{qualified_completed3}&lane-id=lane1")
222
- expect(@mock_resource).to receive(:get).and_return(%{<objects count="2"><object id="druid:ab123de4567"/><object id="druid:ab123de9012"/></objects>})
223
- expect(Dor::WorkflowService.get_objects_for_workstep([qualified_completed, qualified_completed2, qualified_completed3], qualified_waiting, "lane1")).to eq([ 'druid:ab123de4567', 'druid:ab123de9012'])
200
+ RSpec.shared_examples 'lane-aware' do
201
+ it 'creates the URI string with the two completed steps across repositories correctly' do
202
+ qualified_completed2 = "sdr:sdrIngestWF:complete-deposit"
203
+ qualified_completed3 = "sdr:sdrIngestWF:ingest-transfer"
204
+ expect(@mock_resource).to receive(:[]).with("workflow_queue?waiting=#{@qualified_waiting}&completed=#{@qualified_completed}&completed=#{qualified_completed2}&completed=#{qualified_completed3}&lane-id=#{laneid}")
205
+ expect(@mock_resource).to receive(:get).and_return(%{<objects count="2"><object id="druid:ab123de4567"/><object id="druid:ab123de9012"/></objects>})
206
+ args = [[@qualified_completed, qualified_completed2, qualified_completed3], @qualified_waiting]
207
+ args << laneid if laneid != 'default'
208
+ expect(Dor::WorkflowService.get_objects_for_workstep(*args)).to eq(['druid:ab123de4567', 'druid:ab123de9012'])
209
+ end
224
210
  end
225
211
 
226
- it "creates the URI string with only one completed step passed in as a String" do
227
- qualified_waiting = "#{@repository}:#{@workflow}:#{@waiting}"
228
- qualified_completed = "#{@repository}:#{@workflow}:#{@completed}"
229
-
230
- expect(@mock_resource).to receive(:[]).with("workflow_queue?waiting=#{qualified_waiting}&completed=#{qualified_completed}&lane-id=default")
231
- expect(@mock_resource).to receive(:get).and_return(%{<objects count="1"><object id="druid:ab123de4567"/></objects>})
232
- expect(Dor::WorkflowService.get_objects_for_workstep(qualified_completed, qualified_waiting)).to eq(['druid:ab123de4567'])
212
+ describe 'default lane_id' do
213
+ it_behaves_like 'lane-aware' do
214
+ let(:laneid) { 'default' }
215
+ end
233
216
  end
234
-
235
- it "creates the URI string without any completed steps, only waiting" do
236
- qualified_waiting = "#{@repository}:#{@workflow}:#{@waiting}"
237
-
238
- expect(@mock_resource).to receive(:[]).with("workflow_queue?waiting=#{qualified_waiting}&lane-id=default")
239
- expect(@mock_resource).to receive(:get).and_return(%{<objects count="1"><object id="druid:ab123de4567"/></objects>})
240
- expect(Dor::WorkflowService.get_objects_for_workstep(nil, qualified_waiting)).to eq(['druid:ab123de4567'])
217
+ describe 'explicit lane_id' do
218
+ it_behaves_like 'lane-aware' do
219
+ let(:laneid) { 'lane1' }
220
+ end
241
221
  end
242
222
 
243
- it "same but with lane_id" do
244
- qualified_waiting = "#{@repository}:#{@workflow}:#{@waiting}"
245
-
246
- expect(@mock_resource).to receive(:[]).with("workflow_queue?waiting=#{qualified_waiting}&lane-id=lane1")
247
- expect(@mock_resource).to receive(:get).and_return(%{<objects count="1"><object id="druid:ab123de4567"/></objects>})
248
- expect(Dor::WorkflowService.get_objects_for_workstep(nil, qualified_waiting, "lane1")).to eq([ 'druid:ab123de4567' ])
223
+ describe 'URI string creation' do
224
+ before :each do
225
+ expect(@mock_resource).to receive(:get).and_return(%{<objects count="1"><object id="druid:ab123de4567"/></objects>})
226
+ end
227
+ it 'with only one completed step passed in as a String' do
228
+ expect(@mock_resource).to receive(:[]).with("workflow_queue?waiting=#{@qualified_waiting}&completed=#{@qualified_completed}&lane-id=default")
229
+ expect(Dor::WorkflowService.get_objects_for_workstep(@qualified_completed, @qualified_waiting)).to eq(['druid:ab123de4567'])
230
+ end
231
+ it 'without any completed steps, only waiting' do
232
+ expect(@mock_resource).to receive(:[]).with("workflow_queue?waiting=#{@qualified_waiting}&lane-id=default")
233
+ expect(Dor::WorkflowService.get_objects_for_workstep(nil, @qualified_waiting)).to eq(['druid:ab123de4567'])
234
+ end
235
+ it 'same but with lane_id' do
236
+ expect(@mock_resource).to receive(:[]).with("workflow_queue?waiting=#{@qualified_waiting}&lane-id=lane1")
237
+ expect(Dor::WorkflowService.get_objects_for_workstep(nil, @qualified_waiting, 'lane1')).to eq([ 'druid:ab123de4567' ])
238
+ end
249
239
  end
250
240
  end
251
241
  end
252
242
 
253
- context "get empty workflow queue" do
254
- it "returns an empty list if it encounters an empty workflow queue" do
255
- repository = "dor"
256
- workflow = "googleScannedBookWF"
257
- completed = "google-download"
258
- waiting = "process-content"
243
+ context 'get empty workflow queue' do
244
+ it 'returns an empty list if it encounters an empty workflow queue' do
245
+ repository = 'dor'
246
+ workflow = 'googleScannedBookWF'
247
+ completed = 'google-download'
248
+ waiting = 'process-content'
259
249
  expect(@mock_resource).to receive(:[]).with("workflow_queue?waiting=#{repository}:#{workflow}:#{waiting}&completed=#{repository}:#{workflow}:#{completed}&lane-id=default")
260
250
  expect(@mock_resource).to receive(:get).and_return(%{<objects count="0"/>})
261
251
  expect(Dor::WorkflowService.get_objects_for_workstep(completed, waiting, 'default', :default_repository => repository, :default_workflow => workflow)).to eq([])
262
252
  end
263
253
  end
264
254
 
265
- describe "#delete_workflow" do
266
- it "sends a delete request to the workflow service" do
255
+ describe '#delete_workflow' do
256
+ it 'sends a delete request to the workflow service' do
267
257
  expect(@mock_resource).to receive(:[]).with("#{@repo}/objects/#{@druid}/workflows/accessionWF")
268
258
  expect(@mock_resource).to receive(:delete)
269
259
  Dor::WorkflowService.delete_workflow(@repo, @druid, 'accessionWF')
@@ -271,17 +261,17 @@ describe Dor::WorkflowService do
271
261
  end
272
262
  describe 'get_milestones' do
273
263
  it 'should include the version in with the milestones' do
274
- xml='<?xml version="1.0" encoding="UTF-8"?><lifecycle objectId="druid:gv054hp4128"><milestone date="2012-01-26T21:06:54-0800" version="2">published</milestone></lifecycle>'
275
- xml=Nokogiri::XML(xml)
264
+ xml = '<?xml version="1.0" encoding="UTF-8"?><lifecycle objectId="druid:gv054hp4128"><milestone date="2012-01-26T21:06:54-0800" version="2">published</milestone></lifecycle>'
265
+ xml = Nokogiri::XML(xml)
276
266
  allow(Dor::WorkflowService).to receive(:query_lifecycle).and_return(xml)
277
- milestones=Dor::WorkflowService.get_milestones(@repo, @druid)
278
- expect(milestones.first[:milestone]).to eq("published")
279
- expect(milestones.first[:version]).to eq("2")
267
+ milestones = Dor::WorkflowService.get_milestones(@repo, @druid)
268
+ expect(milestones.first[:milestone]).to eq('published')
269
+ expect(milestones.first[:version]).to eq('2')
280
270
  end
281
271
  end
282
272
 
283
- describe ".get_active_workflows" do
284
- it "it returns an array of active workflows only" do
273
+ describe '.get_active_workflows' do
274
+ it 'it returns an array of active workflows only' do
285
275
  xml = <<-XML
286
276
  <workflows objectId="druid:mw971zk1113">
287
277
  <workflow repository="dor" objectId="druid:mw971zk1113" id="accessionWF">
@@ -293,67 +283,86 @@ describe Dor::WorkflowService do
293
283
  </workflow>
294
284
  </workflows>
295
285
  XML
296
-
297
286
  allow(Dor::WorkflowService).to receive(:get_workflow_xml) { xml }
298
287
  expect(Dor::WorkflowService.get_active_workflows('dor', 'druid:mw971zk1113')).to eq(['accessionWF'])
299
288
  end
300
289
  end
301
290
 
302
- describe "#close_version" do
303
- it "calls the versionClose endpoint with druid" do
304
- expect(@mock_resource).to receive(:[]).with("dor/objects/druid:123/versionClose").and_return(@mock_resource)
291
+ describe '#close_version' do
292
+ it 'calls the versionClose endpoint with druid' do
293
+ expect(@mock_resource).to receive(:[]).with('dor/objects/druid:123/versionClose').and_return(@mock_resource)
305
294
  expect(@mock_resource).to receive(:post).with('').and_return('')
306
295
  Dor::WorkflowService.close_version(@repo, @druid)
307
296
  end
308
297
 
309
- it "optionally prevents creation of accessionWF" do
310
- expect(@mock_resource).to receive(:[]).with("dor/objects/druid:123/versionClose?create-accession=false").and_return(@mock_resource)
298
+ it 'optionally prevents creation of accessionWF' do
299
+ expect(@mock_resource).to receive(:[]).with('dor/objects/druid:123/versionClose?create-accession=false').and_return(@mock_resource)
311
300
  expect(@mock_resource).to receive(:post).with('').and_return('')
312
301
  Dor::WorkflowService.close_version(@repo, @druid, false)
313
302
  end
314
303
  end
315
304
 
316
- describe ".get_stale_queued_workflows" do
317
- it "returns an Array of Hashes containing each workflow step" do
305
+ describe '.get_stale_queued_workflows' do
306
+ it 'returns an Array of Hashes containing each workflow step' do
318
307
  xml = <<-XML
319
308
  <workflows>
320
309
  <workflow laneId="lane1" note="annotation" lifecycle="in-process" errorText="stacktrace" errorMessage="NullPointerException" elapsed="1.173" repository="dor" attempts="0" datetime="2008-11-15T13:30:00-0800" status="waiting" process="content-metadata" name="accessionWF" druid="dr:123"/>
321
310
  <workflow laneId="lane2" note="annotation" lifecycle="in-process" errorText="stacktrace" errorMessage="NullPointerException" elapsed="1.173" repository="dor" attempts="0" datetime="2008-11-15T13:30:00-0800" status="waiting" process="jp2-create" name="assemblyWF" druid="dr:456"/>
322
311
  </workflows>
323
312
  XML
324
- expect(@mock_resource).to receive(:[]).with("workflow_queue/all_queued?repository=dor&hours-ago=24&limit=100")
313
+ expect(@mock_resource).to receive(:[]).with('workflow_queue/all_queued?repository=dor&hours-ago=24&limit=100')
325
314
  expect(@mock_resource).to receive(:get).and_return(xml)
326
-
327
315
  ah = Dor::WorkflowService.get_stale_queued_workflows 'dor', :hours_ago => 24, :limit => 100
328
- expected = [ { :workflow => 'accessionWF', :step => 'content-metadata', :druid => 'dr:123', :lane_id => 'lane1'},
329
- { :workflow => 'assemblyWF', :step => 'jp2-create', :druid => 'dr:456', :lane_id => 'lane2'} ]
316
+ expected = [
317
+ { :workflow => 'accessionWF', :step => 'content-metadata', :druid => 'dr:123', :lane_id => 'lane1' },
318
+ { :workflow => 'assemblyWF', :step => 'jp2-create', :druid => 'dr:456', :lane_id => 'lane2' }
319
+ ]
330
320
  expect(ah).to eql(expected)
331
321
  end
332
322
  end
333
323
 
334
- describe ".count_stale_queued_workflows" do
335
- it "returns the number of queued workflow steps" do
336
- expect(@mock_resource).to receive(:[]).with("workflow_queue/all_queued?repository=dor&hours-ago=48&count-only=true")
324
+ describe '.count_stale_queued_workflows' do
325
+ it 'returns the number of queued workflow steps' do
326
+ expect(@mock_resource).to receive(:[]).with('workflow_queue/all_queued?repository=dor&hours-ago=48&count-only=true')
337
327
  expect(@mock_resource).to receive(:get).and_return(%{<objects count="10"/>})
338
-
339
328
  expect(Dor::WorkflowService.count_stale_queued_workflows('dor', :hours_ago => 48)).to eq(10)
340
329
  end
341
330
  end
342
331
 
343
- describe ".get_lane_ids" do
344
- it "returns the lane ids for a given workflow step" do
332
+ describe '.get_lane_ids' do
333
+ it 'returns the lane ids for a given workflow step' do
345
334
  xml = <<-XML
346
335
  <lanes>
347
336
  <lane id="lane1"/>
348
337
  <lane id="lane2"/>
349
338
  </lanes>
350
339
  XML
351
-
352
- expect(@mock_resource).to receive(:[]).with("workflow_queue/lane_ids?step=dor:accessionWF:shelve")
340
+ expect(@mock_resource).to receive(:[]).with('workflow_queue/lane_ids?step=dor:accessionWF:shelve')
353
341
  expect(@mock_resource).to receive(:get).and_return(xml)
354
-
355
342
  expect(Dor::WorkflowService.get_lane_ids('dor', 'accessionWF', 'shelve')).to eq(%w(lane1 lane2))
356
343
  end
357
344
  end
358
345
 
346
+ describe 'protected method' do
347
+ describe '#build_queued_uri' do
348
+ it 'does something' do
349
+ skip 'test unimplemented'
350
+ end
351
+ end
352
+ describe '#parse_queued_workflows_response' do
353
+ it 'does something' do
354
+ skip 'test unimplemented'
355
+ end
356
+ end
357
+ describe '#add_lane_id_to_workflow_xml' do
358
+ it 'does something' do
359
+ skip 'test unimplemented'
360
+ end
361
+ end
362
+ describe '#count_objects_in_step' do
363
+ it 'does something' do
364
+ skip 'test unimplemented'
365
+ end
366
+ end
367
+ end
359
368
  end