Welcome to mirror list, hosted at ThFree Co, Russian Federation.

flaky_example.rb « rspec_flaky « tooling - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 4f3688dbeed800d099de299fe21eee03a7b28808 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# frozen_string_literal: true

require 'ostruct'

module RspecFlaky
  # This represents a flaky RSpec example and is mainly meant to be saved in a JSON file
  class FlakyExample < OpenStruct
    def initialize(example)
      if example.respond_to?(:example_id)
        super(
          example_id: example.example_id,
          file: example.file,
          line: example.line,
          description: example.description,
          last_attempts_count: example.attempts,
          flaky_reports: 0)
      else
        super
      end
    end

    def update_flakiness!(last_attempts_count: nil)
      self.first_flaky_at ||= Time.now
      self.last_flaky_at = Time.now
      self.flaky_reports += 1
      self.last_attempts_count = last_attempts_count if last_attempts_count

      if ENV['CI_PROJECT_URL'] && ENV['CI_JOB_ID']
        self.last_flaky_job = "#{ENV['CI_PROJECT_URL']}/-/jobs/#{ENV['CI_JOB_ID']}"
      end
    end

    def to_h
      super.merge(
        first_flaky_at: first_flaky_at,
        last_flaky_at: last_flaky_at,
        last_flaky_job: last_flaky_job)
    end
  end
end