onlyoffice_testrail_wrapper 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/lib/onlyoffice_testrail_wrapper/helpers/rspec_helper.rb +2 -0
  3. data/lib/onlyoffice_testrail_wrapper/helpers/ruby_helper.rb +2 -0
  4. data/lib/onlyoffice_testrail_wrapper/helpers/string_helper.rb +4 -0
  5. data/lib/onlyoffice_testrail_wrapper/mock/rspec_example_mock.rb +8 -3
  6. data/lib/onlyoffice_testrail_wrapper/testrail/requests_helper.rb +52 -0
  7. data/lib/onlyoffice_testrail_wrapper/testrail.rb +29 -70
  8. data/lib/onlyoffice_testrail_wrapper/testrail_api_object.rb +26 -0
  9. data/lib/onlyoffice_testrail_wrapper/testrail_case.rb +12 -6
  10. data/lib/onlyoffice_testrail_wrapper/testrail_helper/example_failed_got_expected_exception.rb +26 -0
  11. data/lib/onlyoffice_testrail_wrapper/testrail_helper/example_lpv_exception.rb +20 -0
  12. data/lib/onlyoffice_testrail_wrapper/testrail_helper/example_service_unavailable_exception.rb +20 -0
  13. data/lib/onlyoffice_testrail_wrapper/testrail_helper.rb +28 -51
  14. data/lib/onlyoffice_testrail_wrapper/testrail_milestone.rb +22 -4
  15. data/lib/onlyoffice_testrail_wrapper/testrail_plan.rb +10 -4
  16. data/lib/onlyoffice_testrail_wrapper/testrail_plan_entry.rb +3 -1
  17. data/lib/onlyoffice_testrail_wrapper/testrail_project/testrail_project_milestone_methods.rb +23 -4
  18. data/lib/onlyoffice_testrail_wrapper/testrail_project/testrail_project_plan_helper.rb +14 -11
  19. data/lib/onlyoffice_testrail_wrapper/testrail_project/testrail_project_runs_methods.rb +9 -6
  20. data/lib/onlyoffice_testrail_wrapper/testrail_project/testrail_project_suite_methods.rb +9 -7
  21. data/lib/onlyoffice_testrail_wrapper/testrail_project.rb +7 -6
  22. data/lib/onlyoffice_testrail_wrapper/testrail_result.rb +2 -1
  23. data/lib/onlyoffice_testrail_wrapper/testrail_run.rb +12 -7
  24. data/lib/onlyoffice_testrail_wrapper/testrail_section.rb +14 -8
  25. data/lib/onlyoffice_testrail_wrapper/testrail_suite.rb +19 -11
  26. data/lib/onlyoffice_testrail_wrapper/testrail_test.rb +19 -7
  27. data/lib/onlyoffice_testrail_wrapper/testrail_tools/testrail_tools.rb +4 -2
  28. data/lib/onlyoffice_testrail_wrapper/version.rb +1 -1
  29. data/lib/onlyoffice_testrail_wrapper.rb +1 -1
  30. metadata +17 -131
  31. data/lib/onlyoffice_testrail_wrapper/helpers/hash_helper.rb +0 -21
  32. data/lib/onlyoffice_testrail_wrapper/testrail_helper/testrail_status_helper.rb +0 -18
@@ -3,7 +3,8 @@
3
3
  require_relative 'testrail_plan_entry'
4
4
 
5
5
  module OnlyofficeTestrailWrapper
6
- class TestrailPlan
6
+ # Class for working with testrail plan
7
+ class TestrailPlan < TestrailApiObject
7
8
  # @return [Integer] Id of test plan
8
9
  attr_accessor :id
9
10
  # @return [String] test run name
@@ -26,6 +27,7 @@ module OnlyofficeTestrailWrapper
26
27
  attr_reader :error
27
28
 
28
29
  def initialize(name = '', entries = [], description = '', milestone_id = nil, id = nil)
30
+ super()
29
31
  @name = name
30
32
  @entries = entries
31
33
  @description = description
@@ -34,10 +36,14 @@ module OnlyofficeTestrailWrapper
34
36
  end
35
37
 
36
38
  def add_entry(name, suite_id, include_all = true, case_ids = [], assigned_to = nil)
37
- entry = HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/add_plan_entry/#{@id}", suite_id: suite_id, name: StringHelper.warnstrip!(name.to_s),
38
- include_all: include_all, case_ids: case_ids, assigned_to: assigned_to), TestrailPlanEntry)
39
+ entry = TestrailPlanEntry.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/add_plan_entry/#{@id}",
40
+ suite_id: suite_id,
41
+ name: StringHelper.warnstrip!(name.to_s),
42
+ include_all: include_all,
43
+ case_ids: case_ids,
44
+ assigned_to: assigned_to))
39
45
  OnlyofficeLoggerHelper.log "Added plan entry: #{name.to_s.strip}"
40
- entry.runs.each_with_index { |run, index| entry.runs[index] = HashHelper.parse_to_class_variable(run, TestrailRun) }
46
+ entry.runs.each_with_index { |run, index| entry.runs[index] = TestrailRun.new.init_from_hash(run) }
41
47
  entry
42
48
  end
43
49
 
@@ -1,10 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OnlyofficeTestrailWrapper
4
- class TestrailPlanEntry
4
+ # Class for working with testrail plan entry
5
+ class TestrailPlanEntry < TestrailApiObject
5
6
  attr_accessor :suite_id, :name, :assigned_to, :include_all, :case_ids, :runs
6
7
 
7
8
  def initialize(params = {})
9
+ super()
8
10
  @suite_id = params.fetch(:suite_id, nil)
9
11
  @name = params.fetch(:name, '')
10
12
  @include_all = params.fetch(:include_all, true)
@@ -3,9 +3,12 @@
3
3
  module OnlyofficeTestrailWrapper
4
4
  # Methods to perform operations on milestones
5
5
  module TestrailProjectMilestoneMethods
6
+ # Get milestone data by parameter
7
+ # @param [String, Integer] name_or_id id or name of milestone
8
+ # @return [TestrailMilestone]
6
9
  def milestone(name_or_id)
7
10
  case name_or_id.class.to_s
8
- when 'Fixnum'
11
+ when 'Fixnum', 'Integer'
9
12
  get_milestone_by_id name_or_id
10
13
  when 'String'
11
14
  init_milestone_by_name name_or_id
@@ -14,32 +17,48 @@ module OnlyofficeTestrailWrapper
14
17
  end
15
18
  end
16
19
 
20
+ # Get milestone data by it's name
21
+ # Will create a new one if no one found
22
+ # @param [String] name of milestone
23
+ # @return [TestrailMilestone]
17
24
  def init_milestone_by_name(name)
18
25
  found_milestone = get_milestone_by_name name
19
26
  found_milestone.nil? ? create_new_milestone(name) : found_milestone
20
27
  end
21
28
 
29
+ # Get milestone by it's id
30
+ # @param [Integer] id of milestone
31
+ # @return [TestrailMilestone]
22
32
  def get_milestone_by_id(id)
23
- milestone = HashHelper.parse_to_class_variable(Testrail2.http_get("index.php?/api/v2/get_milestone/#{id}"), TestrailMilestone)
33
+ milestone = TestrailMilestone.new.init_from_hash(Testrail2.http_get("index.php?/api/v2/get_milestone/#{id}"))
24
34
  OnlyofficeLoggerHelper.log("Initialized milestone: #{milestone.name}")
25
35
  milestone
26
36
  end
27
37
 
38
+ # Get milestone data by it's name
39
+ # @param [String] name of milestone
40
+ # @return [TestrailMilestone, nil] result or nil if not found
28
41
  def get_milestone_by_name(name)
29
42
  get_milestones if @milestones_names.empty?
30
43
  @milestones_names[StringHelper.warnstrip!(name.to_s)].nil? ? nil : get_milestone_by_id(@milestones_names[name])
31
44
  end
32
45
 
46
+ # Get list of all milestones
47
+ # @return [Array<TestrailMilestone>] list of all milestones
33
48
  def get_milestones
34
49
  milestones = Testrail2.http_get("index.php?/api/v2/get_milestones/#{@id}")
35
- @milestones_names = HashHelper.get_hash_from_array_with_two_parameters(milestones, 'name', 'id') if @milestones_names.empty?
50
+ @milestones_names = name_id_pairs(milestones) if @milestones_names.empty?
36
51
  milestones
37
52
  end
38
53
 
54
+ # Create new milestone
39
55
  # @param [String] name of milestone
40
56
  # @param [String] description of milestone
57
+ # @return [TestrailMilestone]
41
58
  def create_new_milestone(name, description = '')
42
- new_milestone = HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/add_milestone/#{@id}", :name => StringHelper.warnstrip!(name.to_s), description => description), TestrailMilestone)
59
+ new_milestone = TestrailMilestone.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/add_milestone/#{@id}",
60
+ :name => StringHelper.warnstrip!(name.to_s),
61
+ description => description))
43
62
  OnlyofficeLoggerHelper.log "Created new milestone: #{new_milestone.name}"
44
63
  new_milestone
45
64
  end
@@ -5,7 +5,7 @@ module OnlyofficeTestrailWrapper
5
5
  module TestrailProjectPlanHelper
6
6
  def plan(name_or_id)
7
7
  case name_or_id.class.to_s
8
- when 'Fixnum'
8
+ when 'Fixnum', 'Integer'
9
9
  get_plan_by_id name_or_id
10
10
  when 'String'
11
11
  init_plan_by_name name_or_id
@@ -20,16 +20,16 @@ module OnlyofficeTestrailWrapper
20
20
  end
21
21
 
22
22
  def get_plan_by_id(id)
23
- plan = HashHelper.parse_to_class_variable(Testrail2.http_get("index.php?/api/v2/get_plan/#{id}"), TestrailPlan)
23
+ plan = TestrailPlan.new.init_from_hash(Testrail2.http_get("index.php?/api/v2/get_plan/#{id}"))
24
24
  OnlyofficeLoggerHelper.log("Initialized plan: #{plan.name}")
25
25
  raise("`get_plan_by_id(#{id})` return an error: `#{plan.error}`") if plan.error
26
26
 
27
27
  plan.entries.each_with_index do |test_entry, index|
28
- entry = HashHelper.parse_to_class_variable(test_entry, TestrailPlanEntry)
29
- entry.runs.each_with_index { |run, i| entry.runs[i] = HashHelper.parse_to_class_variable(run, TestrailRun) }
28
+ entry = TestrailPlanEntry.new.init_from_hash(test_entry)
29
+ entry.runs.each_with_index { |run, i| entry.runs[i] = TestrailRun.new.init_from_hash(run) }
30
30
  plan.entries[index] = entry
31
31
  end
32
- plan.instance_variable_set '@project', self
32
+ plan.instance_variable_set :@project, self
33
33
  plan
34
34
  end
35
35
 
@@ -54,7 +54,7 @@ module OnlyofficeTestrailWrapper
54
54
  get_url = "index.php?/api/v2/get_plans/#{@id}"
55
55
  filters.each { |key, value| get_url += "&#{key}=#{value}" }
56
56
  plans = Testrail2.http_get(get_url)
57
- @plans_names = HashHelper.get_hash_from_array_with_two_parameters(plans, 'name', 'id') if @plans_names.empty?
57
+ @plans_names = name_id_pairs(plans) if @plans_names.empty?
58
58
  plans
59
59
  end
60
60
 
@@ -68,19 +68,22 @@ module OnlyofficeTestrailWrapper
68
68
  get_url = "index.php?/api/v2/get_plans/#{@id}"
69
69
  filters.each { |key, value| get_url += "&#{key}=#{value}" }
70
70
  plans = Testrail2.http_get(get_url)
71
- plans.map { |suite| HashHelper.parse_to_class_variable(suite, TestrailPlan) }
71
+ plans.map { |suite| TestrailPlan.new.init_from_hash(suite) }
72
72
  end
73
73
 
74
74
  # @param [String] name of test plan
75
75
  # @param [String] description
76
76
  # @param [Integer] milestone_id
77
77
  def create_new_plan(name, entries = [], description = '', milestone_id = nil)
78
- new_plan = HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/add_plan/#{@id}", name: StringHelper.warnstrip!(name), description: description,
79
- milestone_id: milestone_id, entries: entries), TestrailPlan)
78
+ new_plan = TestrailPlan.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/add_plan/#{@id}",
79
+ name: StringHelper.warnstrip!(name),
80
+ description: description,
81
+ milestone_id: milestone_id,
82
+ entries: entries))
80
83
  OnlyofficeLoggerHelper.log "Created new plan: #{new_plan.name}"
81
84
  new_plan.entries.each_with_index do |entry, i|
82
- new_plan.entries[i] = HashHelper.parse_to_class_variable(entry, TestrailPlanEntry)
83
- new_plan.entries[i].runs.each_with_index { |run, j| new_plan.entries[i].runs[j] = HashHelper.parse_to_class_variable(run, TestrailRun) }
85
+ new_plan.entries[i] = TestrailPlanEntry.new.init_from_hash(entry)
86
+ new_plan.entries[i].runs.each_with_index { |run, j| new_plan.entries[i].runs[j] = TestrailRun.new.init_from_hash(run) }
84
87
  end
85
88
  @plans_names[new_plan.name] = new_plan.id
86
89
  new_plan
@@ -20,7 +20,7 @@ module OnlyofficeTestrailWrapper
20
20
  get_url = "index.php?/api/v2/get_runs/#{@id}"
21
21
  filters.each { |key, value| get_url += "&#{key}=#{value}" }
22
22
  runs = Testrail2.http_get(get_url)
23
- @runs_names = HashHelper.get_hash_from_array_with_two_parameters(runs, 'name', 'id') if @runs_names.empty?
23
+ @runs_names = name_id_pairs(runs) if @runs_names.empty?
24
24
  runs
25
25
  end
26
26
 
@@ -31,7 +31,7 @@ module OnlyofficeTestrailWrapper
31
31
  get_url = "index.php?/api/v2/get_runs/#{@id}"
32
32
  filters.each { |key, value| get_url += "&#{key}=#{value}" }
33
33
  runs = Testrail2.http_get(get_url)
34
- runs.map { |suite| HashHelper.parse_to_class_variable(suite, TestrailRun) }
34
+ runs.map { |suite| TestrailRun.new.init_from_hash(suite) }
35
35
  end
36
36
 
37
37
  extend Gem::Deprecate
@@ -46,9 +46,9 @@ module OnlyofficeTestrailWrapper
46
46
  end
47
47
 
48
48
  def get_run_by_id(id)
49
- run = HashHelper.parse_to_class_variable(Testrail2.http_get("index.php?/api/v2/get_run/#{id}"), TestrailRun)
49
+ run = TestrailRun.new.init_from_hash(Testrail2.http_get("index.php?/api/v2/get_run/#{id}"))
50
50
  OnlyofficeLoggerHelper.log("Initialized run: #{run.name}")
51
- run.instance_variable_set('@project', self)
51
+ run.instance_variable_set(:@project, self)
52
52
  run
53
53
  end
54
54
 
@@ -59,9 +59,12 @@ module OnlyofficeTestrailWrapper
59
59
  end
60
60
 
61
61
  def create_new_run(name, suite_id, description = '')
62
- new_run = HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/add_run/#{@id}", name: StringHelper.warnstrip!(name), description: description, suite_id: suite_id), TestrailRun)
62
+ new_run = TestrailRun.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/add_run/#{@id}",
63
+ name: StringHelper.warnstrip!(name),
64
+ description: description,
65
+ suite_id: suite_id))
63
66
  OnlyofficeLoggerHelper.log "Created new run: #{new_run.name}"
64
- new_run.instance_variable_set('@project', self)
67
+ new_run.instance_variable_set(:@project, self)
65
68
  @runs_names[new_run.name] = new_run.id
66
69
  new_run
67
70
  end
@@ -5,7 +5,7 @@ module OnlyofficeTestrailWrapper
5
5
  module TestrailProjectSuiteMethods
6
6
  def suite(name_or_id)
7
7
  case name_or_id.class.to_s
8
- when 'Fixnum'
8
+ when 'Fixnum', 'Integer'
9
9
  get_suite_by_id name_or_id
10
10
  when 'String'
11
11
  init_suite_by_name name_or_id
@@ -18,7 +18,7 @@ module OnlyofficeTestrailWrapper
18
18
  # @return [Array<Hash>] array with suites data in hash
19
19
  def get_suites
20
20
  suites = Testrail2.http_get("index.php?/api/v2/get_suites/#{@id}")
21
- @suites_names = HashHelper.get_hash_from_array_with_two_parameters(suites, 'name', 'id') if @suites_names.empty?
21
+ @suites_names = name_id_pairs(suites) if @suites_names.empty?
22
22
  suites
23
23
  end
24
24
 
@@ -29,7 +29,7 @@ module OnlyofficeTestrailWrapper
29
29
  # @return [Array<TestrailSuite>] array with TestRailSuite
30
30
  def suites
31
31
  suites = Testrail2.http_get("index.php?/api/v2/get_suites/#{@id}")
32
- suites.map { |suite| HashHelper.parse_to_class_variable(suite, TestrailSuite) }
32
+ suites.map { |suite| TestrailSuite.new.init_from_hash(suite) }
33
33
  end
34
34
 
35
35
  # Get Test Suite by it's name
@@ -41,8 +41,8 @@ module OnlyofficeTestrailWrapper
41
41
  end
42
42
 
43
43
  def get_suite_by_id(id)
44
- suite = HashHelper.parse_to_class_variable(Testrail2.http_get("index.php?/api/v2/get_suite/#{id}"), TestrailSuite)
45
- suite.instance_variable_set('@project', self)
44
+ suite = TestrailSuite.new.init_from_hash(Testrail2.http_get("index.php?/api/v2/get_suite/#{id}"))
45
+ suite.instance_variable_set(:@project, self)
46
46
  OnlyofficeLoggerHelper.log("Initialized suite: #{suite.name}")
47
47
  suite
48
48
  end
@@ -60,8 +60,10 @@ module OnlyofficeTestrailWrapper
60
60
  # @param [String] description description of suite
61
61
  # @return [TestrailSuite] created suite
62
62
  def create_new_suite(name, description = '')
63
- new_suite = HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/add_suite/#{@id}", name: StringHelper.warnstrip!(name), description: description), TestrailSuite)
64
- new_suite.instance_variable_set('@project', self)
63
+ new_suite = TestrailSuite.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/add_suite/#{@id}",
64
+ name: StringHelper.warnstrip!(name),
65
+ description: description))
66
+ new_suite.instance_variable_set(:@project, self)
65
67
  OnlyofficeLoggerHelper.log "Created new suite: #{new_suite.name}"
66
68
  @suites_names[new_suite.name] = new_suite.id
67
69
  new_suite
@@ -13,7 +13,7 @@ require_relative 'testrail_project/testrail_project_suite_methods'
13
13
  module OnlyofficeTestrailWrapper
14
14
  # @author Roman.Zagudaev
15
15
  # Class for working with Test Projects
16
- class TestrailProject
16
+ class TestrailProject < TestrailApiObject
17
17
  include ProjectCleanup
18
18
  include TestrailProjectMilestoneMethods
19
19
  include TestrailProjectPlanHelper
@@ -49,6 +49,7 @@ module OnlyofficeTestrailWrapper
49
49
  # @param is_completed [true, false] is project completed, default = nil
50
50
  # @return [TestRunTestRail] new Test run
51
51
  def initialize(name = '', announcement = nil, show_announcement = true, is_completed = false, id = nil)
52
+ super()
52
53
  @id = id.to_i
53
54
  @name = name
54
55
  @announcement = announcement
@@ -61,10 +62,11 @@ module OnlyofficeTestrailWrapper
61
62
  end
62
63
 
63
64
  def update(is_completed = false, name = @name, announcement = @announcement, show_announcement = @show_announcement)
64
- @testrail.projects_names.delete[@name]
65
- @testrail.projects_names[StringHelper.warnstrip!(name.to_s)] = @id
66
- updated_project = HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/update_project/#{@id}", name: name, announcement: announcement,
67
- show_announcement: show_announcement, is_completed: is_completed), TestrailProject)
65
+ updated_project = TestrailProject.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/update_project/#{@id}",
66
+ name: name,
67
+ announcement: announcement,
68
+ show_announcement: show_announcement,
69
+ is_completed: is_completed))
68
70
  OnlyofficeLoggerHelper.log "Updated project: #{updated_project.name}"
69
71
  updated_project
70
72
  end
@@ -72,7 +74,6 @@ module OnlyofficeTestrailWrapper
72
74
  def delete
73
75
  Testrail2.http_post "index.php?/api/v2/delete_project/#{@id}", {}
74
76
  OnlyofficeLoggerHelper.log "Deleted project: #{@name}"
75
- @testrail.projects_names.delete @name
76
77
  end
77
78
  end
78
79
  end
@@ -3,7 +3,7 @@
3
3
  module OnlyofficeTestrailWrapper
4
4
  # @author Roman.Zagudaev
5
5
  # Class for working with Test results
6
- class TestrailResult
6
+ class TestrailResult < TestrailApiObject
7
7
  RESULT_STATUSES = { passed: 1, blocked: 2, untested: 3, retest: 4, failed: 5, passed_2: 6, work_for_me: 7,
8
8
  pending: 8, aborted: 9, js_error: 10, lpv: 11, service_unavailable: 12 }.freeze
9
9
  # @return [Integer] Id of test result
@@ -28,6 +28,7 @@ module OnlyofficeTestrailWrapper
28
28
  # @param [String] version Version
29
29
  # @return [TestResultTestRail] new Test result
30
30
  def initialize(status = nil, comment = nil, version = nil)
31
+ super()
31
32
  @title = status.to_s
32
33
  @status_id = RESULT_STATUSES[status]
33
34
  @comment = comment
@@ -5,7 +5,7 @@ require_relative 'testrail_test'
5
5
  module OnlyofficeTestrailWrapper
6
6
  # @author Roman.Zagudaev
7
7
  # Class for working with TestRun in TestRail
8
- class TestrailRun
8
+ class TestrailRun < TestrailApiObject
9
9
  # @return [String] Name of test Run
10
10
  attr_accessor :name
11
11
  # @return [Integer] Id of test run
@@ -49,6 +49,7 @@ module OnlyofficeTestrailWrapper
49
49
  # @param [Hash] params all other params
50
50
  # @return [TestRunTestRail] new Test run
51
51
  def initialize(name = '', description = '', suite_id = nil, id = nil, params = {})
52
+ super()
52
53
  @id = id
53
54
  @name = name
54
55
  @description = description
@@ -71,7 +72,7 @@ module OnlyofficeTestrailWrapper
71
72
 
72
73
  def close
73
74
  OnlyofficeLoggerHelper.log("Starting to send command to close run: #{@name}")
74
- test_run = HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/close_run/#{@id}", {}), TestrailRun)
75
+ test_run = TestrailRun.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/close_run/#{@id}", {}))
75
76
  OnlyofficeLoggerHelper.log("Run is closed: #{@name}")
76
77
  test_run
77
78
  end
@@ -88,14 +89,14 @@ module OnlyofficeTestrailWrapper
88
89
  end
89
90
 
90
91
  def get_test_by_id(id)
91
- HashHelper.parse_to_class_variable(Testrail2.http_get("index.php?/api/v2/get_test/#{id}"), TestrailTest)
92
+ TestrailTest.new.init_from_hash(Testrail2.http_get("index.php?/api/v2/get_test/#{id}"))
92
93
  end
93
94
 
94
95
  # Get all tests
95
96
  # @return [Array, TestCaseTestrail] array of test cases
96
97
  def get_tests
97
98
  tests = Testrail2.http_get "index.php?/api/v2/get_tests/#{@id}"
98
- @tests_names = HashHelper.get_hash_from_array_with_two_parameters(tests, 'title', 'id') if @tests_names.empty?
99
+ @tests_names = name_id_pairs(tests, 'title') if @tests_names.empty?
99
100
  tests
100
101
  end
101
102
 
@@ -105,8 +106,10 @@ module OnlyofficeTestrailWrapper
105
106
  end
106
107
 
107
108
  def add_result_by_case_id(result, case_id, comment = '', version = '')
108
- HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/add_result_for_case/#{@id}/#{case_id}",
109
- status_id: TestrailResult[result], comment: comment, version: version), TestrailResult)
109
+ TestrailResult.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/add_result_for_case/#{@id}/#{case_id}",
110
+ status_id: TestrailResult[result],
111
+ comment: comment,
112
+ version: version))
110
113
  end
111
114
 
112
115
  def parent_suite
@@ -116,7 +119,9 @@ module OnlyofficeTestrailWrapper
116
119
  def update(name = @name, description = @description)
117
120
  @project.runs_names.delete @name
118
121
  @project.runs_names[StringHelper.warnstrip!(name.to_s)] = @id
119
- updated_plan = HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/update_run/#{@id}", name: name, description: description), TestrailRun)
122
+ updated_plan = TestrailRun.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/update_run/#{@id}",
123
+ name: name,
124
+ description: description))
120
125
  OnlyofficeLoggerHelper.log "Updated run: #{updated_plan.name}"
121
126
  updated_plan
122
127
  end
@@ -5,7 +5,7 @@ require_relative 'testrail_case'
5
5
  module OnlyofficeTestrailWrapper
6
6
  # @author Roman.Zagudaev
7
7
  # Class for description of test sections
8
- class TestrailSection
8
+ class TestrailSection < TestrailApiObject
9
9
  # @return [Integer] Id of test section
10
10
  attr_accessor :id
11
11
  # @return [Integer] Id of parent test section
@@ -24,6 +24,7 @@ module OnlyofficeTestrailWrapper
24
24
  # @param [Integer] suite_id id of test suite
25
25
  # @return [TestSectionTestRail] new Test section
26
26
  def initialize(name = '', parent_id = nil, suite_id = nil, id = nil)
27
+ super()
27
28
  @id = id
28
29
  @name = name
29
30
  @suite_id = suite_id
@@ -46,8 +47,8 @@ module OnlyofficeTestrailWrapper
46
47
  end
47
48
 
48
49
  def get_case_by_id(id)
49
- test_case = HashHelper.parse_to_class_variable(Testrail2.http_get("index.php?/api/v2/get_case/#{id}"), TestrailCase)
50
- test_case.instance_variable_set '@section', self
50
+ test_case = TestrailCase.new.init_from_hash(Testrail2.http_get("index.php?/api/v2/get_case/#{id}"))
51
+ test_case.instance_variable_set :@section, self
51
52
  test_case
52
53
  end
53
54
 
@@ -56,7 +57,7 @@ module OnlyofficeTestrailWrapper
56
57
  def get_cases
57
58
  # raise 'Project id is not identified' if @project_id.nil?
58
59
  cases = Testrail2.http_get("index.php?/api/v2/get_cases/#{@project_id}&suite_id=#{@suite_id}&section_id=#{@id}")
59
- @cases_names = HashHelper.get_hash_from_array_with_two_parameters(cases, 'title', 'id') if @cases_names.nil?
60
+ @cases_names = name_id_pairs(cases, 'title') if @cases_names.nil?
60
61
  cases
61
62
  end
62
63
 
@@ -83,9 +84,12 @@ module OnlyofficeTestrailWrapper
83
84
  # @param [String] custom_steps steps to perform
84
85
  # @return [TestCaseTestrail] created test case
85
86
  def create_new_case(title, type_id = 3, priority_id = 4, custom_steps = '')
86
- new_case = HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/add_case/#{@id}", title: StringHelper.warnstrip!(title.to_s), type_id: type_id,
87
- priority_id: priority_id, custom_steps: custom_steps), TestrailCase)
88
- new_case.instance_variable_set('@section', self)
87
+ new_case = TestrailCase.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/add_case/#{@id}",
88
+ title: StringHelper.warnstrip!(title.to_s),
89
+ type_id: type_id,
90
+ priority_id: priority_id,
91
+ custom_steps: custom_steps))
92
+ new_case.instance_variable_set(:@section, self)
89
93
  OnlyofficeLoggerHelper.log "Created new case: #{new_case.title}"
90
94
  @cases_names[new_case.title] = new_case.id
91
95
  new_case
@@ -94,7 +98,9 @@ module OnlyofficeTestrailWrapper
94
98
  def update(name = @name, parent_id = @parent_id)
95
99
  @suite.sections_names.delete @name
96
100
  @suite.sections_names[StringHelper.warnstrip!(name.to_s)] = @id
97
- updated_section = HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/update_section/#{@id}", name: name, parent_id: parent_id), TestrailSection)
101
+ updated_section = TestrailSection.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/update_section/#{@id}",
102
+ name: name,
103
+ parent_id: parent_id))
98
104
  OnlyofficeLoggerHelper.log "Updated section: #{updated_section.name}"
99
105
  updated_section
100
106
  end
@@ -7,7 +7,7 @@ require_relative 'testrail_run'
7
7
  module OnlyofficeTestrailWrapper
8
8
  # @author Roman.Zagudaev
9
9
  # Class for description of test suites
10
- class TestrailSuite
10
+ class TestrailSuite < TestrailApiObject
11
11
  # @return [Integer] Id of test suite
12
12
  attr_accessor :id
13
13
  # @return [String] Name of test suite
@@ -28,6 +28,7 @@ module OnlyofficeTestrailWrapper
28
28
  # @param [Integer] project_id id of project of test suite
29
29
  # @return [TestrailSuite] new Test suite
30
30
  def initialize(name = nil, description = nil, project_id = nil, id = nil)
31
+ super()
31
32
  @id = id
32
33
  @name = name
33
34
  @description = description
@@ -39,7 +40,10 @@ module OnlyofficeTestrailWrapper
39
40
  # @param [String] description description of test run
40
41
  # @return [TestRunTestRail] created test run
41
42
  def start_test_run(name, description = '')
42
- HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/add_run/#{@project_id}", name: StringHelper.warnstrip!(name.to_s), description: description, suite_id: @id), TestrailRun)
43
+ TestrailRun.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/add_run/#{@project_id}",
44
+ name: StringHelper.warnstrip!(name.to_s),
45
+ description: description,
46
+ suite_id: @id))
43
47
  end
44
48
 
45
49
  def section(name_or_id = 'All Test Cases')
@@ -58,12 +62,14 @@ module OnlyofficeTestrailWrapper
58
62
  # @param [Integer] parent_section id of parent section, default = nil
59
63
  def create_new_section(name, parent_section = nil)
60
64
  parent_section = get_section_by_name(parent_section).id if parent_section.is_a?(String)
61
- new_section = HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/add_section/#{@project_id}", name: StringHelper.warnstrip!(name.to_s),
62
- parent_id: parent_section, suite_id: @id), TestrailSection)
65
+ new_section = TestrailSection.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/add_section/#{@project_id}",
66
+ name: StringHelper.warnstrip!(name.to_s),
67
+ parent_id: parent_section,
68
+ suite_id: @id))
63
69
  OnlyofficeLoggerHelper.log "Created new section: #{new_section.name}"
64
70
  @sections_names[new_section.name] = new_section.id
65
- new_section.instance_variable_set '@project_id', @project_id
66
- new_section.instance_variable_set '@suite', self
71
+ new_section.instance_variable_set :@project_id, @project_id
72
+ new_section.instance_variable_set :@suite, self
67
73
  new_section
68
74
  end
69
75
 
@@ -71,14 +77,14 @@ module OnlyofficeTestrailWrapper
71
77
  # @return [Array, TestrailSuite] array with sections
72
78
  def get_sections
73
79
  sections = Testrail2.http_get("index.php?/api/v2/get_sections/#{@project_id}&suite_id=#{@id}")
74
- @sections_names = HashHelper.get_hash_from_array_with_two_parameters(sections, 'name', 'id') if @sections_names.nil?
80
+ @sections_names = name_id_pairs(sections) if @sections_names.nil?
75
81
  sections
76
82
  end
77
83
 
78
84
  def get_section_by_id(id)
79
- section = HashHelper.parse_to_class_variable(Testrail2.http_get("index.php?/api/v2/get_section/#{id}"), TestrailSection)
80
- section.instance_variable_set '@project_id', @project_id
81
- section.instance_variable_set '@suite', self
85
+ section = TestrailSection.new.init_from_hash(Testrail2.http_get("index.php?/api/v2/get_section/#{id}"))
86
+ section.instance_variable_set :@project_id, @project_id
87
+ section.instance_variable_set :@suite, self
82
88
  section
83
89
  end
84
90
 
@@ -107,7 +113,9 @@ module OnlyofficeTestrailWrapper
107
113
  def update(name, description = nil)
108
114
  @project.suites_names.delete @name
109
115
  @project.suites_names[StringHelper.warnstrip!(name.to_s)] = @id
110
- updated_suite = HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/update_suite/#{@id}", name: name, description: description), TestrailSuite)
116
+ updated_suite = TestrailSuite.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/update_suite/#{@id}",
117
+ name: name,
118
+ description: description))
111
119
  OnlyofficeLoggerHelper.log "Updated suite: #{updated_suite.name}"
112
120
  updated_suite
113
121
  end
@@ -3,7 +3,8 @@
3
3
  require_relative 'testrail_result'
4
4
 
5
5
  module OnlyofficeTestrailWrapper
6
- class TestrailTest
6
+ # Class for working with single testrail case
7
+ class TestrailTest < TestrailApiObject
7
8
  # @return [Integer] test id
8
9
  attr_accessor :id
9
10
  # @return [Integer] test run id
@@ -18,23 +19,34 @@ module OnlyofficeTestrailWrapper
18
19
  attr_accessor :assignedto_id
19
20
 
20
21
  def initialize(id = nil, run_id = nil, case_id = nil, title = '')
22
+ super()
21
23
  @id = id
22
24
  @title = title
23
25
  @case_id = case_id
24
26
  @run_id = run_id
25
27
  end
26
28
 
29
+ # Get all results of single test
30
+ # @return [Array<TestrailResult>] list of results
27
31
  def get_results
28
32
  @results.nil? ? @results = Testrail2.http_get("index.php?/api/v2/get_results/#{@id}") : (return @results)
29
- @results.each_with_index { |result, index| @results[index] = HashHelper.parse_to_class_variable(result, TestrailResult) }
33
+ @results.each_with_index { |result, index| @results[index] = TestrailResult.new.init_from_hash(result) }
30
34
  @results
31
35
  end
32
36
 
33
- def add_result(result, comment = '', version = '')
34
- result = TestrailResult::RESULT_STATUSES[result] if result.is_a?(Symbol)
35
- HashHelper.parse_to_class_variable(Testrail2.http_post("index.php?/api/v2/add_result/#{@id}", status_id: result,
36
- comment: comment, version: version), TestrailResult)
37
- OnlyofficeLoggerHelper.log "Set test result: #{result}"
37
+ # Add result to current Test
38
+ # @param [Integer, Symbol] status of result
39
+ # @param [String] comment of result
40
+ # @param [String] version of result
41
+ # @return [TestrailResult] result of adding
42
+ def add_result(status, comment = '', version = '')
43
+ status = TestrailResult::RESULT_STATUSES[status] if status.is_a?(Symbol)
44
+ result = TestrailResult.new.init_from_hash(Testrail2.http_post("index.php?/api/v2/add_result/#{@id}",
45
+ status_id: status,
46
+ comment: comment,
47
+ version: version))
48
+ OnlyofficeLoggerHelper.log "Set test result: #{status}"
49
+ result
38
50
  end
39
51
  end
40
52
  end
@@ -15,7 +15,9 @@ require_relative '../testrail'
15
15
  # TestrailTools.close_all_runs
16
16
  #
17
17
  module OnlyofficeTestrailWrapper
18
+ # Module for Tools for Testrail
18
19
  module TestrailTools
20
+ # Class for Testrail configuration
19
21
  class TestrailConfig
20
22
  attr_accessor :project, :plan, :suite, :run
21
23
  end
@@ -56,7 +58,7 @@ module OnlyofficeTestrailWrapper
56
58
 
57
59
  def self.get_tests_report(status)
58
60
  check_config(__method__, :@project, :@plan)
59
- { plan.name => plan.entries.inject({}) { |a, e| a.merge!({ e.name => e.runs.first.get_tests.map { |test| test['title'] if TestrailResult::RESULT_STATUSES.key(test['status_id']) == status }.compact }.delete_if { |_, value| value.empty? }) } }
61
+ { plan.name => plan.entries.inject({}) { |a, e| a.merge!({ e.name => e.runs.first.get_tests.filter_map { |test| test['title'] if TestrailResult::RESULT_STATUSES.key(test['status_id']) == status } }.delete_if { |_, value| value.empty? }) } }
60
62
  end
61
63
 
62
64
  def self.get_runs_durations
@@ -84,7 +86,7 @@ module OnlyofficeTestrailWrapper
84
86
  end
85
87
 
86
88
  def self.check_config(*args)
87
- return if @testrail_config && (@testrail_config.instance_variables & args[1..-1]) == args[1..-1]
89
+ return if @testrail_config && (@testrail_config.instance_variables & args[1..]) == args[1..]
88
90
 
89
91
  raise "Method: #{args.shift} - some of needed parameters are missing: #{args.join(', ')}. To configure them, type:\n
90
92
  TestrailTools.configure do |config|\n\t\tconfig.param_name = value\n\tend"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OnlyofficeTestrailWrapper
4
4
  module Version
5
- STRING = '0.3.0'
5
+ STRING = '0.4.0'
6
6
  end
7
7
  end