testlink-api-client 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/LICENSE +15 -0
  2. data/README.rdoc +14 -0
  3. data/features/create_test_suite.feature +90 -0
  4. data/features/get_first_level_test_suites_for_test_project.feature +25 -0
  5. data/features/get_projects.feature +47 -0
  6. data/features/get_test_suite_by_id.feature +24 -0
  7. data/features/get_test_suites_for_test_suite.feature +33 -0
  8. data/features/step_definitions/common.rb +69 -0
  9. data/features/step_definitions/create_test_suite.rb +14 -0
  10. data/features/step_definitions/get_first_level_test_suites_for_test_project.rb +14 -0
  11. data/features/step_definitions/get_projects.rb +56 -0
  12. data/features/support/db/one_project.sql +1311 -0
  13. data/features/support/db/some_testsuites.sql +1312 -0
  14. data/features/support/env.rb +32 -0
  15. data/features/support/test_link_test_module.rb +32 -0
  16. data/lib/test_link.rb +22 -0
  17. data/lib/test_link/adapters.rb +24 -0
  18. data/lib/test_link/adapters/base.rb +35 -0
  19. data/lib/test_link/adapters/node_adapter.rb +47 -0
  20. data/lib/test_link/adapters/project_adapter.rb +32 -0
  21. data/lib/test_link/adapters/status_adapter.rb +33 -0
  22. data/lib/test_link/api_link.rb +62 -0
  23. data/lib/test_link/command.rb +29 -0
  24. data/lib/test_link/command/argument.rb +31 -0
  25. data/lib/test_link/command/base.rb +63 -0
  26. data/lib/test_link/command/create_test_case.rb +40 -0
  27. data/lib/test_link/command/create_test_suite.rb +35 -0
  28. data/lib/test_link/command/definition.rb +45 -0
  29. data/lib/test_link/command/get_first_level_test_suites_for_test_project.rb +29 -0
  30. data/lib/test_link/command/get_projects.rb +26 -0
  31. data/lib/test_link/command/get_test_suite_by_id.rb +29 -0
  32. data/lib/test_link/command/get_test_suites_for_test_suite.rb +29 -0
  33. data/lib/test_link/exceptions.rb +23 -0
  34. data/lib/test_link/exceptions/command_failed_exception.rb +26 -0
  35. data/lib/test_link/exceptions/empty_response_exception.rb +26 -0
  36. data/lib/test_link/exceptions/error_response_exception.rb +28 -0
  37. data/lib/test_link/exceptions/exception.rb +21 -0
  38. data/lib/test_link/objects.rb +24 -0
  39. data/lib/test_link/objects/methods.rb +29 -0
  40. data/lib/test_link/objects/node.rb +25 -0
  41. data/lib/test_link/objects/project.rb +25 -0
  42. data/lib/test_link/objects/status.rb +25 -0
  43. data/lib/testlink-api-client.rb +16 -0
  44. data/spec/spec_helper.rb +39 -0
  45. data/spec/test_link/adapters/base_spec.rb +56 -0
  46. data/spec/test_link/adapters/node_adapter_spec.rb +102 -0
  47. data/spec/test_link/adapters/project_adapter_spec.rb +81 -0
  48. data/spec/test_link/adapters/status_adapter_spec.rb +51 -0
  49. data/spec/test_link/api_link_spec.rb +106 -0
  50. data/spec/test_link/command/argument_spec.rb +43 -0
  51. data/spec/test_link/command/base_spec.rb +94 -0
  52. data/spec/test_link/command/create_test_case_spec.rb +88 -0
  53. data/spec/test_link/command/create_test_suite_spec.rb +67 -0
  54. data/spec/test_link/command/get_first_level_test_suites_for_test_project_spec.rb +43 -0
  55. data/spec/test_link/command/get_projets_spec.rb +33 -0
  56. data/spec/test_link/command/get_test_suite_by_id_spec.rb +43 -0
  57. data/spec/test_link/command/get_test_suites_for_test_suite_spec.rb +43 -0
  58. data/spec/test_link/exceptions/command_failed_exception_spec.rb +28 -0
  59. data/spec/test_link/exceptions/empty_response_exception_spec.rb +28 -0
  60. data/spec/test_link/exceptions/error_response_exception_spec.rb +30 -0
  61. data/spec/test_link/objects/node_spec.rb +49 -0
  62. data/spec/test_link/objects/project_spec.rb +39 -0
  63. data/spec/test_link/objects/status_spec.rb +43 -0
  64. metadata +194 -0
@@ -0,0 +1,32 @@
1
+ # This file is part of testlink-api-client.
2
+ #
3
+ # testlink-api-client is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # testlink-api-client is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with Foobar. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ $:.unshift File.dirname(__FILE__)+'/../../lib'
17
+
18
+ require 'testlink-api-client'
19
+ require 'cucumber/rspec/doubles'
20
+ require File.join(File.dirname(__FILE__), 'test_link_test_module.rb')
21
+
22
+ class TestLinkWorld
23
+ include TestLinkTestModule
24
+ end
25
+
26
+ World do
27
+ TestLinkWorld.new
28
+ end
29
+
30
+ Before do
31
+ @parameters = {}
32
+ end
@@ -0,0 +1,32 @@
1
+ # This file is part of testlink-api-client.
2
+ #
3
+ # testlink-api-client is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # testlink-api-client is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with Foobar. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ module TestLinkTestModule
17
+ def reset_db sql_file
18
+ fail('MYSQL_USER environment variable should be set') if ENV['MYSQL_USER'].nil?
19
+ fail('MYSQL_DB environment variable should be set') if ENV['MYSQL_DB'].nil?
20
+ mysql_passwd = ENV['MYSQL_PASSWD']
21
+ `mysql -u #{ENV['MYSQL_USER']} #{("-p " + mysql_passwd) unless mysql_passwd.nil?} #{ENV['MYSQL_DB']} < #{File.dirname(__FILE__)}/db/#{sql_file}`
22
+ end
23
+
24
+ def string2boolean str
25
+ case str
26
+ when 'true', '1', 'yes', 'ok'
27
+ true
28
+ else
29
+ false
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,22 @@
1
+ # This file is part of testlink-api-client.
2
+ #
3
+ # testlink-api-client is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # testlink-api-client is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with Foobar. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ require 'test_link/api_link'
17
+ require 'test_link/command'
18
+ require 'test_link/adapters'
19
+ require 'test_link/exceptions'
20
+
21
+ module TestLink
22
+ end
@@ -0,0 +1,24 @@
1
+ # This file is part of testlink-api-client.
2
+ #
3
+ # testlink-api-client is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # testlink-api-client is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with Foobar. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ require 'test_link/adapters/base'
17
+ require 'test_link/adapters/project_adapter'
18
+ require 'test_link/adapters/status_adapter'
19
+ require 'test_link/adapters/node_adapter'
20
+
21
+ module TestLink
22
+ module Adapters
23
+ end
24
+ end
@@ -0,0 +1,35 @@
1
+ # This file is part of testlink-api-client.
2
+ #
3
+ # testlink-api-client is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # testlink-api-client is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with Foobar. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ require 'test_link/exceptions/empty_response_exception'
17
+ require 'test_link/exceptions/command_failed_exception'
18
+ require 'test_link/exceptions/error_response_exception'
19
+
20
+ module TestLink
21
+ module Adapters
22
+ class Base
23
+ attr_accessor :response
24
+
25
+ def adapt
26
+ raise TestLink::Exceptions::EmptyResponseException.new if response.nil? || response.empty?
27
+ raise TestLink::Exceptions::CommandFailedException.new response['msg'] if (response.instance_of? Hash) && (response['status_ok'] == 0)
28
+ response.map do |row|
29
+ raise TestLink::Exceptions::ErrorResponseException.new row['message'], row['code'] if row.keys.include? 'code'
30
+ adapt_row row
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,47 @@
1
+ # This file is part of testlink-api-client.
2
+ #
3
+ # testlink-api-client is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # testlink-api-client is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with Foobar. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ require 'test_link/adapters/base'
17
+ require 'test_link/objects/node'
18
+
19
+ module TestLink
20
+ module Adapters
21
+ class NodeAdapter < Base
22
+
23
+ def response= response
24
+ if response.instance_of? Hash
25
+ if response.has_key?('node_type_id')
26
+ response = [ response ]
27
+ elsif response.count > 1 && response.keys.reject { |key| key =~ /\A\d+?\z/ }.count == 0
28
+ response = response.values
29
+ end
30
+ end
31
+ super response
32
+ end
33
+
34
+ def adapt_row row
35
+ node = TestLink::Objects::Node.new
36
+ node.id = row['id'].to_i
37
+ node.parent_id = row['parent_id'].to_i
38
+ node.type_id = row['node_type_id'].to_i
39
+ node.table = row['node_table'] if row.has_key? 'node_table'
40
+ node.order = row['node_order'].to_i
41
+ node.name = row['name']
42
+ node.details = row['details'] if row.has_key? 'details'
43
+ node
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,32 @@
1
+ # This file is part of testlink-api-client.
2
+ #
3
+ # testlink-api-client is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # testlink-api-client is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with Foobar. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ require 'test_link/adapters/base'
17
+ require 'test_link/objects/project'
18
+
19
+ module TestLink
20
+ module Adapters
21
+ class ProjectAdapter < Base
22
+ def adapt_row row
23
+ project = Objects::Project.new
24
+ project.id = row['id'].to_i
25
+ project.name = row['name']
26
+ project.prefix = row['prefix']
27
+ project.notes = row['notes']
28
+ project
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ # This file is part of testlink-api-client.
2
+ #
3
+ # testlink-api-client is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # testlink-api-client is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with Foobar. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ require 'test_link/adapters/base'
17
+ require 'test_link/objects/status'
18
+
19
+ module TestLink
20
+ module Adapters
21
+ class StatusAdapter < Base
22
+ def adapt_row row
23
+ status = Objects::Status.new
24
+ status.id = row['id'].to_i
25
+ status.message = row['message']
26
+ status.status = row['status']
27
+ status.additional_info = row['additionalInfo']
28
+ status.operation = row['operation']
29
+ status
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,62 @@
1
+ # This file is part of testlink-api-client.
2
+ #
3
+ # testlink-api-client is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # testlink-api-client is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with Foobar. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ require 'xmlrpc/client'
17
+
18
+ module TestLink
19
+ class ApiLink
20
+ attr_accessor :key
21
+ attr_reader :client, :url
22
+ @@remote_methods = {}
23
+ @@adapters = {}
24
+ def initialize(url, key)
25
+ @url = url
26
+ @key = key
27
+ @client = XMLRPC::Client.new2 self.api_url
28
+ end
29
+
30
+ def api_url()
31
+ @url + '/lib/api/xmlrpc.php'
32
+ end
33
+
34
+ def self.remote_method(klass)
35
+ method_name = klass.command_name.to_sym
36
+ @@remote_methods[method_name] = klass.new
37
+ end
38
+
39
+ def respond_to_missing?(symbol, include_private)
40
+ return true if @@remote_methods.include? symbol
41
+ super symbol, include_private
42
+ end
43
+
44
+ def method_missing(symbol, *args)
45
+ command = @@remote_methods[symbol]
46
+ adapter = @@adapters[symbol]
47
+ return super(symbol, args) if command.nil?
48
+ command_args = args.first || {}
49
+ command.reset_arguments_hash command_args
50
+ adapter.response = command.execute self
51
+ adapter.adapt
52
+ end
53
+
54
+ def self.set_adapter_for command_name, klass
55
+ @@adapters[command_name.to_sym] = klass.new
56
+ end
57
+
58
+ def self.adapter_for(command_name)
59
+ @@adapters[command_name.to_sym]
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,29 @@
1
+ # This file is part of testlink-api-client.
2
+ #
3
+ # testlink-api-client is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # testlink-api-client is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with Foobar. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ require 'test_link/command/argument'
17
+ require 'test_link/command/base'
18
+ require 'test_link/command/definition'
19
+ require 'test_link/command/get_projects'
20
+ require 'test_link/command/create_test_suite'
21
+ require 'test_link/command/get_first_level_test_suites_for_test_project'
22
+ require 'test_link/command/get_test_suites_for_test_suite'
23
+ require 'test_link/command/get_test_suite_by_id'
24
+ require 'test_link/command/create_test_case'
25
+
26
+ module TestLink
27
+ module Command
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ # This file is part of testlink-api-client.
2
+ #
3
+ # testlink-api-client is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # testlink-api-client is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with Foobar. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ module TestLink
17
+ module Command
18
+ class Argument
19
+ attr_reader :default
20
+
21
+ def initialize(default = nil, mandatory = false)
22
+ @default = default
23
+ @mandatory = mandatory
24
+ end
25
+
26
+ def mandatory?
27
+ @mandatory
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,63 @@
1
+ # This file is part of testlink-api-client.
2
+ #
3
+ # testlink-api-client is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # testlink-api-client is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with Foobar. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ require 'test_link/command/definition'
17
+ require 'test_link/api_link'
18
+
19
+ module TestLink
20
+ module Command
21
+ class Base < Definition
22
+ argument :devKey, :mandatory => true
23
+
24
+ def execute link
25
+ self.devKey ||= link.key
26
+ errors = check_arguments
27
+ raise ArgumentError.new "Missing mandatory argument(s) #{errors}" unless errors.empty?
28
+ link.client.call 'tl.' + self.class.command_name, arguments_hash.reject { |key, value| value.nil? }
29
+ end
30
+
31
+ def arguments_hash
32
+ args = {}
33
+ (Base.arguments.keys + self.class.arguments.keys).each do |name|
34
+ args[name] = self.send(name)
35
+ end
36
+ args
37
+ end
38
+
39
+ def reset_arguments_hash hash
40
+ arguments_hash.keys.each do |name|
41
+ assignment = (name.to_s + '=').to_sym
42
+ send(assignment, hash[name])
43
+ end
44
+ end
45
+
46
+ def check_arguments
47
+ errors = []
48
+ self.class.arguments.select{ |name, argument| argument.mandatory? }.keys.each do |name|
49
+ errors.push name if arguments_hash[name].nil?
50
+ end
51
+ errors
52
+ end
53
+
54
+ def self.remote_method
55
+ TestLink::ApiLink.remote_method self
56
+ end
57
+
58
+ def self.adapt_with klass
59
+ TestLink::ApiLink.set_adapter_for self.command_name, klass
60
+ end
61
+ end
62
+ end
63
+ end