embulk-input-jira 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +10 -5
- data/.travis.yml +4 -34
- data/CHANGELOG.md +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +5 -4
- data/build.gradle +116 -0
- data/config/checkstyle/checkstyle.xml +128 -0
- data/config/checkstyle/default.xml +108 -0
- data/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/gradle/wrapper/gradle-wrapper.properties +5 -0
- data/gradlew +172 -0
- data/gradlew.bat +84 -0
- data/lib/embulk/guess/jira.rb +24 -0
- data/lib/embulk/input/jira.rb +3 -169
- data/src/main/java/org/embulk/input/jira/AuthenticateMethod.java +27 -0
- data/src/main/java/org/embulk/input/jira/Constant.java +17 -0
- data/src/main/java/org/embulk/input/jira/Issue.java +150 -0
- data/src/main/java/org/embulk/input/jira/JiraInputPlugin.java +226 -0
- data/src/main/java/org/embulk/input/jira/client/JiraClient.java +254 -0
- data/src/main/java/org/embulk/input/jira/util/JiraException.java +18 -0
- data/src/main/java/org/embulk/input/jira/util/JiraUtil.java +264 -0
- data/src/test/java/org/embulk/input/jira/IssueTest.java +278 -0
- data/src/test/java/org/embulk/input/jira/JiraInputPluginTest.java +204 -0
- data/src/test/java/org/embulk/input/jira/JiraPluginTestRuntime.java +133 -0
- data/src/test/java/org/embulk/input/jira/TestHelpers.java +41 -0
- data/src/test/java/org/embulk/input/jira/client/JiraClientTest.java +222 -0
- data/src/test/java/org/embulk/input/jira/util/JiraUtilTest.java +318 -0
- data/src/test/resources/config.yml +13 -0
- data/src/test/resources/issue_flatten.json +129 -0
- data/src/test/resources/issue_flatten_expected.json +73 -0
- data/src/test/resources/issue_get.json +36 -0
- data/src/test/resources/issue_get_expected.json +62 -0
- data/src/test/resources/jira_client.json +81 -0
- data/src/test/resources/jira_input_plugin.json +114 -0
- data/src/test/resources/jira_util.json +26 -0
- metadata +55 -175
- data/Gemfile +0 -3
- data/LICENSE +0 -13
- data/Rakefile +0 -15
- data/embulk-input-jira.gemspec +0 -27
- data/gemfiles/embulk-0.8.0-latest +0 -4
- data/gemfiles/embulk-0.8.7 +0 -4
- data/gemfiles/embulk-0.8.8 +0 -4
- data/gemfiles/embulk-latest +0 -4
- data/gemfiles/template.erb +0 -4
- data/lib/embulk/input/jira_api.rb +0 -9
- data/lib/embulk/input/jira_api/client.rb +0 -144
- data/lib/embulk/input/jira_api/issue.rb +0 -133
- data/lib/embulk/input/jira_input_plugin_utils.rb +0 -58
- data/spec/embulk/input/jira-input-plugin-utils_spec.rb +0 -89
- data/spec/embulk/input/jira_api/client_spec.rb +0 -224
- data/spec/embulk/input/jira_api/issue_spec.rb +0 -394
- data/spec/embulk/input/jira_spec.rb +0 -322
- data/spec/embulk_spec.rb +0 -32
- data/spec/spec_helper.rb +0 -26
- data/spec/support/stdout_and_err_capture.rb +0 -45
@@ -1,322 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Embulk::Input::Jira do
|
4
|
-
let(:username) { "jira-user" }
|
5
|
-
let(:password) { "password" }
|
6
|
-
let(:uri) { "http://jira.example/" }
|
7
|
-
let(:jql) { "PROJECT=#{project_name}" }
|
8
|
-
let(:project_name) { "FOO" }
|
9
|
-
|
10
|
-
describe ".transaction" do
|
11
|
-
subject { described_class.transaction(config, &control) }
|
12
|
-
|
13
|
-
let(:config) { Object.new } # add mock later
|
14
|
-
let(:control) { Proc.new{|task, columns, count| } } # do nothing
|
15
|
-
|
16
|
-
let(:task) do
|
17
|
-
{
|
18
|
-
username: username,
|
19
|
-
password: password,
|
20
|
-
uri: uri,
|
21
|
-
jql: jql,
|
22
|
-
attributes: {
|
23
|
-
"project.key" => :string,
|
24
|
-
"comment.total" => :long
|
25
|
-
},
|
26
|
-
retry_limit: 5,
|
27
|
-
retry_initial_wait_sec: 1,
|
28
|
-
}
|
29
|
-
end
|
30
|
-
|
31
|
-
let(:columns) do
|
32
|
-
[
|
33
|
-
{"name" => "project.key", "type" => "string"},
|
34
|
-
{"name" => "comment.total", "type" => "long"}
|
35
|
-
]
|
36
|
-
end
|
37
|
-
|
38
|
-
let(:column_structs) do
|
39
|
-
[
|
40
|
-
Embulk::Column.new(nil, "project.key", :string),
|
41
|
-
Embulk::Column.new(nil, "comment.total", :long)
|
42
|
-
]
|
43
|
-
end
|
44
|
-
|
45
|
-
before do
|
46
|
-
allow(config).to receive(:param).with(:username, :string).and_return(username)
|
47
|
-
allow(config).to receive(:param).with(:password, :string).and_return(password)
|
48
|
-
allow(config).to receive(:param).with(:uri, :string).and_return(uri)
|
49
|
-
allow(config).to receive(:param).with(:jql, :string).and_return(jql)
|
50
|
-
allow(config).to receive(:param).with(:columns, :array).and_return(columns)
|
51
|
-
allow(config).to receive(:param).with(:retry_limit, :integer, default: 5).and_return(5)
|
52
|
-
allow(config).to receive(:param).with(:retry_initial_wait_sec, :integer, default: 1).and_return(1)
|
53
|
-
end
|
54
|
-
|
55
|
-
# NOTE: I should check other factor, but i don't know it...
|
56
|
-
it "calls .resume method with proper parameters" do
|
57
|
-
expect(described_class).to receive(:resume).with(task, column_structs, 1, &control)
|
58
|
-
subject
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe ".resume" do
|
63
|
-
subject { described_class.resume(task, columns, count, &control) }
|
64
|
-
|
65
|
-
let(:task) do
|
66
|
-
{
|
67
|
-
username: username,
|
68
|
-
password: password,
|
69
|
-
uri: uri,
|
70
|
-
jql: jql,
|
71
|
-
attributes: {
|
72
|
-
"project.key" => :string,
|
73
|
-
"comment.total" => :long
|
74
|
-
}
|
75
|
-
}
|
76
|
-
end
|
77
|
-
|
78
|
-
let(:columns) do
|
79
|
-
[
|
80
|
-
Embulk::Column.new(nil, "project.key", :string),
|
81
|
-
Embulk::Column.new(nil, "comment.total", :long)
|
82
|
-
]
|
83
|
-
end
|
84
|
-
|
85
|
-
let(:count) { 1 }
|
86
|
-
let(:control) { Proc.new{|task, columns, count| } } # do nothing
|
87
|
-
|
88
|
-
let(:next_config_diff) { {} }
|
89
|
-
|
90
|
-
it "returns next_config_diff" do
|
91
|
-
expect(subject).to eq next_config_diff
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
describe ".guess" do
|
96
|
-
subject { described_class.guess(config) }
|
97
|
-
|
98
|
-
let(:config) { Object.new } # add mock later
|
99
|
-
|
100
|
-
let(:jira_api) { Embulk::Input::JiraApi::Client.new }
|
101
|
-
let(:jira_issues) { [Embulk::Input::JiraApi::Issue.new(attributes)] }
|
102
|
-
let(:attributes) do
|
103
|
-
{
|
104
|
-
"id" => "100",
|
105
|
-
"jira_key" => "FOO-100",
|
106
|
-
"fields" =>
|
107
|
-
{
|
108
|
-
"project" => {
|
109
|
-
"name" => project_name,
|
110
|
-
"key" => project_name,
|
111
|
-
},
|
112
|
-
"comment" => {
|
113
|
-
"total" => 0,
|
114
|
-
"comments" => []
|
115
|
-
}
|
116
|
-
}
|
117
|
-
}
|
118
|
-
end
|
119
|
-
|
120
|
-
let(:guessed_config) do
|
121
|
-
{
|
122
|
-
"columns" => [
|
123
|
-
{name: "comment.comments", type: :string},
|
124
|
-
{name: "comment.total", type: :long},
|
125
|
-
{name: "id", type: :long},
|
126
|
-
{name: "key", type: :string},
|
127
|
-
{name: "project.key", type: :string},
|
128
|
-
{name: "project.name", type: :string},
|
129
|
-
]
|
130
|
-
}
|
131
|
-
end
|
132
|
-
|
133
|
-
before do
|
134
|
-
allow(jira_api).to receive(:check_user_credential).with(username).and_return(username)
|
135
|
-
allow(jira_api).to receive(:search_issues).with(jql, max_results: described_class::GUESS_RECORDS_COUNT).and_return(jira_issues)
|
136
|
-
|
137
|
-
allow(config).to receive(:param).with(:username, :string).and_return(username)
|
138
|
-
allow(config).to receive(:param).with(:password, :string).and_return(password)
|
139
|
-
allow(config).to receive(:param).with(:uri, :string).and_return(uri)
|
140
|
-
allow(config).to receive(:param).with(:jql, :string).and_return(jql)
|
141
|
-
allow(config).to receive(:param).with(:retry_limit, :integer, anything).and_return(0)
|
142
|
-
allow(config).to receive(:param).with(:retry_initial_wait_sec, :integer, anything).and_return(0)
|
143
|
-
end
|
144
|
-
|
145
|
-
it "setup Embulk::Input::JiraApi::Client" do
|
146
|
-
expect(Embulk::Input::JiraApi::Client).to receive(:setup).and_return(jira_api)
|
147
|
-
subject
|
148
|
-
end
|
149
|
-
|
150
|
-
it "returns guessed config" do
|
151
|
-
allow(Embulk::Input::JiraApi::Client).to receive(:setup).and_return(jira_api)
|
152
|
-
|
153
|
-
expect(subject).to eq guessed_config
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
describe "#init (.new)" do
|
158
|
-
# NOTE: InputPlugin.initialize calls #init method.
|
159
|
-
|
160
|
-
subject { described_class.new({}, nil, nil, nil) }
|
161
|
-
|
162
|
-
it "setup Embulk::Input::JiraApi::Client" do
|
163
|
-
expect(Embulk::Input::JiraApi::Client).to receive(:setup)
|
164
|
-
subject
|
165
|
-
end
|
166
|
-
|
167
|
-
it "is a Embulk::InputPlugin" do
|
168
|
-
allow(Embulk::Input::JiraApi::Client).to receive(:setup)
|
169
|
-
expect(subject).to be_a(Embulk::InputPlugin)
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
describe "#run" do
|
174
|
-
subject do
|
175
|
-
allow(plugin).to receive(:logger).and_return(::Logger.new(File::NULL))
|
176
|
-
silence do
|
177
|
-
plugin.run
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
let(:plugin) { described_class.new(task, nil, nil, page_builder) }
|
182
|
-
let(:jira_api) { Embulk::Input::JiraApi::Client.new }
|
183
|
-
let(:jira_issues) do
|
184
|
-
(1..total_count).map do |i|
|
185
|
-
attributes = fields.merge("id" => i.to_s, "jira_key" => "FOO-#{i}")
|
186
|
-
|
187
|
-
Embulk::Input::JiraApi::Issue.new(attributes)
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
let(:total_count) { max_result + 10 }
|
192
|
-
let(:max_result) { described_class::PER_PAGE }
|
193
|
-
|
194
|
-
|
195
|
-
let(:page_builder) { Object.new } # add mock later
|
196
|
-
let(:task) do
|
197
|
-
{
|
198
|
-
jql: jql,
|
199
|
-
attributes: {"project.key" => "string"}
|
200
|
-
}
|
201
|
-
end
|
202
|
-
|
203
|
-
let(:fields) do
|
204
|
-
{
|
205
|
-
"fields" =>
|
206
|
-
{
|
207
|
-
"project" => {
|
208
|
-
"key" => project_name,
|
209
|
-
},
|
210
|
-
}
|
211
|
-
}
|
212
|
-
end
|
213
|
-
|
214
|
-
let(:commit_report) { {} }
|
215
|
-
let(:username) { "jira-user" }
|
216
|
-
|
217
|
-
before do
|
218
|
-
allow(jira_api).to receive(:preview?).and_return(false)
|
219
|
-
|
220
|
-
# TODO: create stubs without each `it` expected
|
221
|
-
allow(Embulk::Input::JiraApi::Client).to receive(:setup).and_return(jira_api)
|
222
|
-
allow(jira_api).to receive(:check_user_credential).and_return(username)
|
223
|
-
|
224
|
-
0.step(total_count, max_result) do |start_at|
|
225
|
-
issues = jira_issues[start_at..(start_at + max_result - 1)]
|
226
|
-
allow(jira_api).to receive(:search_issues).with(jql, start_at: start_at).and_return(issues)
|
227
|
-
end
|
228
|
-
allow(jira_api).to receive(:total_count).and_return(total_count)
|
229
|
-
|
230
|
-
allow(page_builder).to receive(:add).with([project_name])
|
231
|
-
allow(page_builder).to receive(:finish)
|
232
|
-
end
|
233
|
-
|
234
|
-
it 'search JIRA issues' do
|
235
|
-
expect(jira_api).to receive(:search_issues)
|
236
|
-
subject
|
237
|
-
end
|
238
|
-
|
239
|
-
it 'page build and finish' do
|
240
|
-
expect(page_builder).to receive(:add).with([project_name]).exactly(total_count).times
|
241
|
-
expect(page_builder).to receive(:finish)
|
242
|
-
subject
|
243
|
-
end
|
244
|
-
|
245
|
-
it 'returns commit report' do
|
246
|
-
expect(subject).to eq commit_report
|
247
|
-
end
|
248
|
-
|
249
|
-
end
|
250
|
-
|
251
|
-
describe "preview" do
|
252
|
-
let(:plugin) { described_class.new(task, nil, nil, page_builder) }
|
253
|
-
let(:task) do
|
254
|
-
{
|
255
|
-
jql: jql,
|
256
|
-
attributes: {"project.key" => "string"}
|
257
|
-
}
|
258
|
-
end
|
259
|
-
let(:page_builder) { double("page_builder") }
|
260
|
-
let(:jira_api) { Embulk::Input::JiraApi::Client.new }
|
261
|
-
let(:jira_issues) { [Embulk::Input::JiraApi::Issue.new(attributes)] }
|
262
|
-
let(:username) { "jira-user" }
|
263
|
-
let(:attributes) do
|
264
|
-
{
|
265
|
-
"id" => "100",
|
266
|
-
"jira_key" => "FOO-100",
|
267
|
-
"fields" =>
|
268
|
-
{
|
269
|
-
"project" => {
|
270
|
-
"name" => project_name,
|
271
|
-
"key" => project_name,
|
272
|
-
},
|
273
|
-
"comment" => {
|
274
|
-
"total" => 0,
|
275
|
-
"comments" => []
|
276
|
-
}
|
277
|
-
}
|
278
|
-
}
|
279
|
-
end
|
280
|
-
|
281
|
-
|
282
|
-
subject { plugin.run }
|
283
|
-
|
284
|
-
before do
|
285
|
-
allow(Embulk::Input::JiraApi::Client).to receive(:setup).and_return(jira_api)
|
286
|
-
allow(plugin).to receive(:logger).and_return(::Logger.new(File::NULL))
|
287
|
-
allow(plugin).to receive(:preview?).and_return(true)
|
288
|
-
allow(jira_api).to receive(:check_user_credential).and_return(username)
|
289
|
-
allow(jira_api).to receive(:search_issues).and_return(jira_issues)
|
290
|
-
allow(page_builder).to receive(:add)
|
291
|
-
allow(page_builder).to receive(:finish)
|
292
|
-
end
|
293
|
-
|
294
|
-
it "max_results with PREVIEW_RECORDS_COUNT" do
|
295
|
-
expect(jira_api).to receive(:search_issues).with(jql, max_results: Embulk::Input::Jira::PREVIEW_RECORDS_COUNT)
|
296
|
-
subject
|
297
|
-
end
|
298
|
-
|
299
|
-
it "call page_builder.add and page_builder.finish" do
|
300
|
-
expect(page_builder).to receive(:add).exactly(jira_issues.length).times
|
301
|
-
expect(page_builder).to receive(:finish)
|
302
|
-
subject
|
303
|
-
end
|
304
|
-
end
|
305
|
-
|
306
|
-
describe ".logger" do
|
307
|
-
let(:logger) { described_class.logger }
|
308
|
-
|
309
|
-
subject { logger }
|
310
|
-
|
311
|
-
it { is_expected.to be_a(Embulk::Logger) }
|
312
|
-
end
|
313
|
-
|
314
|
-
describe "#logger" do
|
315
|
-
let(:instance) { described_class.new({}, nil, nil, nil) }
|
316
|
-
let(:logger) { instance.logger }
|
317
|
-
|
318
|
-
subject { logger }
|
319
|
-
|
320
|
-
it { is_expected.to be_a(Embulk::Logger) }
|
321
|
-
end
|
322
|
-
end
|
data/spec/embulk_spec.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Embulk do
|
4
|
-
describe "registerd jira as input plugin" do
|
5
|
-
let(:config) { <<-YAML }
|
6
|
-
in:
|
7
|
-
type: jira
|
8
|
-
YAML
|
9
|
-
let(:config_file) { Tempfile.new("embulk-conf") }
|
10
|
-
|
11
|
-
before do
|
12
|
-
config_file.puts config
|
13
|
-
config_file.close
|
14
|
-
allow(org.embulk.spi.Exec).to receive(:isPreview).and_return(true)
|
15
|
-
end
|
16
|
-
|
17
|
-
subject {
|
18
|
-
capture(:out) do
|
19
|
-
# Skip this test because `embulk_run` has been removed
|
20
|
-
# Embulk.run ["preview", config_file.path]
|
21
|
-
end
|
22
|
-
}
|
23
|
-
|
24
|
-
it do
|
25
|
-
# NOTE: can't stub `exit` so stubbing `raise`
|
26
|
-
# https://github.com/embulk/embulk/blob/v0.6.9/lib/embulk/command/embulk_run.rb#L335
|
27
|
-
allow(Embulk).to receive(:raise)
|
28
|
-
|
29
|
-
is_expected.to_not include("InputPlugin 'jira' is not found.")
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require "rubygems"
|
2
|
-
require "bundler/setup"
|
3
|
-
|
4
|
-
Bundler.require(:runtime, :development)
|
5
|
-
|
6
|
-
require "embulk"
|
7
|
-
Embulk.setup
|
8
|
-
|
9
|
-
Dir["./spec/support/**/*.rb"].each{|file| require file }
|
10
|
-
|
11
|
-
if ENV["COVERAGE"]
|
12
|
-
if ENV["CI"]
|
13
|
-
require "codeclimate-test-reporter"
|
14
|
-
CodeClimate::TestReporter.start
|
15
|
-
else
|
16
|
-
require 'simplecov'
|
17
|
-
SimpleCov.start 'test_frameworks'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
|
22
|
-
require "embulk/input/jira"
|
23
|
-
|
24
|
-
RSpec.configure do |config|
|
25
|
-
config.include StdoutAndErrCapture
|
26
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module StdoutAndErrCapture
|
2
|
-
def capture(output = :out, &block)
|
3
|
-
_, out = swap_io(output, &block)
|
4
|
-
out
|
5
|
-
end
|
6
|
-
|
7
|
-
def silence(&block)
|
8
|
-
block_result = nil
|
9
|
-
swap_io(:out) do
|
10
|
-
block_result,_ = swap_io(:err, &block)
|
11
|
-
end
|
12
|
-
block_result
|
13
|
-
end
|
14
|
-
|
15
|
-
def swap_io(output = :out, &block)
|
16
|
-
java_import 'java.io.PrintStream'
|
17
|
-
java_import 'java.io.ByteArrayOutputStream'
|
18
|
-
java_import 'java.lang.System'
|
19
|
-
|
20
|
-
ruby_original_stream = output == :out ? $stdout.dup : $stderr.dup
|
21
|
-
java_original_stream = System.send(output) # :out or :err
|
22
|
-
ruby_buf = StringIO.new
|
23
|
-
java_buf = ByteArrayOutputStream.new
|
24
|
-
|
25
|
-
case output
|
26
|
-
when :out
|
27
|
-
$stdout = ruby_buf
|
28
|
-
System.setOut(PrintStream.new(java_buf))
|
29
|
-
when :err
|
30
|
-
$stderr = ruby_buf
|
31
|
-
System.setErr(PrintStream.new(java_buf))
|
32
|
-
end
|
33
|
-
|
34
|
-
[block.call, ruby_buf.string + java_buf.toString]
|
35
|
-
ensure
|
36
|
-
case output
|
37
|
-
when :out
|
38
|
-
$stdout = ruby_original_stream
|
39
|
-
System.setOut(java_original_stream)
|
40
|
-
when :err
|
41
|
-
$stderr = ruby_original_stream
|
42
|
-
System.setErr(java_original_stream)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|