Class: TestrailRSpec::UpdateTestRails

Inherits:
Object
  • Object
show all
Defined in:
lib/testrail-rspec/update-testrails.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(scenario) ⇒ UpdateTestRails

Returns a new instance of UpdateTestRails.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/testrail-rspec/update-testrails.rb', line 7

def initialize(scenario)
  @scenario = scenario

  if File.exist? './testrail_config.yml'
    @config = YAML.load_file("./testrail_config.yml")['testrail']
    raise 'TestRail configuration file not loaded successfully' if @config.nil?
  else
    raise 'TestRail configuration file is required'
  end

  return if [@config['allow'].nil?, @config['allow']].all? false
  setup_testrail_client
  config_validator if $config_validator.nil?
end

Instance Attribute Details

#clientObject

Returns the value of attribute client.



5
6
7
# File 'lib/testrail-rspec/update-testrails.rb', line 5

def client
  @client
end

Instance Method Details

#fetch_status_idsObject



64
65
66
# File 'lib/testrail-rspec/update-testrails.rb', line 64

def fetch_status_ids
  client.send_get('get_statuses')
end

#upload_resultObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/testrail-rspec/update-testrails.rb', line 22

def upload_result
  return if [@config['allow'].nil?, @config['allow']].all? false
  response = {}

  case_list = []
  @scenario.full_description.split(' ').map do |e|
    val = e.scan(/\d+/).first
    next if val.nil?
    case_list << val
  end

  return if case_list.empty?

  if (@scenario.exception) && (!@scenario.exception.message.include? 'pending')
    status_id = get_status_id 'failed'.to_sym
    message = @scenario.exception.message
  elsif @scenario.skipped?
    status_id = get_status_id 'blocked'.to_sym
    message = "This test scenario is skipped from test execution"
  elsif @scenario.pending?
    status_id = get_status_id 'blocked'.to_sym
    message = "This test scenario is pending for test execution"
  else
    status_id = get_status_id 'passed'.to_sym
    message = "This test scenario was automated and passed successfully"
  end

  @run_id ||= @config['run_id']
  @run_id = @@run_id rescue @@run_id = nil unless @config['run_id']
  @run_id = @@run_id = client.create_test_run("add_run/#{@config['project_id']}", {"suite_id": @config['suite_id']}) if @run_id.nil?

  case_list.map do |case_id|
    check_avail(:case_id, case_id)
    response = client.send_post(
        "add_result_for_case/#{@run_id}/#{case_id}",
        {status_id: status_id, comment: message}
    )
  end

  response
end