blinka-reporter 0.2.1 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bda58bde54cfddafa7711c984e477a7781299f90874a137e4e396dd048885afe
4
- data.tar.gz: 41ce526368565e1f97884fb13977f8833081681a2f63e29343e78508c4f4535a
3
+ metadata.gz: d84bd0f016744a88e06403d6f01f730004bf3cfb31b36394174f1335c12cd103
4
+ data.tar.gz: 3ab3b1744b8be12c29227e080ed0a39e6039ff63e0e883063d21b5c80a212290
5
5
  SHA512:
6
- metadata.gz: f98b19c0df3fe63a02c322d53c22bdca62a473d106a3984a6803fc856e1203028e4de3f4b1f9d902b399fad285294218ee47c736f6f2f3b984c5ba63048d40fd
7
- data.tar.gz: 0d701507d2ae55c3d022694c212a668d91804acbe18040e0476d8bf585f098edc1fc0dbe4a51a7d340c56fcc3309c4aeec6cc199b1990e4f1430e98314d190c7
6
+ metadata.gz: cd1ee46a25fb0c799ae89054c6b835f11aea3883420320d5809160b2315ad1eb93640aea7588b1509fb744c79dc7fb6a5a35b3b47ba493cdc81b2bcb65ee671a
7
+ data.tar.gz: 97c433c7f79f60e8441376f47fcc9d937e2d1c02db93d67793655aed288d0367eea13d02fa1a7833ff6a299611e3c971f121d8b5169cc7d0f2dcf4b93e0cde73
data/lib/blinka_client.rb CHANGED
@@ -2,6 +2,10 @@ require 'mimemagic'
2
2
  require 'httparty'
3
3
 
4
4
  class BlinkaClient
5
+ DEFAULT_HOST = 'https://www.blinka.app'.freeze
6
+
7
+ include HTTParty
8
+
5
9
  class BlinkaConfig
6
10
  attr_reader(
7
11
  :tag,
@@ -12,13 +16,14 @@ class BlinkaClient
12
16
  :team_secret,
13
17
  :jwt_token
14
18
  )
19
+
15
20
  def initialize
16
- @host = ENV.fetch('BLINKA_HOST', 'https://www.blinka.app')
21
+ @host = ENV.fetch('BLINKA_HOST', DEFAULT_HOST)
17
22
  @team_id = ENV.fetch('BLINKA_TEAM_ID', nil)
18
23
  @team_secret = ENV.fetch('BLINKA_TEAM_SECRET', nil)
19
24
  @repository = ENV.fetch('BLINKA_REPOSITORY', nil)
20
25
  @tag = ENV.fetch('BLINKA_TAG', '')
21
- @commit = ENV.fetch('BLINKA_COMMIT', `git rev-parse HEAD`.chomp)
26
+ @commit = BlinkaClient.find_commit
22
27
 
23
28
  if @team_id.nil? || @team_secret.nil? || @repository.nil?
24
29
  raise(BlinkaError, <<~EOS)
@@ -32,7 +37,6 @@ class BlinkaClient
32
37
  end
33
38
 
34
39
  class BlinkaError < StandardError; end
35
- include HTTParty
36
40
 
37
41
  def initialize
38
42
  @config = BlinkaConfig.new
@@ -40,6 +44,18 @@ class BlinkaClient
40
44
  end
41
45
 
42
46
  def report(filepath: './blinka_results.json')
47
+ unless File.exist?(filepath)
48
+ raise(
49
+ BlinkaError,
50
+ 'Could not find blinka_results.json, did tests run with environment variable BLINKA_JSON=true set?'
51
+ )
52
+ end
53
+
54
+ if ENV.fetch('BLINKA_ALLOW_WEBMOCK_DISABLE', 'true') == 'true' &&
55
+ defined?(WebMock) && WebMock.respond_to?(:disable!)
56
+ WebMock.disable!
57
+ end
58
+
43
59
  self.authenticate
44
60
  data = JSON.parse(File.open(filepath).read)
45
61
 
@@ -88,6 +104,19 @@ class BlinkaClient
88
104
  else
89
105
  raise(BlinkaError, "Could not report, got response code #{response.code}")
90
106
  end
107
+ rescue => error
108
+ raise(BlinkaError, <<-EOS)
109
+ BLINKA:
110
+ Failed to create report because of #{error.class} with message:
111
+ #{error.message}
112
+ EOS
113
+ ensure
114
+ WebMock.enable! if defined?(WebMock) && WebMock.respond_to?(:enable!)
115
+ end
116
+
117
+ def self.report(filepath: './blinka_results.json')
118
+ client = BlinkaClient.new
119
+ client.report(filepath: filepath)
91
120
  end
92
121
 
93
122
  def self.upload_image(filepath:)
@@ -169,4 +198,11 @@ class BlinkaClient
169
198
  }
170
199
  }
171
200
  end
201
+
202
+ def self.find_commit
203
+ ENV.fetch(
204
+ 'BLINKA_COMMIT',
205
+ ENV.fetch('HEROKU_TEST_RUN_COMMIT_VERSION', `git rev-parse HEAD`.chomp)
206
+ )
207
+ end
172
208
  end
@@ -1,5 +1,4 @@
1
1
  class BlinkaMinitest
2
- attr_reader(:test_result)
3
2
  def initialize(test_result)
4
3
  @test_result = test_result
5
4
  end
@@ -8,14 +7,19 @@ class BlinkaMinitest
8
7
  @path ||= source_location.first.gsub(Dir.getwd, '').delete_prefix('/')
9
8
  end
10
9
 
10
+ def line
11
+ @line ||= source_location.last
12
+ end
13
+
11
14
  # Handle broken API in Minitest between 5.10 and 5.11
12
15
  # https://github.com/minitest-reporters/minitest-reporters/blob/e9092460b5a5cf5ca9eb375428217cbb2a7f6dbb/lib/minitest/reporters/default_reporter.rb#L159
13
16
  def source_location
14
- if test_result.respond_to?(:klass)
15
- test_result.source_location
16
- else
17
- test_result.method(test_result.name).source_location
18
- end
17
+ @source_location ||=
18
+ if @test_result.respond_to?(:klass)
19
+ @test_result.source_location
20
+ else
21
+ @test_result.method(@test_result.name).source_location
22
+ end
19
23
  end
20
24
 
21
25
  def kind
@@ -24,47 +28,34 @@ class BlinkaMinitest
24
28
  end
25
29
 
26
30
  def message
27
- failure = test_result.failure
31
+ failure = @test_result.failure
28
32
  return unless failure
29
33
  "#{failure.error.class}: #{failure.error.message}"
30
34
  end
31
35
 
32
36
  def backtrace
33
- return unless test_result.failure
34
- Minitest.filter_backtrace(test_result.failure.backtrace)
37
+ return unless @test_result.failure
38
+ Minitest.filter_backtrace(@test_result.failure.backtrace)
35
39
  end
36
40
 
37
41
  def result
38
- if test_result.error?
42
+ if @test_result.error?
39
43
  :error
40
- elsif test_result.skipped?
44
+ elsif @test_result.skipped?
41
45
  :skip
42
- elsif test_result.failure
46
+ elsif @test_result.failure
43
47
  :failed
44
48
  else
45
49
  :pass
46
50
  end
47
51
  end
48
52
 
49
- def line
50
- current_backtrace = backtrace
51
- return if current_backtrace.nil?
52
-
53
- row =
54
- current_backtrace
55
- .map { |row| row.split(':')[0..1] }
56
- .detect { |row| row[0] == path }
57
-
58
- return if row.nil?
59
- row[1].to_i
60
- end
61
-
62
53
  def time
63
- test_result.time
54
+ @test_result.time
64
55
  end
65
56
 
66
57
  def name
67
- test_result.name
58
+ @test_result.name
68
59
  end
69
60
 
70
61
  def image
@@ -1,6 +1,7 @@
1
1
  require 'minitest'
2
2
  require 'json'
3
3
  require 'blinka_minitest'
4
+ require 'blinka_client'
4
5
 
5
6
  module Minitest
6
7
  def self.plugin_blinka_init(options)
@@ -25,15 +26,18 @@ module Minitest
25
26
  end
26
27
 
27
28
  def report
28
- tap_report unless ENV['BLINKA_TAP'].nil?
29
- blinka_report
30
-
29
+ tap_report if ENV['BLINKA_TAP']
30
+ json_report if ENV['BLINKA_JSON'] || ENV['BLINKA_REPORT']
31
+ BlinkaClient.new.report if ENV['BLINKA_REPORT']
32
+ rescue BlinkaClient::BlinkaError => error
33
+ puts(error)
34
+ ensure
31
35
  super
32
36
  end
33
37
 
34
38
  private
35
39
 
36
- def blinka_report
40
+ def json_report
37
41
  result = {
38
42
  total_time: total_time,
39
43
  nbr_tests: count,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blinka-reporter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Wessman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-08 00:00:00.000000000 Z
11
+ date: 2021-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '13'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.11'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.11'
97
111
  description: Use to format test results from Minitest to use with Blinka.
98
112
  email: david@wessman.co
99
113
  executables: []