test_linker 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +3 -0
- data/.gemtest +0 -0
- data/.rspec +1 -0
- data/.yardopts +4 -0
- data/ChangeLog.rdoc +8 -0
- data/Gemfile +16 -0
- data/LICENSE.rdoc +20 -0
- data/README.rdoc +128 -0
- data/Rakefile +48 -0
- data/features/get_info.feature +63 -0
- data/features/step_definitions/get_info_steps.rb +78 -0
- data/features/support/common.rb +13 -0
- data/features/support/env.rb +5 -0
- data/gemspec.yml +25 -0
- data/lib/test_linker.rb +130 -0
- data/lib/test_linker/error.rb +4 -0
- data/lib/test_linker/helpers.rb +261 -0
- data/lib/test_linker/version.rb +4 -0
- data/lib/test_linker/wrapper.rb +687 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/test_linker_spec.rb +27 -0
- data/test_linker.gemspec +276 -0
- metadata +861 -0
@@ -0,0 +1,261 @@
|
|
1
|
+
require_relative 'error'
|
2
|
+
|
3
|
+
# This module contains methods that aren't a part of the TestLink API. They
|
4
|
+
# intend to make accessing TestLink database info easier.
|
5
|
+
module TestLinker::Helpers
|
6
|
+
|
7
|
+
# @return [String] The version of TestLink's API.
|
8
|
+
def api_version
|
9
|
+
if @api_version
|
10
|
+
@api_version
|
11
|
+
else
|
12
|
+
about =~ /Testlink API Version: (.+) initially/
|
13
|
+
@api_version = $1
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Gets ID of project matching the given project_name.
|
18
|
+
#
|
19
|
+
# @param [String] project_name Name of the project to search for.
|
20
|
+
# @return [Fixnum] ID of project matching project_name.
|
21
|
+
# @raise [TestLinker::Error] When ID cannot be found for given
|
22
|
+
# project_name.
|
23
|
+
def test_project_id project_name
|
24
|
+
if @version < "1.0"
|
25
|
+
project = projects.find { |project| project["name"] == project_name }
|
26
|
+
else
|
27
|
+
project = test_project_by_name(project_name).first
|
28
|
+
raise TestLinker::Error, project['message'] if project['code']
|
29
|
+
end
|
30
|
+
|
31
|
+
project.nil? ? nil : project['id'].to_i
|
32
|
+
end
|
33
|
+
|
34
|
+
# Gets info about test plans within a project
|
35
|
+
#
|
36
|
+
# @param [String] project_name Name of the project to search for.
|
37
|
+
# @param [String] plan_name Name of the plan to search for.
|
38
|
+
# @return [Fixnum] ID of plan matching project_name and plan_name. 0 if the
|
39
|
+
# test plan wasn't found.
|
40
|
+
# @raise [RuntimeError] When unable to find matching project and plan names.
|
41
|
+
def test_plan_id(project_name, plan_name)
|
42
|
+
if @version < "1.0"
|
43
|
+
project_id = test_project_id project_name
|
44
|
+
test_plans = project_test_plans(project_id)
|
45
|
+
|
46
|
+
test_plan = test_plans.first.values.find do |project_test_plan|
|
47
|
+
project_test_plan["name"] == plan_name
|
48
|
+
end
|
49
|
+
else
|
50
|
+
test_plan = test_plan_by_name(project_name, plan_name).first
|
51
|
+
raise TestLinker::Error, test_plan['message'] if test_plan['code']
|
52
|
+
end
|
53
|
+
|
54
|
+
test_plan.nil? ? nil : test_plan['id'].to_i
|
55
|
+
end
|
56
|
+
|
57
|
+
# Gets the ID for the given build name.
|
58
|
+
#
|
59
|
+
# @param [String] project_name Name of the project to search for.
|
60
|
+
# @param [String] plan_name Name of the plan to search for.
|
61
|
+
# @param [String] build_name Name of the build to search for.
|
62
|
+
# @return [Fixnum] ID of plan matching project_name and plan_name
|
63
|
+
# @raise [TestLinker::Error] When unable to find matching
|
64
|
+
# project/plan/build names.
|
65
|
+
def build_id(project_name, plan_name, build_name)
|
66
|
+
plan_id = test_plan_id(project_name, plan_name)
|
67
|
+
builds = builds_for_test_plan plan_id
|
68
|
+
|
69
|
+
builds.each do |build|
|
70
|
+
if build['name'] == build_name
|
71
|
+
return build['id'].to_i
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
raise TestLinker::Error,
|
76
|
+
"Unable to find build named #{build_name} for #{plan_name} in #{project_name}"
|
77
|
+
end
|
78
|
+
|
79
|
+
# @param [Fixnum,String] project_id
|
80
|
+
# @param [Regexp] regex The expression to match test plan names on.
|
81
|
+
# @return [Array] An array of test plans that match the Regexp.
|
82
|
+
def find_test_plans(project_id, regex)
|
83
|
+
list = []
|
84
|
+
test_plan_list = project_test_plans(project_id).first
|
85
|
+
|
86
|
+
test_plan_list.each_value do |test_plan_info|
|
87
|
+
if test_plan_info["name"] =~ regex
|
88
|
+
list << test_plan_info
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
list
|
93
|
+
end
|
94
|
+
|
95
|
+
# @param [String] project_name
|
96
|
+
# @param [String] suite_name
|
97
|
+
# @return [Fixnum] ID of the requested test suite.
|
98
|
+
# @raise [TestLinker::Error] If no test suite was found by the given name.
|
99
|
+
def first_level_test_suite_id(project_name, suite_name)
|
100
|
+
test_suites = first_level_test_suites_for_test_project(test_project_id(project_name))
|
101
|
+
|
102
|
+
test_suites.each do |test_suite|
|
103
|
+
if test_suite['name'] == suite_name
|
104
|
+
return test_suite['id'].to_i
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
raise TestLinker::Error, "Suite #{suite_name} not found."
|
109
|
+
end
|
110
|
+
|
111
|
+
# Gets info about test case within a test plan within a project.
|
112
|
+
#
|
113
|
+
# @param [String] project_name Name of the project to search for.
|
114
|
+
# @param [String] plan_name Name of the plan to search for.
|
115
|
+
# @param [String] test_case_name Name of the test case to search for.
|
116
|
+
# @return [Hash] Info on the first matching test case.
|
117
|
+
# @raise [TestLinker::Error] When unable to find matching
|
118
|
+
# project/plan/test case names.
|
119
|
+
# @todo Need to update for having more than one of same test name inside test plan.
|
120
|
+
def test_info(project_name, plan_name, test_case_name)
|
121
|
+
test_plan_id = test_plan_id(project_name, plan_name)
|
122
|
+
test_cases = test_cases_for_test_plan(test_plan_id)
|
123
|
+
|
124
|
+
test_cases.each_value do |test_case_info|
|
125
|
+
if test_case_info['name'] == test_case_name
|
126
|
+
return test_case_info
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
raise TestLinker::Error,
|
131
|
+
"Unable to find test named #{test_case_name} for #{plan_name} in #{project_name}"
|
132
|
+
end
|
133
|
+
|
134
|
+
# Gets info about test suite within a test plan within a project.
|
135
|
+
#
|
136
|
+
# @param [String] project_name
|
137
|
+
# @param [String] plan_name
|
138
|
+
# @param [String] suite_name
|
139
|
+
# @return [Fixnum,String] SuiteID
|
140
|
+
# @raise [TestLinker::Error] When unable to find matching
|
141
|
+
# project/plan/test case names.
|
142
|
+
# @todo Need to update for having more than one of same test name inside test plan.
|
143
|
+
def suite_info(project_name, plan_name, suite_name)
|
144
|
+
test_plan_id = test_plan_id(project_name, plan_name)
|
145
|
+
test_suites = test_suites_for_test_plan(test_plan_id)
|
146
|
+
|
147
|
+
if test_suites.empty?
|
148
|
+
return "Unable to find test suites in test plan #{plan_name} in #{project_name}"
|
149
|
+
end
|
150
|
+
|
151
|
+
test_suites.each do |suite|
|
152
|
+
if suite["name"].include? suite_name
|
153
|
+
return suite
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
raise TestLinker::Error,
|
158
|
+
"Unable to find suite named #{suite_name} for #{plan_name} in #{project_name}"
|
159
|
+
end
|
160
|
+
|
161
|
+
# Get the ID of a first level suite, creating it if it does not exist.
|
162
|
+
#
|
163
|
+
# @param [String] project_name
|
164
|
+
# @param [String] suite_name
|
165
|
+
# @return [String] ID of the created or existing suite.
|
166
|
+
def create_first_level_suite(project_name, suite_name)
|
167
|
+
return first_level_test_suite_id(project_name, suite_name)
|
168
|
+
rescue RuntimeError
|
169
|
+
|
170
|
+
# Create suite if it doesn't exist.
|
171
|
+
project_id = test_project_id(project_name)
|
172
|
+
|
173
|
+
create_test_suite(project_id, suite_name).first['id']
|
174
|
+
end
|
175
|
+
|
176
|
+
# Get the ID of a suite with the given parent, creating it if it does not
|
177
|
+
# exist.
|
178
|
+
#
|
179
|
+
# @param [String] suite_name
|
180
|
+
# @param [String] project_name
|
181
|
+
# @return [String] ID of the created or existing suite.
|
182
|
+
# @raise [TestLinker::Error] When unable to find matching
|
183
|
+
# project/plan/test case names.
|
184
|
+
def create_suite(suite_name, project_name, parent_id)
|
185
|
+
project_id = test_project_id(project_name)
|
186
|
+
response = test_suites_for_test_suite(parent_id)
|
187
|
+
|
188
|
+
if response.class == Array
|
189
|
+
raise TestLinker::Error, response.first['message']
|
190
|
+
elsif response.class == Hash
|
191
|
+
return response['id'] if response['name'] == suite_name
|
192
|
+
|
193
|
+
response.each_value do |suite|
|
194
|
+
return suite['id'] if suite['name'] == suite_name
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
create_test_suite(project_id, suite_name, parent_id).first['id']
|
199
|
+
end
|
200
|
+
|
201
|
+
# Creates test in test suite within a test plan within a project.
|
202
|
+
#
|
203
|
+
# @param [String] test_case_name
|
204
|
+
# @param [String] suite_name
|
205
|
+
# @param [String] project_name
|
206
|
+
# @param [String] login
|
207
|
+
# @param [String] summary
|
208
|
+
# @param [String] steps
|
209
|
+
# @param [String] expected_results
|
210
|
+
# @return [Array] array-> array[0]=test case id, array[1]=test case version
|
211
|
+
# @todo Need to update for having more than one of same test name inside test plan.
|
212
|
+
def create_test_case_by_name(test_case_name, suite_name, project_name, login,
|
213
|
+
summary, steps, expected_results)
|
214
|
+
|
215
|
+
test_project_id = self.test_project_id(project_name)
|
216
|
+
test_suite_id = self.suite_info(project_name, plan_name, suite_name)
|
217
|
+
|
218
|
+
result = create_test_case(login, test_project_id, test_suite_id, test_case_name,
|
219
|
+
summary, steps, expected_results)
|
220
|
+
|
221
|
+
if result.any?
|
222
|
+
result.each do |result_ptr|
|
223
|
+
if result_ptr["message"].eql? "Success!"
|
224
|
+
if result_ptr.has_key? "additionalInfo"
|
225
|
+
result_info = result_ptr.fetch("additionalInfo")
|
226
|
+
if result_info["msg"].eql? "ok"
|
227
|
+
test_case_id = result_info["id"]
|
228
|
+
test_case_version = result_info["version_number"]
|
229
|
+
return [test_case_id, test_case_version]
|
230
|
+
else
|
231
|
+
return -1
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
# Creates test in test suite within a test plan within a project.
|
240
|
+
#
|
241
|
+
# @param [String] project_name
|
242
|
+
# @param [String] plan_name
|
243
|
+
# @param [Fixnum,String] test_case_id
|
244
|
+
# @param [String] test_case_version
|
245
|
+
# @return [Boolean] true on success, false on fail
|
246
|
+
# @todo NEED TO CLEAN THIS UP AND ADD ERROR CHECKING
|
247
|
+
# @todo Need to update for having more than one of same test name inside testplan
|
248
|
+
def add_test_case_to_test_plan_by_name(project_name, plan_name, test_case_id,
|
249
|
+
test_case_version)
|
250
|
+
test_project_id = test_project_id(project_name)
|
251
|
+
test_plan_id = test_plan_id(project_name, plan_name)
|
252
|
+
|
253
|
+
result = add_test_case_to_test_plan(test_project_id, test_plan_id,
|
254
|
+
test_case_id, test_case_version)
|
255
|
+
|
256
|
+
if result.any?
|
257
|
+
#Only way to tell if success if with the key "feature_id"
|
258
|
+
return result.has_key?("feature_id") ? true : false
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
@@ -0,0 +1,687 @@
|
|
1
|
+
require_relative 'error'
|
2
|
+
|
3
|
+
class TestLinker
|
4
|
+
|
5
|
+
# This module contains all methods that directly wrap TestLink's XMLRPC
|
6
|
+
# functions.
|
7
|
+
module Wrapper
|
8
|
+
|
9
|
+
# Gets a test case by it's internal or external ID.
|
10
|
+
#
|
11
|
+
# @since TestLink API version 1.0
|
12
|
+
# @param [Hash] options
|
13
|
+
# @option options [Fixnum,String] testcaseid
|
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
|
+
args = { "devKey" => @dev_key }
|
19
|
+
args.merge! options
|
20
|
+
make_call("tl.getTestCase", args, "1.0")
|
21
|
+
end
|
22
|
+
alias_method :getTestCase, :test_case
|
23
|
+
|
24
|
+
# Gets full path from the given node till the top using nodes_hierarchy_table.
|
25
|
+
#
|
26
|
+
# @since TestLink API version 1.0
|
27
|
+
# @param [Fixnum,String] node_id
|
28
|
+
# @return
|
29
|
+
def full_path node_id
|
30
|
+
args = { "devKey" => @dev_key, "nodeID" => node_id }
|
31
|
+
make_call("tl.getFullPath", args, "1.0")
|
32
|
+
end
|
33
|
+
alias_method :getFullPath, :full_path
|
34
|
+
|
35
|
+
# Gets a test suite by the given ID.
|
36
|
+
#
|
37
|
+
# @since TestLink API version 1.0
|
38
|
+
# @param [Fixnum,String] suite_id
|
39
|
+
# @return
|
40
|
+
def test_suite_by_id suite_id
|
41
|
+
args = { "devKey" => @dev_key, "testsuiteid" => suite_id }
|
42
|
+
make_call("tl.getTestSuiteByID", args, "1.0")
|
43
|
+
end
|
44
|
+
alias_method :getTestSuiteByID, :test_suite_by_id
|
45
|
+
|
46
|
+
# @since TestLink API version 1.0
|
47
|
+
# @param [Fixnum,String] execution_id
|
48
|
+
# @return [Hash] "status", "id", "message"
|
49
|
+
def delete_execution execution_id
|
50
|
+
args = { "devKey" => @dev_key, "executionid" => execution_id }
|
51
|
+
make_call("tl.deleteExecution", args, "1.0")
|
52
|
+
end
|
53
|
+
alias_method :deleteExecution, :delete_execution
|
54
|
+
|
55
|
+
# @since TestLink API version 1.0
|
56
|
+
# @param [String] user_name
|
57
|
+
# @return [Boolean,Hash] true if user exists, otherwise an error structure.
|
58
|
+
def does_user_exist user_name
|
59
|
+
args = { "devKey" => @dev_key, "user" => user_name }
|
60
|
+
make_call("tl.doesUserExist", args, "1.0")
|
61
|
+
end
|
62
|
+
alias_method :doesUserExist, :does_user_exist
|
63
|
+
|
64
|
+
# Checks if the given Developer Key exist.
|
65
|
+
#
|
66
|
+
# @since TestLink API version 1.0
|
67
|
+
# @param [String] dev_key
|
68
|
+
# @return [Hash] "true" if it exists, otherwise error structure.
|
69
|
+
def check_dev_key dev_key
|
70
|
+
args = { "devKey" => dev_key }
|
71
|
+
make_call("tl.checkDevKey", args, "1.0")
|
72
|
+
end
|
73
|
+
alias_method :checkDevKey, :check_dev_key
|
74
|
+
|
75
|
+
# Uploads an attachment for a test case execution.
|
76
|
+
#
|
77
|
+
# @since TestLink API version 1.0
|
78
|
+
# @param [String] file_name
|
79
|
+
# @param [String] mime_type
|
80
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
81
|
+
# @param [Fixnum,String] execution_id
|
82
|
+
# @param [Hash] options
|
83
|
+
# @option options [String] title
|
84
|
+
# @option options [String] description
|
85
|
+
# @return
|
86
|
+
def upload_execution_attachment(file_name, mime_type, content, execution_id,
|
87
|
+
options={})
|
88
|
+
args = { "devKey" => @dev_key, "executionid" => execution_id,
|
89
|
+
"filename" => file_name, "filetype" => mime_type, "content" => content }
|
90
|
+
args.merge! options
|
91
|
+
make_call("tl.uploadExecutionAttachment", args, "1.0")
|
92
|
+
end
|
93
|
+
alias_method :uploadExecutionAttachment, :upload_execution_attachment
|
94
|
+
|
95
|
+
# Uploads an attachment for a Requirement. The attachment content must be
|
96
|
+
# Base64 encoded by the client before sending it.
|
97
|
+
#
|
98
|
+
# @since TestLink API version 1.0
|
99
|
+
# @param [Fixnum,String] requirement_id
|
100
|
+
# @param [String] file_name
|
101
|
+
# @param [String] mime_type
|
102
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
103
|
+
# @param [Hash] options
|
104
|
+
# @option options [String] title
|
105
|
+
# @option options [String] description
|
106
|
+
# @return
|
107
|
+
def upload_requirement_attachment(file_name, mime_type, content,
|
108
|
+
requirement_id, options={})
|
109
|
+
args = { "devKey" => @dev_key, "requirementid" => requirement_id,
|
110
|
+
"filename" => file_name, "filetype" => mime_type, "content" => content }
|
111
|
+
args.merge! options
|
112
|
+
make_call("tl.uploadRequirementAttachment", args, "1.0")
|
113
|
+
end
|
114
|
+
alias_method :uploadRequirementAttachment, :upload_requirement_attachment
|
115
|
+
|
116
|
+
# Uploads an attachment for a Requirement Specification. The attachment
|
117
|
+
# content must be Base64 encoded by the client before sending it.
|
118
|
+
#
|
119
|
+
# @since TestLink API version 1.0
|
120
|
+
# @param [String] file_name
|
121
|
+
# @param [String] mime_type
|
122
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
123
|
+
# @param [Fixnum,String] requirement_id
|
124
|
+
# @param [Hash] options
|
125
|
+
# @option options [String] title
|
126
|
+
# @option options [String] description
|
127
|
+
# @return
|
128
|
+
def upload_requirement_specification_attachment(file_name, mime_type, content,
|
129
|
+
requirement_specification_id, options={})
|
130
|
+
args = { "devKey" => @dev_key, "reqspecid" => requirement_specification_id,
|
131
|
+
"filename" => file_name, "filetype" => mime_type, "content" => content }
|
132
|
+
args.merge! options
|
133
|
+
make_call("tl.uploadRequirementSpecificationAttachment", args, "1.0")
|
134
|
+
end
|
135
|
+
alias_method :uploadRequirementSpecificationAttachment,
|
136
|
+
:upload_requirement_specification_attachment
|
137
|
+
|
138
|
+
# Assign Requirements to a test case. Capable of assigning multiple
|
139
|
+
# requirements. Requirements can belong to different Requirement Specs.
|
140
|
+
#
|
141
|
+
# @param [String] requirements
|
142
|
+
# @param [Fixnum,String] test_case_external_id
|
143
|
+
# @param [Fixnum,String] project_id
|
144
|
+
# @return
|
145
|
+
def assign_requirements(requirements, test_case_external_id, project_id)
|
146
|
+
args = { "devKey" => @dev_key, "testcaseexternalid" => test_case_external_id,
|
147
|
+
"testprojectid" => project_id, "requirements" => requirements }
|
148
|
+
make_call("tl.assignRequirements", args, "1.0b5")
|
149
|
+
end
|
150
|
+
alias_method :assignRequirements, :assign_requirements
|
151
|
+
|
152
|
+
# Uploads an attachment for a Test Project. The attachment must be Base64
|
153
|
+
# encoded by the client before sending it.
|
154
|
+
#
|
155
|
+
# @since TestLink API version 1.0
|
156
|
+
# @param [String] file_name
|
157
|
+
# @param [String] mime_type
|
158
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
159
|
+
# @param [Fixnum,String] project_id
|
160
|
+
# @param [Hash] options
|
161
|
+
# @option options [String] title
|
162
|
+
# @option options [String] description
|
163
|
+
# @return
|
164
|
+
def upload_test_project_attachment(file_name, mime_type, content, project_id,
|
165
|
+
options={})
|
166
|
+
args = { "devKey" => @dev_key, "testprojectid" => project_id,
|
167
|
+
"filename" => file_name, "filetype" => mime_type, "content" => content }
|
168
|
+
args.merge! options
|
169
|
+
make_call("tl.uploadTestProjectAttachment", args, "1.0")
|
170
|
+
end
|
171
|
+
alias_method :uploadTestProjectAttachment, :upload_test_project_attachment
|
172
|
+
|
173
|
+
# Uploads an attachment for a Test Suite. The attachment must be Base64
|
174
|
+
# encoded by the client before sending it.
|
175
|
+
#
|
176
|
+
# @since TestLink API version 1.0
|
177
|
+
# @param [String] file_name
|
178
|
+
# @param [String] mime_type
|
179
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
180
|
+
# @param [Fixnum,String] suite_id
|
181
|
+
# @param [Hash] options
|
182
|
+
# @option options [String] title
|
183
|
+
# @option options [String] description
|
184
|
+
# @return
|
185
|
+
def upload_test_suite_attachment(file_name, mime_type, content, suite_id,
|
186
|
+
options={})
|
187
|
+
args = { "devKey" => @dev_key, "testsuiteid" => suite_id,
|
188
|
+
"filename" => file_name, "filetype" => mime_type, "content" => content }
|
189
|
+
args.merge! options
|
190
|
+
make_call("tl.uploadTestSuiteAttachment", args, "1.0")
|
191
|
+
end
|
192
|
+
alias_method :uploadTestSuiteAttachment, :upload_test_suite_attachment
|
193
|
+
|
194
|
+
# Uploads an attachment for a Test Case. The attachment must be Base64
|
195
|
+
# encoded by the client before sending it.
|
196
|
+
#
|
197
|
+
# @since TestLink API version 1.0
|
198
|
+
# @param [String] file_name
|
199
|
+
# @param [String] mime_type
|
200
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
201
|
+
# @param [Fixnum,String] test_case_id
|
202
|
+
# @param [Hash] options
|
203
|
+
# @option options [String] title
|
204
|
+
# @option options [String] description
|
205
|
+
# @return
|
206
|
+
def upload_test_case_attachment(file_name, mime_type, content, test_case_id,
|
207
|
+
options={})
|
208
|
+
args = { "devKey" => @dev_key, "testcaseid" => test_case_id,
|
209
|
+
"filename" => file_name, "filetype" => mime_type, "content" => content }
|
210
|
+
args.merge! options
|
211
|
+
make_call("tl.uploadTestCaseAttachment", args, "1.0")
|
212
|
+
end
|
213
|
+
alias_method :uploadTestCaseAttachment, :upload_test_case_attachment
|
214
|
+
|
215
|
+
# Uploads an attachment for specified table. You must specify the table that
|
216
|
+
# the attachment is connected (nodes_hierarchy, builds, etc) and the foreign
|
217
|
+
# key id in this table The attachment must be Base64 encoded by the client
|
218
|
+
# before sending it.
|
219
|
+
#
|
220
|
+
# @since TestLink API version 1.0
|
221
|
+
# @param [String] file_name
|
222
|
+
# @param [String] mime_type
|
223
|
+
# @param [String] content The Base64 encoded content of the attachment.
|
224
|
+
# @param [Fixnum,String] foreign_key_id
|
225
|
+
# @param [String] foreign_key_table
|
226
|
+
# @param [Hash] options
|
227
|
+
# @option options [String] title
|
228
|
+
# @option options [String] description
|
229
|
+
# @return
|
230
|
+
def upload_attachment(file_name, mime_type, content, foreign_key_id,
|
231
|
+
foreign_key_table, options={})
|
232
|
+
args = { "devKey" => @dev_key, "fkid" => foreign_key_id,
|
233
|
+
"fktable" => foreign_key_table, "filename" => file_name,
|
234
|
+
"filetype" => mime_type, "content" => content }
|
235
|
+
args.merge! options
|
236
|
+
make_call("tl.uploadAttachment", args, "1.0")
|
237
|
+
end
|
238
|
+
alias_method :uploadAttachment, :upload_attachment
|
239
|
+
|
240
|
+
# Basic connectivity test.
|
241
|
+
#
|
242
|
+
# @return [String] "Hello!"
|
243
|
+
def say_hello
|
244
|
+
make_call("tl.sayHello", "", "1.0b5")
|
245
|
+
end
|
246
|
+
alias_method :sayHello, :say_hello
|
247
|
+
alias_method :ping, :say_hello
|
248
|
+
|
249
|
+
# Sends a message to the server to have it repeated back.
|
250
|
+
#
|
251
|
+
# @param [String] message The message to get the server to repeat back.
|
252
|
+
# @return [String] The message sent to the server.
|
253
|
+
def repeat message
|
254
|
+
make_call("tl.repeat", { str: message }, "1.0b5")
|
255
|
+
end
|
256
|
+
|
257
|
+
# Returns info about the server's TestLink API.
|
258
|
+
#
|
259
|
+
# @return [String] Info about TestLink API version
|
260
|
+
def about
|
261
|
+
make_call("tl.about", "", "1.0b5")
|
262
|
+
end
|
263
|
+
|
264
|
+
# Gets a list of all projects.
|
265
|
+
#
|
266
|
+
# @return [Array<Hash>] List of all projects in TestLink and
|
267
|
+
# their associated info.
|
268
|
+
def projects
|
269
|
+
make_call("tl.getProjects", { devKey: @dev_key }, "1.0b5" )
|
270
|
+
end
|
271
|
+
alias_method :getProjects, :projects
|
272
|
+
|
273
|
+
# Gets a list of test plans within a project.
|
274
|
+
#
|
275
|
+
# @param [Fixnum,String] project_id ID of the project to retrieve plans.
|
276
|
+
# @return [Array<Hash>] Array of all plans in a project and their associated
|
277
|
+
# info.
|
278
|
+
# @raise [TestLinker::Error] If a project by the given ID doesn't exist.
|
279
|
+
def project_test_plans project_id
|
280
|
+
args = { devKey: @dev_key, testprojectid: project_id }
|
281
|
+
response = make_call("tl.getProjectTestPlans", args, "1.0b5")
|
282
|
+
response == "" ? [{}] : response
|
283
|
+
end
|
284
|
+
alias_method :getProjectTestPlans, :project_test_plans
|
285
|
+
|
286
|
+
# Info about a test project with a given name.
|
287
|
+
#
|
288
|
+
# @since TestLink API version 1.0
|
289
|
+
# @param [String] project_name Name of the project to search for.
|
290
|
+
# @return [Array<Hash>] Info on matching project.
|
291
|
+
def test_project_by_name project_name
|
292
|
+
args = { devKey: @dev_key, testprojectname: project_name }
|
293
|
+
make_call('tl.getTestProjectByName', args, "1.0")
|
294
|
+
end
|
295
|
+
alias_method :getTestProjectByName, :test_project_by_name
|
296
|
+
|
297
|
+
# Gets the test plan with the given name.
|
298
|
+
#
|
299
|
+
# @since TestLink API version 1.0
|
300
|
+
# @param [String] plan_name Name of the plan to search for.
|
301
|
+
# @param [String] project_name Name of the project the plan is in.
|
302
|
+
# @return [Array<Hash>] Info on matching plan.
|
303
|
+
def test_plan_by_name(plan_name, project_name)
|
304
|
+
args = { devKey: @dev_key, testplanname: plan_name,
|
305
|
+
testprojectname: project_name }
|
306
|
+
make_call('tl.getTestPlanByName', args, "1.0")
|
307
|
+
end
|
308
|
+
alias_method :getTestPlanByName, :test_plan_by_name
|
309
|
+
|
310
|
+
# List test suites within a test plan alphabetically.
|
311
|
+
#
|
312
|
+
# @param [Fixnum,String] plan_id ID of the plan to get suites for.
|
313
|
+
# @return [Array<Hash>] List of all suites in plan and their associated info.
|
314
|
+
def test_suites_for_test_plan plan_id
|
315
|
+
args = { devKey: @dev_key, testplanid: plan_id }
|
316
|
+
make_call("tl.getTestSuitesForTestPlan", args, "1.0b5")
|
317
|
+
end
|
318
|
+
alias_method :getTestSuitesForTestPlan, :test_suites_for_test_plan
|
319
|
+
|
320
|
+
# List test suites within a test plan alphabetically.
|
321
|
+
#
|
322
|
+
# @since API version 1.0
|
323
|
+
# @param [Fixnum,String] plan_id ID of the plan to get suites for.
|
324
|
+
# @return [Array<Hash>] List of all suites in plan and their associated info.
|
325
|
+
def test_plan_platforms plan_id
|
326
|
+
args = { devKey: @dev_key, testplanid: plan_id }
|
327
|
+
make_call("tl.getTestPlanPlatforms", args, "1.0")
|
328
|
+
end
|
329
|
+
alias_method :getTestPlanPlatforms, :test_plan_platforms
|
330
|
+
|
331
|
+
# Gets a list of test suites that are direct children of the given test suite.
|
332
|
+
#
|
333
|
+
# @since API version 1.0
|
334
|
+
# @param [Fixnum,String] suite_id ID of the suite to get suites for.
|
335
|
+
# @return [Array<Hash>] List of all suites in plan and their associated info.
|
336
|
+
def test_suites_for_test_suite suite_id
|
337
|
+
args = { devKey: @dev_key, testsuiteid: suite_id }
|
338
|
+
make_call("tl.getTestSuitesForTestSuite", args, "1.0")
|
339
|
+
end
|
340
|
+
alias_method :getTestSuitesForTestSuite, :test_suites_for_test_suite
|
341
|
+
|
342
|
+
# Gets the set of test suites from the top level of the test project tree.
|
343
|
+
#
|
344
|
+
# @param [Fixnum,String] project_id ID of the project to get suites for.
|
345
|
+
# @return [Array<Hash>] List of first level suites in project and their
|
346
|
+
# associated info.
|
347
|
+
def first_level_test_suites_for_test_project project_id
|
348
|
+
args = { devKey: @dev_key, testprojectid: project_id }
|
349
|
+
make_call("tl.getFirstLevelTestSuitesForTestProject", args, "1.0b5")
|
350
|
+
end
|
351
|
+
alias_method :getFirstLevelTestSuitesForTestProject,
|
352
|
+
:first_level_test_suites_for_test_project
|
353
|
+
|
354
|
+
# Info about test cases within a test plan.
|
355
|
+
#
|
356
|
+
# @param [Fixnum,String] plan_id ID of the plan to get test cases for.
|
357
|
+
# @param [Hash] options
|
358
|
+
# @option options [Fixnum,String] testcaseid
|
359
|
+
# @option options [Fixnum,String] buildid
|
360
|
+
# @option options [Fixnum,String] keywordid (mutually exclusive with keywords)
|
361
|
+
# @option options [Fixnum] keywords (mutually exclusive with keywordid)
|
362
|
+
# (TestLink API >=1.0)
|
363
|
+
# @option options [String] executed
|
364
|
+
# @option options [String] assignedto
|
365
|
+
# @option options [String] executestatus
|
366
|
+
# @option options [String] executiontype
|
367
|
+
# @option options [String] getstepinfo Defaults to false
|
368
|
+
# @return [Hash] List of all test cases in the plan and their
|
369
|
+
# associated info.
|
370
|
+
def test_cases_for_test_plan(plan_id, options={})
|
371
|
+
args = { devKey: @dev_key, testplanid: plan_id }
|
372
|
+
args.merge! options
|
373
|
+
make_call("tl.getTestCasesForTestPlan", args, "1.0b5")
|
374
|
+
end
|
375
|
+
alias_method :getTestCasesForTestPlan, :test_cases_for_test_plan
|
376
|
+
|
377
|
+
# @param [Fixnum,String] suite_id ID of the suite to retrieve test cases for.
|
378
|
+
# @param [Fixnum,String] project_id
|
379
|
+
# @param [Hash] options
|
380
|
+
# @option options [Boolean] deep
|
381
|
+
# @option options [String] details Default is "simple"; use "full" to get
|
382
|
+
# summary, steps & expected results.
|
383
|
+
# @return [Array<Hash>] List of test cases in the given suite and their
|
384
|
+
# associated info.
|
385
|
+
def test_cases_for_test_suite(suite_id, project_id, deep=true, details="")
|
386
|
+
args = { devKey: @dev_key, testsuiteid: suite_id,
|
387
|
+
projectid: project_id, deep: deep, details: details }
|
388
|
+
make_call("tl.getTestCasesForTestSuite", args, "1.0b5")
|
389
|
+
end
|
390
|
+
alias_method :getTestCasesForTestSuite, :test_cases_for_test_suite
|
391
|
+
|
392
|
+
# Gets the summarized results grouped by platform.
|
393
|
+
#
|
394
|
+
# @since TestLink API version 1.0
|
395
|
+
# @param [Fixnum,String] plan_id
|
396
|
+
# @return [Hash] Contains "type" => platform, "total_tc" => X, "details =>
|
397
|
+
# Array of counts.
|
398
|
+
def totals_for_test_plan plan_id
|
399
|
+
args = { devKey: @dev_key, testplanid: plan_id }
|
400
|
+
make_call("tl.getTotalsForTestPlan", args, "1.0")
|
401
|
+
end
|
402
|
+
alias_method :getTotalsForTestPlan, :totals_for_test_plan
|
403
|
+
|
404
|
+
# Gets attachments for specified test case.
|
405
|
+
#
|
406
|
+
# @param [Hash] options
|
407
|
+
# @param [Fixnum,String] testcaseid If not present, testcaseexternalid must be called.
|
408
|
+
# @param [Fixnum,String] testcaseexternalid If not present, testcaseid must be called.
|
409
|
+
# @return [String]
|
410
|
+
def test_case_attachments options
|
411
|
+
args = { devKey: @dev_key }
|
412
|
+
args.merge! options
|
413
|
+
make_call("tl.getTestCaseAttachments", args, "1.0b5")
|
414
|
+
end
|
415
|
+
alias_method :getTestCaseAttachments, :test_case_attachments
|
416
|
+
|
417
|
+
# @param [Fixnum,String] test_case_external_id
|
418
|
+
# @param [Fixnum,String] project_id
|
419
|
+
# @param [Fixnum] custom_field_name
|
420
|
+
# @param [Hash] options
|
421
|
+
# @option options [String] details Changes output information. If null or 'value',
|
422
|
+
# returns just a value; if 'full', returns a hash with all custom field definition,
|
423
|
+
# plus value and internal test case id; if 'simple', returns value plus custom
|
424
|
+
# field name, label, and type (as code).
|
425
|
+
# @return [Array<Hash>]
|
426
|
+
def test_case_custom_field_design_value(custom_field_name,
|
427
|
+
test_case_external_id, project_id, options={})
|
428
|
+
args = { devKey: @dev_key, testprojectid: project_id,
|
429
|
+
testcaseexternalid: test_case_external_id,
|
430
|
+
customfieldname: custom_field_name }
|
431
|
+
args.merge! options
|
432
|
+
make_call("tl.getTestCaseCustomFieldDesignValue", args, "1.0b5")
|
433
|
+
end
|
434
|
+
alias_method :getTestCaseCustomFieldDesignValue, :test_case_custom_field_design_value
|
435
|
+
|
436
|
+
# Info about test case by name.
|
437
|
+
# CAUTION: returns multiple values if test case is used more than once.
|
438
|
+
#
|
439
|
+
# @param [String] test_case_name Name to search across TL DB.
|
440
|
+
# @param [Hash] options
|
441
|
+
# @option options [String] testprojectname
|
442
|
+
# @option options [String] testsuitename
|
443
|
+
# @option options [String] testcasepathname
|
444
|
+
# @raise [TestLinker::Error] When test case name doesn't exist.
|
445
|
+
# @return [Array<Hash>] List of all test cases in the DB matching
|
446
|
+
# test_case_name and their associated info.
|
447
|
+
def test_case_id_by_name(test_case_name, options={})
|
448
|
+
args = { devKey: @dev_key, testcasename: test_case_name }
|
449
|
+
args.merge! options
|
450
|
+
make_call("tl.getTestCaseIDByName", args, "1.0b5")
|
451
|
+
end
|
452
|
+
alias_method :getTestCaseIDByName, :test_case_id_by_name
|
453
|
+
|
454
|
+
# @param [Fixnum,String] test_case_id
|
455
|
+
# @param [Fixnum,String] build_id
|
456
|
+
# @param [Fixnum,String] plan_id
|
457
|
+
# @return [Array<Hash>] Single element Array containing the result Hash.
|
458
|
+
def last_execution_result(test_case_id, build_id, plan_id)
|
459
|
+
args = { devKey: @dev_key, testplanid: plan_id,
|
460
|
+
testcaseid: test_case_id, buildid: build_id }
|
461
|
+
make_call("tl.getLastExecutionResult", args, "1.0b5")
|
462
|
+
end
|
463
|
+
alias_method :getLastExecutionResult, :last_execution_result
|
464
|
+
|
465
|
+
# Gets a list of builds within a test plan.
|
466
|
+
#
|
467
|
+
# @param [Fixnum,String] plan_id ID of the plan to get builds for.
|
468
|
+
# @return [Array<Hash>] List of all builds for the plan and their associated
|
469
|
+
# info.
|
470
|
+
def builds_for_test_plan plan_id
|
471
|
+
args = { devKey: @dev_key, testplanid: plan_id }
|
472
|
+
make_call("tl.getBuildsForTestPlan", args, "1.0b5")
|
473
|
+
end
|
474
|
+
alias_method :getBuildsForTestPlan, :builds_for_test_plan
|
475
|
+
|
476
|
+
# @param [Fixnum,String] plan_id ID of the plan to get build for.
|
477
|
+
# @return [Hash] Info for the latest build for the given test plan.
|
478
|
+
def latest_build_for_test_plan plan_id
|
479
|
+
args = { devKey: @dev_key, testplanid: plan_id }
|
480
|
+
make_call("tl.getLatestBuildForTestPlan", args, "1.0b5")
|
481
|
+
end
|
482
|
+
alias_method :getLatestBuildForTestPlan, :latest_build_for_test_plan
|
483
|
+
|
484
|
+
# @param [String] project_name
|
485
|
+
# @param [String] test_case_prefix
|
486
|
+
# @param [Hash] options
|
487
|
+
# @option options [String] notes
|
488
|
+
# @option options [Hash] options ALL int treated as boolean:
|
489
|
+
# requirementsEnabled, testPriorityEnabled, automationEnabled,
|
490
|
+
# inventoryEnabled
|
491
|
+
# @option options [Fixnum] active
|
492
|
+
# @option options [Fixnum] public
|
493
|
+
# @return
|
494
|
+
def create_test_project(project_name, test_case_prefix, options={})
|
495
|
+
args = { devKey: @dev_key, testprojectname: project_name,
|
496
|
+
testcaseprefix: test_case_prefix }
|
497
|
+
args.merge! options
|
498
|
+
make_call("tl.createTestProject", args, "1.0b5")
|
499
|
+
end
|
500
|
+
alias_method :createTestProject, :create_test_project
|
501
|
+
|
502
|
+
# @since TestLink API version 1.0
|
503
|
+
# @param [String] plan_name
|
504
|
+
# @param [String] project_name
|
505
|
+
# @param [Hash] options
|
506
|
+
# @option options [String] notes
|
507
|
+
# @option options [String] active Defaults to 1.
|
508
|
+
# @option options [String] public Defaults to 1.
|
509
|
+
# @return
|
510
|
+
def create_test_plan(plan_name, project_name, options={})
|
511
|
+
args = { devKey: @dev_key, testplanname: plan_name,
|
512
|
+
testprojectname: project_name }
|
513
|
+
args.merge! options
|
514
|
+
make_call('tl.createTestPlan', args, "1.0")
|
515
|
+
end
|
516
|
+
alias_method :createTestPlan, :create_test_plan
|
517
|
+
|
518
|
+
# @param [String] suite_name
|
519
|
+
# @param [String] details
|
520
|
+
# @param [Fixnum,String] project_id
|
521
|
+
# @param [Hash] options
|
522
|
+
# @option options [Fixnum,String] parentid Defaults to top level.
|
523
|
+
# @option options [Fixnum] order Order inside parent container.
|
524
|
+
# @option options [Boolean] checkduplicatedname Check if there siblings with
|
525
|
+
# the same name. Defaults to true.
|
526
|
+
# @option options [Boolean] actiononduplicatedname Applicable only if
|
527
|
+
# checkduplicatedname = true.
|
528
|
+
# @return [Array<Hash>] Info about results of test suite creation.
|
529
|
+
def create_test_suite(suite_name, details, project_id, options={})
|
530
|
+
args = { devKey: @dev_key, testprojectid: project_id,
|
531
|
+
testsuitename: suite_name, details: details }
|
532
|
+
args.merge! options
|
533
|
+
make_call('tl.createTestSuite', args, "1.0b5")
|
534
|
+
end
|
535
|
+
alias_method :createTestSuite, :create_test_suite
|
536
|
+
|
537
|
+
# Creates a new build for a specific test plan.
|
538
|
+
#
|
539
|
+
# @param [String] build_name
|
540
|
+
# @param [String] build_notes
|
541
|
+
# @param [Fixnum,String] plan_id
|
542
|
+
# @return
|
543
|
+
def create_build(build_name, build_notes, plan_id)
|
544
|
+
args = { devKey: @dev_key, testplanid: plan_id,
|
545
|
+
buildname: build_name, buildnotes: build_notes }
|
546
|
+
make_call("tl.createBuild", args, "1.0b5")
|
547
|
+
end
|
548
|
+
alias_method :createBuild, :create_build
|
549
|
+
|
550
|
+
# @param [String] test_case_name
|
551
|
+
# @param [String] test_case_summary
|
552
|
+
# @param [String] test_case_steps
|
553
|
+
# @param [String] test_case_expected_results
|
554
|
+
# @param [Fixnum,String] suite_id
|
555
|
+
# @param [Fixnum,String] project_id
|
556
|
+
# @param [String] login
|
557
|
+
# @param [Hash] options
|
558
|
+
# @option options [String] preconditions
|
559
|
+
# @option options [String] execution
|
560
|
+
# @option options [Fixnum] order
|
561
|
+
# @option options [Fixnum,String] internalid
|
562
|
+
# @option options [Boolean] checkduplicatedname
|
563
|
+
# @option options [String] actiononduplicatedname
|
564
|
+
# @option options [String] executiontype
|
565
|
+
# @return
|
566
|
+
def create_test_case(test_case_name, test_case_summary, test_case_steps,
|
567
|
+
test_case_expected_results, suite_id, project_id, login, options={})
|
568
|
+
args = { devKey: @dev_key,
|
569
|
+
testcasename: test_case_name,
|
570
|
+
testsuiteid: suite_id,
|
571
|
+
testprojectid: project_id,
|
572
|
+
authorlogin: login,
|
573
|
+
summary: test_case_summary,
|
574
|
+
steps: test_case_steps,
|
575
|
+
expectedresults: test_case_expected_results }
|
576
|
+
args.merge! options
|
577
|
+
make_call("tl.createTestCase", args, "1.0b5")
|
578
|
+
end
|
579
|
+
alias_method :createTestCase, :create_test_case
|
580
|
+
|
581
|
+
# Adds a test case version to a test plan.
|
582
|
+
#
|
583
|
+
# @param [Fixnum,String] test_case_external_id
|
584
|
+
# @param [Fixnum,String] test_case_version
|
585
|
+
# @param [Fixnum,String] plan_id
|
586
|
+
# @param [Fixnum,String] project_id
|
587
|
+
# @param [Hash] options Optional parameters for the method.
|
588
|
+
# @option options [String] urgency
|
589
|
+
# @option options [Fixnum] executionorder
|
590
|
+
# @option options [Fixnum] platformid Only if test plan has no platforms.
|
591
|
+
# (TestLink API >=1.0)
|
592
|
+
# @return
|
593
|
+
def add_test_case_to_test_plan(test_case_external_id, test_case_version,
|
594
|
+
plan_id, project_id, options={})
|
595
|
+
args = { devKey: @dev_key, testprojectid: project_id,
|
596
|
+
testplanid: plan_id, testcaseexternalid: test_case_external_id,
|
597
|
+
version: test_case_version }
|
598
|
+
args.merge! options
|
599
|
+
make_call("tl.addTestCaseToTestPlan", args, "1.0b5")
|
600
|
+
end
|
601
|
+
alias_method :addTestCaseToTestPlan, :add_test_case_to_test_plan
|
602
|
+
|
603
|
+
# Sets result in TestLink by test case ID and test plan ID.
|
604
|
+
# NOTE: will guess at last build, needs to be set to guarantee accuracy.
|
605
|
+
# NOTE: Renamed to setTestCaseExecutionResult in version 1.0.
|
606
|
+
#
|
607
|
+
# @see #test_case_execution_result=
|
608
|
+
# @version TestLink API version 1.0 Beta 5
|
609
|
+
# @param [Fixnum,String] test_case_id ID of the test case to post results to.
|
610
|
+
# @param [String] status 'p', 'f', 's', or 'b' for Pass/Fail/Skip/Block
|
611
|
+
# @param [Fixnum,String] plan_id ID of the test plan to post results to.
|
612
|
+
# @param [Hash] options
|
613
|
+
# @option options [Fixnum,String] buildid ID of the build to post results to.
|
614
|
+
# @option options [Fixnum,String] buildname Name of the build to post results to.
|
615
|
+
# @option options [Fixnum,String] bugid ID of the bug to link results to.
|
616
|
+
# @option options [Boolean] guess Defines whether to guess optional params
|
617
|
+
# or require them explicitly. Defaults to true.
|
618
|
+
# @option options [Fixnum,String] platformid ID of the platform to associate with the
|
619
|
+
# result. (TestLink API >=1.0)
|
620
|
+
# @option options [String] customfields i.e. "NAME: Steve Loveless\n"
|
621
|
+
# (TestLink API >=1.0)
|
622
|
+
# @option options [String] notes ?
|
623
|
+
# @return [Hash] "status" of posting, "id" of the execution, "message"
|
624
|
+
# giving success or failure info.
|
625
|
+
# @raise [TestLinker::Error] If result fails to be posted for any reason.
|
626
|
+
def report_test_case_result(test_case_id, status, plan_id, options={})
|
627
|
+
if @version >= "1.0"
|
628
|
+
message = "Method not supported in version #{@version}. "
|
629
|
+
message << "Use #test_case_execution_result="
|
630
|
+
raise TestLinker::Error, message
|
631
|
+
end
|
632
|
+
|
633
|
+
args = { devKey: @dev_key, testcaseid: test_case_id,
|
634
|
+
testplanid: plan_id, status: status, guess: true }
|
635
|
+
args.merge! options
|
636
|
+
result = @server.call("tl.reportTCResult", args).first
|
637
|
+
|
638
|
+
unless result['message'] == 'Success!'
|
639
|
+
raise TestLinker::Error, "#{result['code']}: #{result['message']}"
|
640
|
+
end
|
641
|
+
|
642
|
+
result
|
643
|
+
end
|
644
|
+
alias_method :reportTCResult, :report_test_case_result
|
645
|
+
|
646
|
+
# Sets result in TestLink by test case ID and test plan ID.
|
647
|
+
# NOTE: will guess at last build, needs to be set to guarantee accuracy.
|
648
|
+
#
|
649
|
+
# @see #report_test_case_result
|
650
|
+
# @since TestLink API version 1.0
|
651
|
+
# @param [String] test_case_id ID of the test case to post results to.
|
652
|
+
# @param [String] status 'p', 'f', 's', or 'b' for Pass/Fail/Skip/Block
|
653
|
+
# @param [String] plan_id ID of the test plan to post results to.
|
654
|
+
# @param [Hash] options
|
655
|
+
# @option options [Fixnum] buildid ID of the build to post results to.
|
656
|
+
# @option options [String] buildname Name of the build to post results to.
|
657
|
+
# @option options [Fixnum] bugid ID of the bug to link results to.
|
658
|
+
# @option options [Boolean] guess Defines whether to guess optinal params or require them.
|
659
|
+
# @option options [String] notes ?
|
660
|
+
# @option options [String] platformid (version 1.0)
|
661
|
+
# @option options [String] platformid (version 1.0)
|
662
|
+
# @option options [String] customfields (version 1.0)
|
663
|
+
# @option options [String] overwrite (version 1.0)
|
664
|
+
# @return [Hash] "status" of posting, "id" of the execution, "message"
|
665
|
+
# giving success or failure info.
|
666
|
+
# @raise [TestLinker::Error] If result fails to be posted for any reason.
|
667
|
+
def test_case_execution_result=(test_case_id, status, plan_id, options={})
|
668
|
+
if @version < "1.0"
|
669
|
+
message = "Method not supported in version #{@version}. "
|
670
|
+
message << "Use #report_test_case_result"
|
671
|
+
raise TestLinker::Error, message
|
672
|
+
end
|
673
|
+
|
674
|
+
args = { devKey: @dev_key, testcaseid: test_case_id,
|
675
|
+
testplanid: plan_id, status: status, guess: true }
|
676
|
+
args.merge! options
|
677
|
+
result = @server.call("tl.setTestCaseExecutionResult", args).first
|
678
|
+
|
679
|
+
unless result['message'] == 'Success!'
|
680
|
+
raise TestLinker::Error, "#{result['code']}: #{result['message']}"
|
681
|
+
end
|
682
|
+
|
683
|
+
result
|
684
|
+
end
|
685
|
+
alias_method :setTestCaseExecutionResult, :test_case_execution_result=
|
686
|
+
end
|
687
|
+
end
|