test_linker 1.0.0 → 1.0.1
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.
- data/.yardopts +4 -0
- data/ChangeLog.rdoc +15 -0
- data/Gemfile +1 -12
- data/README.rdoc +2 -2
- data/Rakefile +5 -42
- data/lib/test_linker.rb +4 -42
- data/lib/test_linker/helpers.rb +111 -7
- data/lib/test_linker/version.rb +1 -1
- data/lib/test_linker/wrapper.rb +487 -487
- data/spec/spec_helper.rb +5 -2
- data/spec/test_linker/wrapper_spec.rb +265 -38
- data/spec/test_linker_spec.rb +1 -1
- metadata +56 -168
- data/.infinity_test +0 -7
- data/.rspec +0 -1
- data/test_linker.gemspec +0 -109
data/.yardopts
CHANGED
data/ChangeLog.rdoc
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
=== 1.0.1 / 2011-06-19
|
2
|
+
|
3
|
+
* Fixed bugs:
|
4
|
+
* #1: Gemspec showed duplicate dependencies. Switched to .gemspec and `gem build`
|
5
|
+
for building the gem (no more jeweler).
|
6
|
+
* #3: #test_case_execution_result= now uses #make_call. (thanks fishstick!)
|
7
|
+
* #4: #find_test_plans now works with TestLink 1.9.x. (thanks fishstick!)
|
8
|
+
* #5: #test_case_execution_result= now uses @dev_key (via #make_call). This
|
9
|
+
is really the same fix as for #3. (thanks fishstick!)
|
10
|
+
* #9: Added .rdoc files to .yardopts in hopes that rdoc.info will use that to
|
11
|
+
add the ChangeLog and LICENSE files to the Files list.
|
12
|
+
* Fixed author in gemspec.
|
13
|
+
* Improvements:
|
14
|
+
* Started using log_switch for class logging.
|
15
|
+
|
1
16
|
=== 1.0.0 / 2011-05-08
|
2
17
|
|
3
18
|
* Added support for new (old) Rubies:
|
data/Gemfile
CHANGED
@@ -1,14 +1,3 @@
|
|
1
1
|
source :rubygems
|
2
|
+
gemspec
|
2
3
|
|
3
|
-
#gemspec
|
4
|
-
gem 'versionomy', '~> 0.4.0'
|
5
|
-
|
6
|
-
group :development do
|
7
|
-
gem 'bundler', '~> 1.0.0'
|
8
|
-
gem 'cucumber', '~> 0.10.0'
|
9
|
-
gem 'fakeweb', '~> 1.3.0'
|
10
|
-
gem 'jeweler', '~> 1.6.0'
|
11
|
-
gem 'rspec', '~> 2.5'
|
12
|
-
gem 'simplecov', '>= 0.4.0', :require => false if RUBY_VERSION >= "1.9"
|
13
|
-
gem 'yard', '~> 0.6.0'
|
14
|
-
end
|
data/README.rdoc
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
|
7
7
|
== Description
|
8
8
|
|
9
|
+
|
9
10
|
This is a Ruby wrapper around the TestLink XMLRPC API, thus allowing access to
|
10
11
|
your TestLink test projects, plans, cases, and results using Ruby. We've added
|
11
12
|
a few helper methods as well to allow for getting at more of your data a little
|
@@ -106,9 +107,8 @@ Get results to a CSV file:
|
|
106
107
|
* bundler, ~> 1.0.0
|
107
108
|
* cucumber, ~> 0.10.0
|
108
109
|
* fakeweb, ~> 1.3.0
|
109
|
-
* jeweler, ~> 1.5.0
|
110
110
|
* rspec, ~> 2.5.0
|
111
|
-
* simplecov, >= 0.4.0
|
111
|
+
* simplecov, >= 0.4.0 (MRI 1.9.x only)
|
112
112
|
* yard, ~> 0.6.0
|
113
113
|
|
114
114
|
Getting it all running (on the TestLink side):
|
data/Rakefile
CHANGED
@@ -1,51 +1,14 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler'
|
3
|
-
|
4
|
-
|
5
|
-
Bundler.setup(:default, :development)
|
6
|
-
rescue Bundler::BundlerError => e
|
7
|
-
$stderr.puts e.message
|
8
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
9
|
-
exit e.status_code
|
10
|
-
end
|
11
|
-
|
12
|
-
require 'rake'
|
13
|
-
|
14
|
-
$:.unshift Dir.pwd + "/lib"
|
15
|
-
require 'test_linker'
|
16
|
-
require 'jeweler'
|
17
|
-
Jeweler::Tasks.new do |gem|
|
18
|
-
gem.name = "test_linker"
|
19
|
-
gem.version = TestLinker::VERSION
|
20
|
-
gem.homepage = "http://github.com/turboladen/test_linker"
|
21
|
-
gem.license = "MIT"
|
22
|
-
gem.summary = %Q{An interface to the TestLink XMLRPC API}
|
23
|
-
gem.description = %Q{This is a Ruby wrapper around the TestLink XMLRPC API, thus allowing access to
|
24
|
-
your TestLink test projects, plans, cases, and results using Ruby. We've added
|
25
|
-
a few helper methods as well to allow for getting at more of your data a little
|
26
|
-
easier. This supports TestLink APIs 1.0 Beta 5 (from TestLink 1.8.x) and 1.0
|
27
|
-
(from TestLink 1.9.x)..}
|
28
|
-
gem.email = "steve.loveless@gmail.com"
|
29
|
-
gem.authors = ["turboladen"]
|
30
|
-
gem.add_bundler_dependencies
|
31
|
-
end
|
32
|
-
Jeweler::RubygemsDotOrgTasks.new
|
33
|
-
|
34
|
-
require 'rspec/core'
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'cucumber/rake/task'
|
35
5
|
require 'rspec/core/rake_task'
|
6
|
+
require 'yard'
|
7
|
+
|
36
8
|
RSpec::Core::RakeTask.new(:spec) do |spec|
|
37
9
|
spec.pattern = FileList['spec/**/*_spec.rb']
|
38
10
|
end
|
11
|
+
task :test => :spec
|
39
12
|
|
40
|
-
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
41
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
42
|
-
spec.rcov = true
|
43
|
-
end
|
44
|
-
|
45
|
-
require 'cucumber/rake/task'
|
46
13
|
Cucumber::Rake::Task.new(:features)
|
47
|
-
|
48
|
-
task :default => :spec
|
49
|
-
|
50
|
-
require 'yard'
|
51
14
|
YARD::Rake::YardocTask.new
|
data/lib/test_linker.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'logger'
|
2
2
|
require 'rubygems'
|
3
3
|
require 'versionomy'
|
4
|
+
require 'log_switch'
|
4
5
|
|
5
6
|
require File.expand_path(File.dirname(__FILE__) + '/core_ext/hash_patch')
|
6
7
|
require File.expand_path(File.dirname(__FILE__) + '/test_linker/wrapper')
|
@@ -10,51 +11,12 @@ require File.expand_path(File.dirname(__FILE__) + '/test_linker/helpers')
|
|
10
11
|
require File.expand_path(File.dirname(__FILE__) + '/core_ext/xmlrpc_client_patch')
|
11
12
|
|
12
13
|
class TestLinker
|
14
|
+
extend LogSwitch
|
13
15
|
include TestLinker::Wrapper
|
14
16
|
include TestLinker::Helpers
|
15
17
|
|
16
|
-
|
17
|
-
|
18
|
-
# @return [Boolean] Returns if logging is enabled or not.
|
19
|
-
def log?
|
20
|
-
@log ||= false
|
21
|
-
end
|
22
|
-
|
23
|
-
# @param [Boolean] do_logging false to turn logging off; true to turn it
|
24
|
-
# back on.
|
25
|
-
def log=(do_logging)
|
26
|
-
@log = do_logging
|
27
|
-
end
|
28
|
-
|
29
|
-
# @return [Logger,?] Returns a Logger unless you use a different type of
|
30
|
-
# logging object.
|
31
|
-
def logger
|
32
|
-
@logger ||= Logger.new STDOUT
|
33
|
-
end
|
34
|
-
|
35
|
-
# @param [?] logging_object Call this to use a different type of logger
|
36
|
-
# than Logger.
|
37
|
-
def logger=(logging_object)
|
38
|
-
@logger = logging_object
|
39
|
-
end
|
40
|
-
|
41
|
-
# @return [Symbol] The method name to send to the logging object in order to
|
42
|
-
# log messages.
|
43
|
-
def log_level
|
44
|
-
@log_level ||= :debug
|
45
|
-
end
|
46
|
-
|
47
|
-
# @param [Symbol] The method name to send to the logging object in order to
|
48
|
-
# log messages.
|
49
|
-
def log_level=(level)
|
50
|
-
@log_level = level
|
51
|
-
end
|
52
|
-
|
53
|
-
# @param [String] message The string to log.
|
54
|
-
def log message
|
55
|
-
logger.send(log_level, message) if log?
|
56
|
-
end
|
57
|
-
end
|
18
|
+
# Turn logging off by default.
|
19
|
+
self.log = false
|
58
20
|
|
59
21
|
# Default value for timing out after not receiving an XMLRPC response from
|
60
22
|
# the server.
|
data/lib/test_linker/helpers.rb
CHANGED
@@ -32,7 +32,7 @@ module TestLinker::Helpers
|
|
32
32
|
#
|
33
33
|
# @param [String] project_name Name of the project to search for.
|
34
34
|
# @param [String] plan_name Name of the plan to search for.
|
35
|
-
# @return [Fixnum] ID of plan matching project_name and plan_name.
|
35
|
+
# @return [Fixnum] ID of plan matching project_name and plan_name. nil if the
|
36
36
|
# test plan wasn't found.
|
37
37
|
def test_plan_id(project_name, plan_name)
|
38
38
|
if @version < "1.0"
|
@@ -54,7 +54,7 @@ module TestLinker::Helpers
|
|
54
54
|
# @param [String] project_name Name of the project to search for.
|
55
55
|
# @param [String] plan_name Name of the plan to search for.
|
56
56
|
# @param [String] build_name Name of the build to search for.
|
57
|
-
# @return [Fixnum] ID of plan matching project_name and plan_name
|
57
|
+
# @return [Fixnum] ID of plan matching project_name and plan_name.
|
58
58
|
def build_id(project_name, plan_name, build_name)
|
59
59
|
plan_id = test_plan_id(project_name, plan_name)
|
60
60
|
builds = builds_for_test_plan plan_id
|
@@ -89,12 +89,21 @@ module TestLinker::Helpers
|
|
89
89
|
# @return [Array] An array of test plans that match the Regexp.
|
90
90
|
def find_test_plans(project_id, regex, match_attribute=:name)
|
91
91
|
test_plan_list = test_plans(project_id)
|
92
|
+
matched_list = []
|
92
93
|
|
93
|
-
|
94
|
-
|
94
|
+
if @version >= "1.0"
|
95
|
+
matched_list = test_plan_list.find_all do |plan|
|
96
|
+
plan[match_attribute] =~ regex
|
97
|
+
end
|
98
|
+
elsif @version < "1.0"
|
99
|
+
test_plan_list.first.each_value do |plan|
|
100
|
+
matched_list << plan if plan[match_attribute] =~ regex
|
101
|
+
end
|
95
102
|
end
|
103
|
+
|
104
|
+
matched_list
|
96
105
|
end
|
97
|
-
|
106
|
+
|
98
107
|
# @param [String] project_name
|
99
108
|
# @param [String] suite_name
|
100
109
|
# @return [Fixnum] ID of the requested test suite. nil if not found.
|
@@ -149,6 +158,7 @@ module TestLinker::Helpers
|
|
149
158
|
# @param [String] project_name
|
150
159
|
# @param [String] suite_name
|
151
160
|
# @return [String] ID of the created or existing suite.
|
161
|
+
# TODO: This should rescue TestLinker::Error
|
152
162
|
def create_first_level_suite(project_name, suite_name)
|
153
163
|
return first_level_test_suite_id(project_name, suite_name)
|
154
164
|
rescue RuntimeError
|
@@ -159,6 +169,100 @@ module TestLinker::Helpers
|
|
159
169
|
create_test_suite(project_id, suite_name).first[:id]
|
160
170
|
end
|
161
171
|
|
172
|
+
# Checks if the test case has been executed.
|
173
|
+
#
|
174
|
+
# Todo:
|
175
|
+
# * versioning support (make_call = :exec_status vs 'exec_status')'
|
176
|
+
# * Also accept TC_ID instead?
|
177
|
+
# @param [Hash] test_case A testcase Hash (AKA 'testcase info')
|
178
|
+
# @return [Boolean] true if the test hasn't yet been executed.
|
179
|
+
def test_not_run?(test_case)
|
180
|
+
test_case[:exec_status] == 'n'
|
181
|
+
end
|
182
|
+
|
183
|
+
# Returns all open (not-run) test cases for a given plan within project.
|
184
|
+
# Extra options for now are +:build+, which will match a given build rather
|
185
|
+
# than all open builds by default.
|
186
|
+
#
|
187
|
+
# @param [String] project_name
|
188
|
+
# @param [String] plan_name
|
189
|
+
# @param [Hash] options
|
190
|
+
# @option options [String] build Name of the build to match.
|
191
|
+
# @return [Array<Hash>] Array of matching testcase hashes.
|
192
|
+
# @see #find_open_cases_for_plans
|
193
|
+
def find_open_cases_for_plan(project_name, plan_name, options={})
|
194
|
+
test_case_array = []
|
195
|
+
plan_id = test_plan_id(project_name, plan_name)
|
196
|
+
|
197
|
+
if plan_id.nil?
|
198
|
+
return []
|
199
|
+
else
|
200
|
+
builds = builds_for_test_plan(plan_id)
|
201
|
+
end
|
202
|
+
|
203
|
+
builds.each do |build|
|
204
|
+
if options[:build]
|
205
|
+
if build[:name] =~ options[:build]
|
206
|
+
test_cases = test_cases_for_test_plan(build[:testplan_id],
|
207
|
+
{ "buildid" => build[:id] })
|
208
|
+
end
|
209
|
+
elsif build[:is_open] == 1
|
210
|
+
test_cases = test_cases_for_test_plan(build[:testplan_id],
|
211
|
+
{ "buildid" => build[:id] })
|
212
|
+
end
|
213
|
+
|
214
|
+
unless test_cases.nil?
|
215
|
+
test_cases.each_value do |test_case|
|
216
|
+
test_case_array << test_case if test_not_run?(test_case)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
test_case_array
|
222
|
+
end
|
223
|
+
|
224
|
+
# Returns all open (not-run) test cases for a set of test plans within project
|
225
|
+
# that match the given Regexp. Extra options for now are +:build+, which will
|
226
|
+
# match a given build rather than all open builds by default.
|
227
|
+
#
|
228
|
+
# @param [String] project_name
|
229
|
+
# @param [Regexp] plan_regex Plan name as regex.
|
230
|
+
# @param [Hash] options
|
231
|
+
# @option options [String] build Name of the build to match.
|
232
|
+
# @return [Array<Hash>] Array of matching testcase hashes.
|
233
|
+
def find_open_cases_for_plans(project_name, plan_regex, options={})
|
234
|
+
puts 'meow'
|
235
|
+
test_case_array = []
|
236
|
+
project_id = project_id(project_name)
|
237
|
+
puts "project ID: #{project_id}"
|
238
|
+
test_plans = find_test_plans(project_id, plan_regex)
|
239
|
+
puts "test plans: #{test_plans}"
|
240
|
+
|
241
|
+
test_plans.each do |test_plan|
|
242
|
+
builds = builds_for_test_plan(test_plan[:id]) # Get builds for plan(s)
|
243
|
+
|
244
|
+
builds.each do |build|
|
245
|
+
if options[:build]
|
246
|
+
if build[:name] =~ options[:build]
|
247
|
+
test_cases = test_cases_for_test_plan(build[:testplan_id],
|
248
|
+
{ "buildid" => build[:id] })
|
249
|
+
end
|
250
|
+
elsif build[:is_open] == 1
|
251
|
+
test_cases = test_cases_for_test_plan(build[:testplan_id],
|
252
|
+
{ "buildid" => build[:id] })
|
253
|
+
end
|
254
|
+
|
255
|
+
unless test_cases.nil?
|
256
|
+
test_cases.each_value do |test_case|
|
257
|
+
test_case_array << test_case if test_not_run?(test_case)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
test_case_array
|
264
|
+
end
|
265
|
+
alias_method :find_open_cases_for_plans, :find_open_cases_for_plan
|
162
266
|
# Get the ID of a suite with the given parent, creating it if it does not
|
163
267
|
# exist.
|
164
268
|
#
|
@@ -203,7 +307,7 @@ module TestLinker::Helpers
|
|
203
307
|
test_suite_id = self.suite_info(project_name, plan_name, suite_name)
|
204
308
|
|
205
309
|
result = create_test_case(test_project_id, test_suite_id, test_case_name,
|
206
|
-
|
310
|
+
summary, steps, expected_results, login)
|
207
311
|
|
208
312
|
if result.any?
|
209
313
|
result.each do |result_ptr|
|
@@ -235,7 +339,7 @@ module TestLinker::Helpers
|
|
235
339
|
def add_test_case_to_test_plan_by_name(project_name, plan_name, test_case_id,
|
236
340
|
test_case_version)
|
237
341
|
test_project_id = project_id(project_name)
|
238
|
-
test_plan_id =
|
342
|
+
test_plan_id = test_plan_id(project_name, plan_name)
|
239
343
|
|
240
344
|
result = add_test_case_to_test_plan(test_project_id, test_plan_id,
|
241
345
|
test_case_id, test_case_version)
|
data/lib/test_linker/version.rb
CHANGED
data/lib/test_linker/wrapper.rb
CHANGED
@@ -6,58 +6,59 @@ class TestLinker
|
|
6
6
|
# functions.
|
7
7
|
module Wrapper
|
8
8
|
|
9
|
-
#
|
9
|
+
# Returns info about the server's TestLink API.
|
10
10
|
#
|
11
|
-
# @
|
12
|
-
|
13
|
-
|
14
|
-
# @option options [Fixnum,String] testcaseexternalid
|
15
|
-
# @option options [Fixnum,String] version The test case version. Default is most recent.
|
16
|
-
# @return
|
17
|
-
def test_case(options)
|
18
|
-
make_call("tl.getTestCase", options, "1.0")
|
11
|
+
# @return [String] Info about TestLink API version
|
12
|
+
def about
|
13
|
+
make_call("tl.about", {}, "1.0b5")
|
19
14
|
end
|
20
|
-
alias_method :getTestCase, :test_case
|
21
15
|
|
22
|
-
#
|
16
|
+
# Adds a test case version to a test plan.
|
23
17
|
#
|
24
|
-
# @
|
25
|
-
# @param [Fixnum,String]
|
18
|
+
# @param [Fixnum,String] project_id
|
19
|
+
# @param [Fixnum,String] plan_id
|
20
|
+
# @param [Fixnum,String] test_case_external_id
|
21
|
+
# @param [Fixnum,String] test_case_version
|
22
|
+
# @param [Hash] options Optional parameters for the method.
|
23
|
+
# @option options [String] urgency
|
24
|
+
# @option options [Fixnum] executionorder
|
25
|
+
# @option options [Fixnum] platformid Only if test plan has no platforms.
|
26
|
+
# (TestLink API >=1.0)
|
26
27
|
# @return
|
27
|
-
def
|
28
|
-
|
29
|
-
|
28
|
+
def add_test_case_to_test_plan(project_id, plan_id, test_case_external_id,
|
29
|
+
test_case_version, options={})
|
30
|
+
args = { :testprojectid => project_id, :testplanid => plan_id,
|
31
|
+
:testcaseexternalid => test_case_external_id,
|
32
|
+
:version => test_case_version }
|
33
|
+
args.merge! options
|
34
|
+
make_call("tl.addTestCaseToTestPlan", args, "1.0b5")
|
30
35
|
end
|
31
|
-
alias_method :
|
36
|
+
alias_method :addTestCaseToTestPlan, :add_test_case_to_test_plan
|
32
37
|
|
33
|
-
#
|
38
|
+
# Assign Requirements to a test case. Capable of assigning multiple
|
39
|
+
# requirements. Requirements can belong to different Requirement Specs.
|
34
40
|
#
|
35
|
-
# @
|
36
|
-
# @param [Fixnum,String]
|
41
|
+
# @param [Fixnum,String] project_id
|
42
|
+
# @param [Fixnum,String] test_case_external_id
|
43
|
+
# @param [String] requirements
|
37
44
|
# @return
|
38
|
-
def
|
39
|
-
args = { :
|
40
|
-
|
41
|
-
|
42
|
-
alias_method :getTestSuiteByID, :test_suite_by_id
|
43
|
-
|
44
|
-
# @api TestLink API version 1.0
|
45
|
-
# @param [Fixnum,String] execution_id
|
46
|
-
# @return [Hash] "status", "id", "message"
|
47
|
-
def delete_execution execution_id
|
48
|
-
args = { :executionid => execution_id }
|
49
|
-
make_call("tl.deleteExecution", args, "1.0")
|
45
|
+
def assign_requirements(project_id, test_case_external_id, requirements)
|
46
|
+
args = { :testcaseexternalid => test_case_external_id,
|
47
|
+
:testprojectid => project_id, :requirements => requirements }
|
48
|
+
make_call("tl.assignRequirements", args, "1.0b5")
|
50
49
|
end
|
51
|
-
alias_method :
|
50
|
+
alias_method :assignRequirements, :assign_requirements
|
52
51
|
|
53
|
-
#
|
54
|
-
#
|
55
|
-
# @
|
56
|
-
|
57
|
-
|
58
|
-
|
52
|
+
# Gets a list of builds within a test plan.
|
53
|
+
#
|
54
|
+
# @param [Fixnum,String] plan_id ID of the plan to get builds for.
|
55
|
+
# @return [Array<Hash>] List of all builds for the plan and their associated
|
56
|
+
# info.
|
57
|
+
def builds_for_test_plan plan_id
|
58
|
+
args = { :testplanid => plan_id }
|
59
|
+
make_call("tl.getBuildsForTestPlan", args, "1.0b5")
|
59
60
|
end
|
60
|
-
alias_method :
|
61
|
+
alias_method :getBuildsForTestPlan, :builds_for_test_plan
|
61
62
|
|
62
63
|
# Checks if the given Developer Key exist.
|
63
64
|
#
|
@@ -70,193 +71,169 @@ class TestLinker
|
|
70
71
|
end
|
71
72
|
alias_method :checkDevKey, :check_dev_key
|
72
73
|
|
73
|
-
#
|
74
|
+
# Creates a new build for a specific test plan.
|
74
75
|
#
|
75
|
-
# @
|
76
|
-
# @param [
|
77
|
-
# @param [String]
|
78
|
-
# @param [String] mime_type
|
79
|
-
# @param [String] content The Base64 encoded content of the attachment.
|
80
|
-
# @param [Hash] options
|
81
|
-
# @option options [String] title
|
82
|
-
# @option options [String] description
|
76
|
+
# @param [Fixnum,String] plan_id
|
77
|
+
# @param [String] build_name
|
78
|
+
# @param [String] build_notes
|
83
79
|
# @return
|
84
|
-
def
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
args.merge! options
|
89
|
-
make_call("tl.uploadExecutionAttachment", args, "1.0")
|
80
|
+
def create_build(plan_id, build_name, build_notes)
|
81
|
+
args = { :testplanid => plan_id, :buildname => build_name,
|
82
|
+
:buildnotes => build_notes }
|
83
|
+
make_call("tl.createBuild", args, "1.0b5")
|
90
84
|
end
|
91
|
-
alias_method :
|
85
|
+
alias_method :createBuild, :create_build
|
92
86
|
|
93
|
-
#
|
94
|
-
#
|
95
|
-
#
|
96
|
-
# @api TestLink API version 1.0
|
97
|
-
# @param [Fixnum,String] requirement_id
|
98
|
-
# @param [String] file_name
|
99
|
-
# @param [String] mime_type
|
100
|
-
# @param [String] content The Base64 encoded content of the attachment.
|
87
|
+
# @param [String] project_name
|
88
|
+
# @param [String] test_case_prefix
|
101
89
|
# @param [Hash] options
|
102
|
-
# @option options [String]
|
103
|
-
# @option options [
|
90
|
+
# @option options [String] notes
|
91
|
+
# @option options [Hash] options ALL int treated as boolean:
|
92
|
+
# requirementsEnabled, testPriorityEnabled, automationEnabled,
|
93
|
+
# inventoryEnabled
|
94
|
+
# @option options [Fixnum] active
|
95
|
+
# @option options [Fixnum] public
|
104
96
|
# @return
|
105
|
-
def
|
106
|
-
|
107
|
-
args = { :requirementid => requirement_id, :filename => file_name,
|
108
|
-
:filetype => mime_type, :content => content }
|
97
|
+
def create_project(project_name, test_case_prefix, options={})
|
98
|
+
args = { :testprojectname => project_name, :testcaseprefix => test_case_prefix }
|
109
99
|
args.merge! options
|
110
|
-
make_call("tl.
|
100
|
+
make_call("tl.createTestProject", args, "1.0b5")
|
111
101
|
end
|
112
|
-
alias_method :
|
102
|
+
alias_method :createTestProject, :create_project
|
113
103
|
|
114
|
-
#
|
115
|
-
#
|
116
|
-
#
|
117
|
-
# @
|
118
|
-
# @param [
|
119
|
-
# @param [String]
|
120
|
-
# @param [String]
|
121
|
-
# @param [String] content The Base64 encoded content of the attachment.
|
104
|
+
# @param [Fixnum,String] project_id
|
105
|
+
# @param [Fixnum,String] suite_id
|
106
|
+
# @param [String] test_case_name
|
107
|
+
# @param [String] test_case_summary
|
108
|
+
# @param [String] test_case_steps
|
109
|
+
# @param [String] test_case_expected_results
|
110
|
+
# @param [String] login
|
122
111
|
# @param [Hash] options
|
123
|
-
# @option options [String]
|
124
|
-
# @option options [String]
|
112
|
+
# @option options [String] preconditions
|
113
|
+
# @option options [String] execution
|
114
|
+
# @option options [Fixnum] order
|
115
|
+
# @option options [Fixnum,String] internalid
|
116
|
+
# @option options [Boolean] checkduplicatedname
|
117
|
+
# @option options [String] actiononduplicatedname
|
118
|
+
# @option options [String] executiontype
|
125
119
|
# @return
|
126
|
-
def
|
127
|
-
|
128
|
-
args = { :
|
129
|
-
:
|
120
|
+
def create_test_case(project_id, suite_id, test_case_name, test_case_summary,
|
121
|
+
test_case_steps, test_case_expected_results, login, options={})
|
122
|
+
args = { :testcasename => test_case_name,
|
123
|
+
:testsuiteid => suite_id,
|
124
|
+
:testprojectid => project_id,
|
125
|
+
:authorlogin => login,
|
126
|
+
:summary => test_case_summary,
|
127
|
+
:steps => test_case_steps,
|
128
|
+
:expectedresults => test_case_expected_results }
|
130
129
|
args.merge! options
|
131
|
-
make_call("tl.
|
130
|
+
make_call("tl.createTestCase", args, "1.0b5")
|
132
131
|
end
|
133
|
-
alias_method :
|
134
|
-
:upload_requirement_specification_attachment
|
132
|
+
alias_method :createTestCase, :create_test_case
|
135
133
|
|
136
|
-
#
|
137
|
-
#
|
138
|
-
#
|
139
|
-
# @param [
|
140
|
-
# @
|
141
|
-
# @
|
134
|
+
# @api TestLink API version 1.0
|
135
|
+
# @param [String] project_name
|
136
|
+
# @param [String] plan_name
|
137
|
+
# @param [Hash] options
|
138
|
+
# @option options [String] notes
|
139
|
+
# @option options [String] active Defaults to 1.
|
140
|
+
# @option options [String] public Defaults to 1.
|
142
141
|
# @return
|
143
|
-
def
|
144
|
-
args = { :
|
145
|
-
|
146
|
-
make_call(
|
142
|
+
def create_test_plan(project_name, plan_name, options={})
|
143
|
+
args = { :testplanname => plan_name, :testprojectname => project_name }
|
144
|
+
args.merge! options
|
145
|
+
make_call('tl.createTestPlan', args, "1.0")
|
147
146
|
end
|
148
|
-
alias_method :
|
147
|
+
alias_method :createTestPlan, :create_test_plan
|
149
148
|
|
150
|
-
# Uploads an attachment for a Test Project. The attachment must be Base64
|
151
|
-
# encoded by the client before sending it.
|
152
|
-
#
|
153
|
-
# @api TestLink API version 1.0
|
154
149
|
# @param [Fixnum,String] project_id
|
155
|
-
# @param [String]
|
156
|
-
# @param [String]
|
157
|
-
# @param [String] content The Base64 encoded content of the attachment.
|
150
|
+
# @param [String] suite_name
|
151
|
+
# @param [String] details
|
158
152
|
# @param [Hash] options
|
159
|
-
# @option options [String]
|
160
|
-
# @option options [
|
161
|
-
# @
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
153
|
+
# @option options [Fixnum,String] parentid Defaults to top level.
|
154
|
+
# @option options [Fixnum] order Order inside parent container.
|
155
|
+
# @option options [Boolean] checkduplicatedname Check if there siblings with
|
156
|
+
# the same name. Defaults to true.
|
157
|
+
# @option options [Boolean] actiononduplicatedname Applicable only if
|
158
|
+
# checkduplicatedname = true.
|
159
|
+
# @return [Array<Hash>] Info about results of test suite creation.
|
160
|
+
def create_test_suite(project_id, suite_name, details, options={})
|
161
|
+
args = { :testprojectid => project_id, :testsuitename => suite_name,
|
162
|
+
:details => details }
|
166
163
|
args.merge! options
|
167
|
-
make_call(
|
164
|
+
make_call('tl.createTestSuite', args, "1.0b5")
|
168
165
|
end
|
169
|
-
alias_method :
|
166
|
+
alias_method :createTestSuite, :create_test_suite
|
170
167
|
|
171
|
-
# Uploads an attachment for a Test Suite. The attachment must be Base64
|
172
|
-
# encoded by the client before sending it.
|
173
|
-
#
|
174
168
|
# @api TestLink API version 1.0
|
175
|
-
# @param [Fixnum,String]
|
176
|
-
# @
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
# @option options [String] title
|
181
|
-
# @option options [String] description
|
182
|
-
# @return
|
183
|
-
def upload_test_suite_attachment(suite_id, file_name, mime_type, content,
|
184
|
-
options={})
|
185
|
-
args = { :testsuiteid => suite_id, :filename => file_name,
|
186
|
-
:filetype => mime_type, :content => content }
|
187
|
-
args.merge! options
|
188
|
-
make_call("tl.uploadTestSuiteAttachment", args, "1.0")
|
169
|
+
# @param [Fixnum,String] execution_id
|
170
|
+
# @return [Hash] "status", "id", "message"
|
171
|
+
def delete_execution execution_id
|
172
|
+
args = { :executionid => execution_id }
|
173
|
+
make_call("tl.deleteExecution", args, "1.0")
|
189
174
|
end
|
190
|
-
alias_method :
|
175
|
+
alias_method :deleteExecution, :delete_execution
|
191
176
|
|
192
|
-
# Uploads an attachment for a Test Case. The attachment must be Base64
|
193
|
-
# encoded by the client before sending it.
|
194
|
-
#
|
195
177
|
# @api TestLink API version 1.0
|
196
|
-
# @param [
|
197
|
-
# @
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
# @option options [String] title
|
202
|
-
# @option options [String] description
|
203
|
-
# @return
|
204
|
-
def upload_test_case_attachment(test_case_id, file_name, mime_type, content,
|
205
|
-
options={})
|
206
|
-
args = { :testcaseid => test_case_id, :filename => file_name,
|
207
|
-
:filetype => mime_type, :content => content }
|
208
|
-
args.merge! options
|
209
|
-
make_call("tl.uploadTestCaseAttachment", args, "1.0")
|
178
|
+
# @param [String] user_name
|
179
|
+
# @return [Boolean,Hash] true if user exists, otherwise an error structure.
|
180
|
+
def does_user_exist user_name
|
181
|
+
args = { :user => user_name }
|
182
|
+
make_call("tl.doesUserExist", args, "1.0")
|
210
183
|
end
|
211
|
-
alias_method :
|
184
|
+
alias_method :doesUserExist, :does_user_exist
|
212
185
|
|
213
|
-
#
|
214
|
-
#
|
215
|
-
#
|
216
|
-
#
|
186
|
+
# Gets the set of test suites from the top level of the test project tree.
|
187
|
+
#
|
188
|
+
# @param [Fixnum,String] project_id ID of the project to get suites for.
|
189
|
+
# @return [Array<Hash>] List of first level suites in project and their
|
190
|
+
# associated info.
|
191
|
+
def first_level_test_suites_for_project project_id
|
192
|
+
args = { :testprojectid => project_id }
|
193
|
+
make_call("tl.getFirstLevelTestSuitesForTestProject", args, "1.0b5")
|
194
|
+
end
|
195
|
+
alias_method :getFirstLevelTestSuitesForTestProject,
|
196
|
+
:first_level_test_suites_for_project
|
197
|
+
|
198
|
+
# Gets full path from the given node till the top using nodes_hierarchy_table.
|
217
199
|
#
|
218
200
|
# @api TestLink API version 1.0
|
219
|
-
# @param [Fixnum,String]
|
220
|
-
# @param [String] foreign_key_table
|
221
|
-
# @param [String] file_name
|
222
|
-
# @param [String] mime_type
|
223
|
-
# @param [String] content The Base64 encoded content of the attachment.
|
224
|
-
# @param [Hash] options
|
225
|
-
# @option options [String] title
|
226
|
-
# @option options [String] description
|
201
|
+
# @param [Fixnum,String] node_id
|
227
202
|
# @return
|
228
|
-
def
|
229
|
-
|
230
|
-
args
|
231
|
-
:filename => file_name, :filetype => mime_type, :content => content }
|
232
|
-
args.merge! options
|
233
|
-
make_call("tl.uploadAttachment", args, "1.0")
|
203
|
+
def full_path node_id
|
204
|
+
args = { :nodeID => node_id }
|
205
|
+
make_call("tl.getFullPath", args, "1.0")
|
234
206
|
end
|
235
|
-
alias_method :
|
207
|
+
alias_method :getFullPath, :full_path
|
236
208
|
|
237
|
-
#
|
238
|
-
#
|
239
|
-
# @
|
240
|
-
|
241
|
-
|
209
|
+
# @param [Fixnum,String] plan_id
|
210
|
+
# @param [Fixnum,String] build_id
|
211
|
+
# @param [Fixnum,String] test_case_id
|
212
|
+
# @return [Array<Hash>] Single element Array containing the result Hash.
|
213
|
+
def last_execution_result(plan_id, build_id, test_case_id)
|
214
|
+
args = { :testplanid => plan_id, :testcaseid => test_case_id, :buildid => build_id }
|
215
|
+
make_call("tl.getLastExecutionResult", args, "1.0b5")
|
242
216
|
end
|
243
|
-
alias_method :
|
244
|
-
alias_method :ping, :say_hello
|
217
|
+
alias_method :getLastExecutionResult, :last_execution_result
|
245
218
|
|
246
|
-
#
|
247
|
-
#
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
make_call("tl.repeat", { :str => message }, "1.0b5")
|
219
|
+
# @param [Fixnum,String] plan_id ID of the plan to get build for.
|
220
|
+
# @return [Hash] Info for the latest build for the given test plan.
|
221
|
+
def latest_build_for_test_plan plan_id
|
222
|
+
args = { :testplanid => plan_id }
|
223
|
+
make_call("tl.getLatestBuildForTestPlan", args, "1.0b5")
|
252
224
|
end
|
225
|
+
alias_method :getLatestBuildForTestPlan, :latest_build_for_test_plan
|
253
226
|
|
254
|
-
#
|
227
|
+
# Info about a test project with a given name.
|
255
228
|
#
|
256
|
-
# @
|
257
|
-
|
258
|
-
|
229
|
+
# @api TestLink API version 1.0
|
230
|
+
# @param [String] project_name Name of the project to search for.
|
231
|
+
# @return [Array<Hash>] Info on matching project.
|
232
|
+
def project_by_name project_name
|
233
|
+
args = { :testprojectname => project_name }
|
234
|
+
make_call('tl.getTestProjectByName', args, "1.0")
|
259
235
|
end
|
236
|
+
alias_method :getTestProjectByName, :project_by_name
|
260
237
|
|
261
238
|
# Gets a list of all projects.
|
262
239
|
#
|
@@ -267,95 +244,177 @@ class TestLinker
|
|
267
244
|
end
|
268
245
|
alias_method :getProjects, :projects
|
269
246
|
|
270
|
-
#
|
247
|
+
# Sends a message to the server to have it repeated back.
|
271
248
|
#
|
272
|
-
# @param [
|
273
|
-
# @return [
|
274
|
-
|
275
|
-
|
276
|
-
def test_plans project_id
|
277
|
-
args = { :testprojectid => project_id }
|
278
|
-
response = make_call("tl.getProjectTestPlans", args, "1.0b5")
|
279
|
-
response == "" ? [{}] : response
|
249
|
+
# @param [String] message The message to get the server to repeat back.
|
250
|
+
# @return [String] The message sent to the server.
|
251
|
+
def repeat message
|
252
|
+
make_call("tl.repeat", { :str => message }, "1.0b5")
|
280
253
|
end
|
281
|
-
alias_method :getProjectTestPlans, :test_plans
|
282
254
|
|
283
|
-
#
|
255
|
+
# Sets result in TestLink by test case ID and test plan ID.
|
256
|
+
# NOTE: will guess at last build, needs to be set to guarantee accuracy.
|
257
|
+
# NOTE: Renamed to setTestCaseExecutionResult in version 1.0.
|
284
258
|
#
|
285
|
-
# @
|
286
|
-
# @
|
287
|
-
# @
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
259
|
+
# @see #test_case_execution_result=
|
260
|
+
# @version TestLink API version 1.0 Beta 5
|
261
|
+
# @param [Fixnum,String] plan_id ID of the test plan to post results to.
|
262
|
+
# @param [Fixnum,String] test_case_id ID of the test case to post results to.
|
263
|
+
# @param [String] status 'p', 'f', or 'b' for Pass/Fail/Block
|
264
|
+
# @param [Hash] options
|
265
|
+
# @option options [Fixnum,String] buildid ID of the build to post results to.
|
266
|
+
# @option options [Fixnum,String] buildname Name of the build to post results to.
|
267
|
+
# @option options [Fixnum,String] bugid ID of the bug to link results to.
|
268
|
+
# @option options [Boolean] guess Defines whether to guess optional params
|
269
|
+
# or require them explicitly. Defaults to true.
|
270
|
+
# @option options [Fixnum,String] platformid ID of the platform to associate with the
|
271
|
+
# result. (TestLink API >=1.0)
|
272
|
+
# @option options [String] customfields i.e. "NAME: Steve Loveless\n"
|
273
|
+
# (TestLink API >=1.0)
|
274
|
+
# @option options [String] notes ?
|
275
|
+
# @return [Hash] "status" of posting, "id" of the execution, "message"
|
276
|
+
# giving success or failure info.
|
277
|
+
# @raise [TestLinker::Error] If result fails to be posted for any reason.
|
278
|
+
def report_test_case_result(plan_id, test_case_id, status, options={})
|
279
|
+
if @version >= "1.0"
|
280
|
+
message = "Method not supported in version #{@version}. "
|
281
|
+
message << "Use #test_case_execution_result="
|
282
|
+
raise TestLinker::Error, message
|
283
|
+
end
|
293
284
|
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
285
|
+
args = { :testcaseid => test_case_id, :testplanid => plan_id,
|
286
|
+
:status => status, :guess => true }
|
287
|
+
args.merge! options
|
288
|
+
result = @server.call("tl.reportTCResult", args).first
|
289
|
+
|
290
|
+
unless result['message'] == 'Success!'
|
291
|
+
raise TestLinker::Error, "#{result['code']}: #{result['message']}"
|
292
|
+
end
|
293
|
+
|
294
|
+
result
|
303
295
|
end
|
304
|
-
alias_method :
|
296
|
+
alias_method :reportTCResult, :report_test_case_result
|
305
297
|
|
306
|
-
#
|
298
|
+
# Basic connectivity test.
|
307
299
|
#
|
308
|
-
# @
|
309
|
-
|
310
|
-
|
311
|
-
args = { :testplanid => plan_id }
|
312
|
-
make_call("tl.getTestSuitesForTestPlan", args, "1.0b5")
|
300
|
+
# @return [String] "Hello!"
|
301
|
+
def say_hello
|
302
|
+
make_call("tl.sayHello", {}, "1.0b5")
|
313
303
|
end
|
314
|
-
alias_method :
|
304
|
+
alias_method :sayHello, :say_hello
|
305
|
+
alias_method :ping, :say_hello
|
315
306
|
|
316
|
-
#
|
307
|
+
# Gets a test case by it's internal or external ID.
|
317
308
|
#
|
318
309
|
# @api TestLink API version 1.0
|
319
|
-
# @param [
|
320
|
-
# @
|
321
|
-
|
322
|
-
|
323
|
-
|
310
|
+
# @param [Hash] options
|
311
|
+
# @option options [Fixnum,String] testcaseid
|
312
|
+
# @option options [Fixnum,String] testcaseexternalid
|
313
|
+
# @option options [Fixnum,String] version The test case version. Default is most recent.
|
314
|
+
# @return
|
315
|
+
def test_case(options)
|
316
|
+
make_call("tl.getTestCase", options, "1.0")
|
324
317
|
end
|
325
|
-
alias_method :
|
318
|
+
alias_method :getTestCase, :test_case
|
326
319
|
|
327
|
-
# Gets
|
320
|
+
# Gets attachments for specified test case.
|
328
321
|
#
|
329
|
-
# @
|
330
|
-
# @param [Fixnum,String]
|
331
|
-
# @
|
332
|
-
|
333
|
-
|
334
|
-
make_call("tl.
|
322
|
+
# @param [Hash] options
|
323
|
+
# @param [Fixnum,String] testcaseid If not present, testcaseexternalid must be called.
|
324
|
+
# @param [Fixnum,String] testcaseexternalid If not present, testcaseid must be called.
|
325
|
+
# @return [String]
|
326
|
+
def test_case_attachments options
|
327
|
+
make_call("tl.getTestCaseAttachments", options, "1.0b5")
|
335
328
|
end
|
336
|
-
alias_method :
|
329
|
+
alias_method :getTestCaseAttachments, :test_case_attachments
|
337
330
|
|
338
|
-
#
|
339
|
-
#
|
340
|
-
# @param [Fixnum
|
341
|
-
# @
|
342
|
-
#
|
343
|
-
|
344
|
-
|
345
|
-
|
331
|
+
# @param [Fixnum,String] project_id
|
332
|
+
# @param [Fixnum,String] test_case_external_id
|
333
|
+
# @param [Fixnum] custom_field_name
|
334
|
+
# @param [Hash] options
|
335
|
+
# @option options [String] details Changes output information. If null or 'value',
|
336
|
+
# returns just a value; if 'full', returns a hash with all custom field definition,
|
337
|
+
# plus value and internal test case id; if 'simple', returns value plus custom
|
338
|
+
# field name, label, and type (as code).
|
339
|
+
# @return [Array<Hash>]
|
340
|
+
def test_case_custom_field_design_value(project_id, test_case_external_id,
|
341
|
+
custom_field_name, options={})
|
342
|
+
args = { :testprojectid => project_id,
|
343
|
+
:testcaseexternalid => test_case_external_id,
|
344
|
+
:customfieldname => custom_field_name }
|
345
|
+
args.merge! options
|
346
|
+
make_call("tl.getTestCaseCustomFieldDesignValue", args, "1.0b5")
|
346
347
|
end
|
347
|
-
alias_method :
|
348
|
-
:first_level_test_suites_for_project
|
348
|
+
alias_method :getTestCaseCustomFieldDesignValue, :test_case_custom_field_design_value
|
349
349
|
|
350
|
-
#
|
350
|
+
# Sets result in TestLink by test case ID and test plan ID.
|
351
|
+
# NOTE: will guess at last build, needs to be set to guarantee accuracy.
|
351
352
|
#
|
352
|
-
# @
|
353
|
+
# @see #report_test_case_result
|
354
|
+
# @api TestLink API version 1.0
|
355
|
+
# @param [String] plan_id ID of the test plan to post results to.
|
356
|
+
# @param [String] test_case_id ID of the test case to post results to.
|
357
|
+
# @param [String] status 'p', 'f', or 'b' for Pass/Fail/Block
|
353
358
|
# @param [Hash] options
|
354
|
-
# @option options [Fixnum
|
355
|
-
# @option options [
|
356
|
-
# @option options [Fixnum
|
357
|
-
# @option options [
|
358
|
-
#
|
359
|
+
# @option options [Fixnum] buildid ID of the build to post results to.
|
360
|
+
# @option options [String] buildname Name of the build to post results to.
|
361
|
+
# @option options [Fixnum] bugid ID of the bug to link results to.
|
362
|
+
# @option options [Boolean] guess Defines whether to guess optinal params or require them.
|
363
|
+
# @option options [String] notes ?
|
364
|
+
# @option options [String] platformid (version 1.0)
|
365
|
+
# @option options [String] platformid (version 1.0)
|
366
|
+
# @option options [String] customfields (version 1.0)
|
367
|
+
# @option options [String] overwrite (version 1.0)
|
368
|
+
# @return [Hash] "status" of posting, "id" of the execution, "message"
|
369
|
+
# giving success or failure info.
|
370
|
+
# @raise [TestLinker::Error] If result fails to be posted for any reason.
|
371
|
+
def test_case_execution_result=(plan_id, test_case_id, status, options={})
|
372
|
+
if @version < "1.0"
|
373
|
+
message = "Method not supported in version #{@version}. "
|
374
|
+
message << "Use #report_test_case_result"
|
375
|
+
raise TestLinker::Error, message
|
376
|
+
end
|
377
|
+
|
378
|
+
args = { :testcaseid => test_case_id, :testplanid => plan_id,
|
379
|
+
:status => status, :guess => true }
|
380
|
+
args.merge! options
|
381
|
+
result = make_call("tl.setTestCaseExecutionResult", args, "1.0").first
|
382
|
+
|
383
|
+
unless result[:message] == 'Success!'
|
384
|
+
raise TestLinker::Error, "#{result['code']}: #{result['message']}"
|
385
|
+
end
|
386
|
+
|
387
|
+
result
|
388
|
+
end
|
389
|
+
alias_method :setTestCaseExecutionResult, :test_case_execution_result=
|
390
|
+
|
391
|
+
# Info about test case by name.
|
392
|
+
# CAUTION: returns multiple values if test case is used more than once.
|
393
|
+
#
|
394
|
+
# @param [String] test_case_name Name to search across TL DB.
|
395
|
+
# @param [Hash] options
|
396
|
+
# @option options [String] testprojectname
|
397
|
+
# @option options [String] testsuitename
|
398
|
+
# @option options [String] testcasepathname
|
399
|
+
# @raise [TestLinker::Error] When test case name doesn't exist.
|
400
|
+
# @return [Array<Hash>] List of all test cases in the DB matching
|
401
|
+
# test_case_name and their associated info.
|
402
|
+
def test_case_id_by_name(test_case_name, options={})
|
403
|
+
args = { :testcasename => test_case_name }
|
404
|
+
args.merge! options
|
405
|
+
make_call("tl.getTestCaseIDByName", args, "1.0b5")
|
406
|
+
end
|
407
|
+
alias_method :getTestCaseIDByName, :test_case_id_by_name
|
408
|
+
|
409
|
+
# Info about test cases within a test plan.
|
410
|
+
#
|
411
|
+
# @param [Fixnum,String] plan_id ID of the plan to get test cases for.
|
412
|
+
# @param [Hash] options
|
413
|
+
# @option options [Fixnum,String] testcaseid
|
414
|
+
# @option options [Fixnum,String] buildid
|
415
|
+
# @option options [Fixnum,String] keywordid (mutually exclusive with keywords)
|
416
|
+
# @option options [Fixnum] keywords (mutually exclusive with keywordid)
|
417
|
+
# (TestLink API >=1.0)
|
359
418
|
# @option options [String] executed
|
360
419
|
# @option options [String] assignedto
|
361
420
|
# @option options [String] executestatus
|
@@ -384,293 +443,234 @@ class TestLinker
|
|
384
443
|
end
|
385
444
|
alias_method :getTestCasesForTestSuite, :test_cases_for_test_suite
|
386
445
|
|
387
|
-
# Gets the
|
446
|
+
# Gets the test plan with the given name.
|
388
447
|
#
|
389
448
|
# @api TestLink API version 1.0
|
390
|
-
# @param [
|
391
|
-
# @
|
392
|
-
#
|
393
|
-
def
|
394
|
-
args = { :
|
395
|
-
make_call(
|
449
|
+
# @param [String] project_name Name of the project the plan is in.
|
450
|
+
# @param [String] plan_name Name of the plan to search for.
|
451
|
+
# @return [Array<Hash>] Info on matching plan.
|
452
|
+
def test_plan_by_name(project_name, plan_name)
|
453
|
+
args = { :testplanname => plan_name, :testprojectname => project_name }
|
454
|
+
make_call('tl.getTestPlanByName', args, "1.0")
|
396
455
|
end
|
397
|
-
alias_method :
|
456
|
+
alias_method :getTestPlanByName, :test_plan_by_name
|
398
457
|
|
399
|
-
#
|
458
|
+
# List test suites within a test plan alphabetically.
|
400
459
|
#
|
401
|
-
# @
|
402
|
-
# @param [Fixnum,String]
|
403
|
-
# @
|
404
|
-
|
405
|
-
|
406
|
-
make_call("tl.
|
460
|
+
# @api TestLink API version 1.0
|
461
|
+
# @param [Fixnum,String] plan_id ID of the plan to get suites for.
|
462
|
+
# @return [Array<Hash>] List of all suites in plan and their associated info.
|
463
|
+
def test_plan_platforms plan_id
|
464
|
+
args = { :testplanid => plan_id }
|
465
|
+
make_call("tl.getTestPlanPlatforms", args, "1.0")
|
407
466
|
end
|
408
|
-
alias_method :
|
467
|
+
alias_method :getTestPlanPlatforms, :test_plan_platforms
|
409
468
|
|
410
|
-
#
|
411
|
-
#
|
412
|
-
# @param [Fixnum]
|
413
|
-
# @
|
414
|
-
#
|
415
|
-
#
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
custom_field_name, options={})
|
421
|
-
args = { :testprojectid => project_id,
|
422
|
-
:testcaseexternalid => test_case_external_id,
|
423
|
-
:customfieldname => custom_field_name }
|
424
|
-
args.merge! options
|
425
|
-
make_call("tl.getTestCaseCustomFieldDesignValue", args, "1.0b5")
|
469
|
+
# Gets a list of test plans within a project.
|
470
|
+
#
|
471
|
+
# @param [Fixnum,String] project_id ID of the project to retrieve plans.
|
472
|
+
# @return [Array<Hash>] Array of all plans in a project and their associated
|
473
|
+
# info.
|
474
|
+
# @raise [TestLinker::Error] If a project by the given ID doesn't exist.
|
475
|
+
def test_plans project_id
|
476
|
+
args = { :testprojectid => project_id }
|
477
|
+
response = make_call("tl.getProjectTestPlans", args, "1.0b5")
|
478
|
+
response == "" ? [{}] : response
|
426
479
|
end
|
427
|
-
alias_method :
|
480
|
+
alias_method :getProjectTestPlans, :test_plans
|
428
481
|
|
429
|
-
#
|
430
|
-
# CAUTION: returns multiple values if test case is used more than once.
|
482
|
+
# Gets a test suite by the given ID.
|
431
483
|
#
|
432
|
-
# @
|
433
|
-
# @param [
|
434
|
-
# @
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
# @return [Array<Hash>] List of all test cases in the DB matching
|
439
|
-
# test_case_name and their associated info.
|
440
|
-
def test_case_id_by_name(test_case_name, options={})
|
441
|
-
args = { :testcasename => test_case_name }
|
442
|
-
args.merge! options
|
443
|
-
make_call("tl.getTestCaseIDByName", args, "1.0b5")
|
484
|
+
# @api TestLink API version 1.0
|
485
|
+
# @param [Fixnum,String] suite_id
|
486
|
+
# @return
|
487
|
+
def test_suite_by_id suite_id
|
488
|
+
args = { :testsuiteid => suite_id }
|
489
|
+
make_call("tl.getTestSuiteByID", args, "1.0")
|
444
490
|
end
|
445
|
-
alias_method :
|
491
|
+
alias_method :getTestSuiteByID, :test_suite_by_id
|
446
492
|
|
447
|
-
#
|
448
|
-
#
|
449
|
-
# @param [Fixnum,String]
|
450
|
-
# @return [Array<Hash>]
|
451
|
-
def
|
452
|
-
args = { :testplanid => plan_id
|
453
|
-
make_call("tl.
|
493
|
+
# List test suites within a test plan alphabetically.
|
494
|
+
#
|
495
|
+
# @param [Fixnum,String] plan_id ID of the plan to get suites for.
|
496
|
+
# @return [Array<Hash>] List of all suites in plan and their associated info.
|
497
|
+
def test_suites_for_test_plan plan_id
|
498
|
+
args = { :testplanid => plan_id }
|
499
|
+
make_call("tl.getTestSuitesForTestPlan", args, "1.0b5")
|
454
500
|
end
|
455
|
-
alias_method :
|
501
|
+
alias_method :getTestSuitesForTestPlan, :test_suites_for_test_plan
|
456
502
|
|
457
|
-
# Gets a list of
|
503
|
+
# Gets a list of test suites that are direct children of the given test suite.
|
458
504
|
#
|
459
|
-
# @
|
460
|
-
# @
|
461
|
-
#
|
462
|
-
def
|
463
|
-
args = { :
|
464
|
-
make_call("tl.
|
505
|
+
# @api TestLink API version 1.0
|
506
|
+
# @param [Fixnum,String] suite_id ID of the suite to get suites for.
|
507
|
+
# @return [Array<Hash>] List of all suites in plan and their associated info.
|
508
|
+
def test_suites_for_test_suite suite_id
|
509
|
+
args = { :testsuiteid => suite_id }
|
510
|
+
make_call("tl.getTestSuitesForTestSuite", args, "1.0")
|
465
511
|
end
|
466
|
-
alias_method :
|
512
|
+
alias_method :getTestSuitesForTestSuite, :test_suites_for_test_suite
|
467
513
|
|
468
|
-
#
|
469
|
-
#
|
470
|
-
|
514
|
+
# Gets the summarized results grouped by platform.
|
515
|
+
#
|
516
|
+
# @api TestLink API version 1.0
|
517
|
+
# @param [Fixnum,String] plan_id
|
518
|
+
# @return [Hash] Contains "type" => platform, "total_tc" => X, "details =>
|
519
|
+
# Array of counts.
|
520
|
+
def totals_for_test_plan plan_id
|
471
521
|
args = { :testplanid => plan_id }
|
472
|
-
make_call("tl.
|
522
|
+
make_call("tl.getTotalsForTestPlan", args, "1.0")
|
473
523
|
end
|
474
|
-
alias_method :
|
524
|
+
alias_method :getTotalsForTestPlan, :totals_for_test_plan
|
475
525
|
|
476
|
-
#
|
477
|
-
#
|
526
|
+
# Uploads an attachment for specified table. You must specify the table that
|
527
|
+
# the attachment is connected (nodes_hierarchy, builds, etc) and the foreign
|
528
|
+
# key id in this table The attachment must be Base64 encoded by the client
|
529
|
+
# before sending it.
|
530
|
+
#
|
531
|
+
# @api TestLink API version 1.0
|
532
|
+
# @param [Fixnum,String] foreign_key_id
|
533
|
+
# @param [String] foreign_key_table
|
534
|
+
# @param [String] file_name
|
535
|
+
# @param [String] mime_type
|
536
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
478
537
|
# @param [Hash] options
|
479
|
-
# @option options [String]
|
480
|
-
# @option options [
|
481
|
-
# requirementsEnabled, testPriorityEnabled, automationEnabled,
|
482
|
-
# inventoryEnabled
|
483
|
-
# @option options [Fixnum] active
|
484
|
-
# @option options [Fixnum] public
|
538
|
+
# @option options [String] title
|
539
|
+
# @option options [String] description
|
485
540
|
# @return
|
486
|
-
def
|
487
|
-
|
541
|
+
def upload_attachment(foreign_key_id, foreign_key_table, file_name,
|
542
|
+
mime_type, content, options={})
|
543
|
+
args = { :fkid => foreign_key_id, :fktable => foreign_key_table,
|
544
|
+
:filename => file_name, :filetype => mime_type, :content => content }
|
488
545
|
args.merge! options
|
489
|
-
make_call("tl.
|
546
|
+
make_call("tl.uploadAttachment", args, "1.0")
|
490
547
|
end
|
491
|
-
alias_method :
|
548
|
+
alias_method :uploadAttachment, :upload_attachment
|
492
549
|
|
550
|
+
# Uploads an attachment for a test case execution.
|
551
|
+
#
|
493
552
|
# @api TestLink API version 1.0
|
494
|
-
# @param [String]
|
495
|
-
# @param [String]
|
553
|
+
# @param [Fixnum,String] execution_id
|
554
|
+
# @param [String] file_name
|
555
|
+
# @param [String] mime_type
|
556
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
496
557
|
# @param [Hash] options
|
497
|
-
# @option options [String]
|
498
|
-
# @option options [String]
|
499
|
-
# @option options [String] public Defaults to 1.
|
558
|
+
# @option options [String] title
|
559
|
+
# @option options [String] description
|
500
560
|
# @return
|
501
|
-
def
|
502
|
-
|
561
|
+
def upload_execution_attachment(execution_id, file_name, mime_type, content,
|
562
|
+
options={})
|
563
|
+
args = { :executionid => execution_id, :filename => file_name,
|
564
|
+
:filetype => mime_type, :content => content }
|
503
565
|
args.merge! options
|
504
|
-
make_call(
|
566
|
+
make_call("tl.uploadExecutionAttachment", args, "1.0")
|
505
567
|
end
|
506
|
-
alias_method :
|
568
|
+
alias_method :uploadExecutionAttachment, :upload_execution_attachment
|
507
569
|
|
570
|
+
# Uploads an attachment for a Test Project. The attachment must be Base64
|
571
|
+
# encoded by the client before sending it.
|
572
|
+
#
|
573
|
+
# @api TestLink API version 1.0
|
508
574
|
# @param [Fixnum,String] project_id
|
509
|
-
# @param [String]
|
510
|
-
# @param [String]
|
575
|
+
# @param [String] file_name
|
576
|
+
# @param [String] mime_type
|
577
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
511
578
|
# @param [Hash] options
|
512
|
-
# @option options [
|
513
|
-
# @option options [
|
514
|
-
# @
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
def create_test_suite(project_id, suite_name, details, options={})
|
520
|
-
args = { :testprojectid => project_id, :testsuitename => suite_name,
|
521
|
-
:details => details }
|
579
|
+
# @option options [String] title
|
580
|
+
# @option options [String] description
|
581
|
+
# @return
|
582
|
+
def upload_project_attachment(project_id, file_name, mime_type, content,
|
583
|
+
options={})
|
584
|
+
args = { :testprojectid => project_id, :filename => file_name,
|
585
|
+
:filetype => mime_type, :content => content }
|
522
586
|
args.merge! options
|
523
|
-
make_call(
|
587
|
+
make_call("tl.uploadTestProjectAttachment", args, "1.0")
|
524
588
|
end
|
525
|
-
alias_method :
|
589
|
+
alias_method :uploadTestProjectAttachment, :upload_project_attachment
|
526
590
|
|
527
|
-
#
|
591
|
+
# Uploads an attachment for a Requirement. The attachment content must be
|
592
|
+
# Base64 encoded by the client before sending it.
|
528
593
|
#
|
529
|
-
# @
|
530
|
-
# @param [String]
|
531
|
-
# @param [String]
|
532
|
-
# @
|
533
|
-
|
534
|
-
args = { :testplanid => plan_id, :buildname => build_name,
|
535
|
-
:buildnotes => build_notes }
|
536
|
-
make_call("tl.createBuild", args, "1.0b5")
|
537
|
-
end
|
538
|
-
alias_method :createBuild, :create_build
|
539
|
-
|
540
|
-
# @param [Fixnum,String] project_id
|
541
|
-
# @param [Fixnum,String] suite_id
|
542
|
-
# @param [String] test_case_name
|
543
|
-
# @param [String] test_case_summary
|
544
|
-
# @param [String] test_case_steps
|
545
|
-
# @param [String] test_case_expected_results
|
546
|
-
# @param [String] login
|
594
|
+
# @api TestLink API version 1.0
|
595
|
+
# @param [Fixnum,String] requirement_id
|
596
|
+
# @param [String] file_name
|
597
|
+
# @param [String] mime_type
|
598
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
547
599
|
# @param [Hash] options
|
548
|
-
# @option options [String]
|
549
|
-
# @option options [String]
|
550
|
-
# @option options [Fixnum] order
|
551
|
-
# @option options [Fixnum,String] internalid
|
552
|
-
# @option options [Boolean] checkduplicatedname
|
553
|
-
# @option options [String] actiononduplicatedname
|
554
|
-
# @option options [String] executiontype
|
600
|
+
# @option options [String] title
|
601
|
+
# @option options [String] description
|
555
602
|
# @return
|
556
|
-
def
|
557
|
-
|
558
|
-
args = { :
|
559
|
-
:
|
560
|
-
:testprojectid => project_id,
|
561
|
-
:authorlogin => login,
|
562
|
-
:summary => test_case_summary,
|
563
|
-
:steps => test_case_steps,
|
564
|
-
:expectedresults => test_case_expected_results }
|
603
|
+
def upload_requirement_attachment(requirement_id, file_name, mime_type,
|
604
|
+
content, options={})
|
605
|
+
args = { :requirementid => requirement_id, :filename => file_name,
|
606
|
+
:filetype => mime_type, :content => content }
|
565
607
|
args.merge! options
|
566
|
-
make_call("tl.
|
608
|
+
make_call("tl.uploadRequirementAttachment", args, "1.0")
|
567
609
|
end
|
568
|
-
alias_method :
|
610
|
+
alias_method :uploadRequirementAttachment, :upload_requirement_attachment
|
569
611
|
|
570
|
-
#
|
612
|
+
# Uploads an attachment for a Requirement Specification. The attachment
|
613
|
+
# content must be Base64 encoded by the client before sending it.
|
571
614
|
#
|
572
|
-
# @
|
573
|
-
# @param [Fixnum,String]
|
574
|
-
# @param [
|
575
|
-
# @param [
|
576
|
-
# @param [
|
577
|
-
# @
|
578
|
-
# @option options [
|
579
|
-
# @option options [
|
580
|
-
# (TestLink API >=1.0)
|
615
|
+
# @api TestLink API version 1.0
|
616
|
+
# @param [Fixnum,String] requirement_specification_id
|
617
|
+
# @param [String] file_name
|
618
|
+
# @param [String] mime_type
|
619
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
620
|
+
# @param [Hash] options
|
621
|
+
# @option options [String] title
|
622
|
+
# @option options [String] description
|
581
623
|
# @return
|
582
|
-
def
|
583
|
-
|
584
|
-
args = { :
|
585
|
-
:
|
586
|
-
:version => test_case_version }
|
624
|
+
def upload_requirement_specification_attachment(requirement_specification_id,
|
625
|
+
file_name, mime_type, content, options={})
|
626
|
+
args = { :reqspecid => requirement_specification_id, :filename => file_name,
|
627
|
+
:filetype => mime_type, :content => content }
|
587
628
|
args.merge! options
|
588
|
-
make_call("tl.
|
629
|
+
make_call("tl.uploadRequirementSpecificationAttachment", args, "1.0")
|
589
630
|
end
|
590
|
-
alias_method :
|
631
|
+
alias_method :uploadRequirementSpecificationAttachment,
|
632
|
+
:upload_requirement_specification_attachment
|
591
633
|
|
592
|
-
#
|
593
|
-
#
|
594
|
-
# NOTE: Renamed to setTestCaseExecutionResult in version 1.0.
|
634
|
+
# Uploads an attachment for a Test Case. The attachment must be Base64
|
635
|
+
# encoded by the client before sending it.
|
595
636
|
#
|
596
|
-
# @
|
597
|
-
# @
|
598
|
-
# @param [
|
599
|
-
# @param [
|
600
|
-
# @param [String]
|
637
|
+
# @api TestLink API version 1.0
|
638
|
+
# @param [Fixnum,String] test_case_id
|
639
|
+
# @param [String] file_name
|
640
|
+
# @param [String] mime_type
|
641
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
601
642
|
# @param [Hash] options
|
602
|
-
# @option options [
|
603
|
-
# @option options [
|
604
|
-
# @
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
# @option options [String] customfields i.e. "NAME: Steve Loveless\n"
|
610
|
-
# (TestLink API >=1.0)
|
611
|
-
# @option options [String] notes ?
|
612
|
-
# @return [Hash] "status" of posting, "id" of the execution, "message"
|
613
|
-
# giving success or failure info.
|
614
|
-
# @raise [TestLinker::Error] If result fails to be posted for any reason.
|
615
|
-
def report_test_case_result(plan_id, test_case_id, status, options={})
|
616
|
-
if @version >= "1.0"
|
617
|
-
message = "Method not supported in version #{@version}. "
|
618
|
-
message << "Use #test_case_execution_result="
|
619
|
-
raise TestLinker::Error, message
|
620
|
-
end
|
621
|
-
|
622
|
-
args = { :testcaseid => test_case_id, :testplanid => plan_id,
|
623
|
-
:status => status, :guess => true }
|
643
|
+
# @option options [String] title
|
644
|
+
# @option options [String] description
|
645
|
+
# @return
|
646
|
+
def upload_test_case_attachment(test_case_id, file_name, mime_type, content,
|
647
|
+
options={})
|
648
|
+
args = { :testcaseid => test_case_id, :filename => file_name,
|
649
|
+
:filetype => mime_type, :content => content }
|
624
650
|
args.merge! options
|
625
|
-
|
626
|
-
|
627
|
-
unless result['message'] == 'Success!'
|
628
|
-
raise TestLinker::Error, "#{result['code']}: #{result['message']}"
|
629
|
-
end
|
630
|
-
|
631
|
-
result
|
651
|
+
make_call("tl.uploadTestCaseAttachment", args, "1.0")
|
632
652
|
end
|
633
|
-
alias_method :
|
653
|
+
alias_method :uploadTestCaseAttachment, :upload_test_case_attachment
|
634
654
|
|
635
|
-
#
|
636
|
-
#
|
655
|
+
# Uploads an attachment for a Test Suite. The attachment must be Base64
|
656
|
+
# encoded by the client before sending it.
|
637
657
|
#
|
638
|
-
# @see #report_test_case_result
|
639
658
|
# @api TestLink API version 1.0
|
640
|
-
# @param [String]
|
641
|
-
# @param [String]
|
642
|
-
# @param [String]
|
659
|
+
# @param [Fixnum,String] suite_id
|
660
|
+
# @param [String] file_name
|
661
|
+
# @param [String] mime_type
|
662
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
643
663
|
# @param [Hash] options
|
644
|
-
# @option options [
|
645
|
-
# @option options [String]
|
646
|
-
# @
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
# @option options [String] customfields (version 1.0)
|
652
|
-
# @option options [String] overwrite (version 1.0)
|
653
|
-
# @return [Hash] "status" of posting, "id" of the execution, "message"
|
654
|
-
# giving success or failure info.
|
655
|
-
# @raise [TestLinker::Error] If result fails to be posted for any reason.
|
656
|
-
def test_case_execution_result=(plan_id, test_case_id, status, options={})
|
657
|
-
if @version < "1.0"
|
658
|
-
message = "Method not supported in version #{@version}. "
|
659
|
-
message << "Use #report_test_case_result"
|
660
|
-
raise TestLinker::Error, message
|
661
|
-
end
|
662
|
-
|
663
|
-
args = { :testcaseid => test_case_id, :testplanid => plan_id,
|
664
|
-
:status => status, :guess => true }
|
664
|
+
# @option options [String] title
|
665
|
+
# @option options [String] description
|
666
|
+
# @return
|
667
|
+
def upload_test_suite_attachment(suite_id, file_name, mime_type, content,
|
668
|
+
options={})
|
669
|
+
args = { :testsuiteid => suite_id, :filename => file_name,
|
670
|
+
:filetype => mime_type, :content => content }
|
665
671
|
args.merge! options
|
666
|
-
|
667
|
-
|
668
|
-
unless result['message'] == 'Success!'
|
669
|
-
raise TestLinker::Error, "#{result['code']}: #{result['message']}"
|
670
|
-
end
|
671
|
-
|
672
|
-
result
|
672
|
+
make_call("tl.uploadTestSuiteAttachment", args, "1.0")
|
673
673
|
end
|
674
|
-
alias_method :
|
674
|
+
alias_method :uploadTestSuiteAttachment, :upload_test_suite_attachment
|
675
675
|
end
|
676
676
|
end
|