lazylead 0.8.2 → 0.8.3

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: fde968b00a6b6868ea644d731c54d23d08f365b133926fa2cf13699e982a0802
4
- data.tar.gz: 3340adabd89a6699cf0ba2fdc723ccc9e372d505b8b14b81cd7eef6c816c7fdc
3
+ metadata.gz: 81d974a6e2fd3b5417524a420005f1d12714fabab71ead5dd7c9fc6e04582981
4
+ data.tar.gz: a181d093106c36c8d57a47a802fd21bd2a7c0b9ce4bbf09622721ed648481c07
5
5
  SHA512:
6
- metadata.gz: ecbf953aa53ae51b6ed4cc056794f3b8eb9e693d07cc3262070a95592546f9d45797f4ebdf4bbbacc650ad369033e9fd433e6d1975fd3f37688f5c7c3c321ee9
7
- data.tar.gz: f2dae8c55b5b98ddca9fe769a007eb4ea40d6c2b52675fa47911bc924d9ad7b56453f1a4c3705275f2ba2840d9d662ffde58bd92c179ea2af5a2da5baf1b3156
6
+ metadata.gz: 82388742ae4f14b8012b034631beb488ecdef5632c189ffa45fc1cc1947992051eef45d4444a2bef7d950b71e7e634f1c1ab8a63be77e355596ec87a3879cfd4
7
+ data.tar.gz: c1d297f36c42b0e4676211c52da716d05cca80561706d2e38406076d4b5ccd83834f431919803fd576428dae1d422c95f79473c3643e95d1a54bbf8278ec9fbd
data/lazylead.gemspec CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
32
32
  s.rubygems_version = "2.2"
33
33
  s.required_ruby_version = ">=2.6.5"
34
34
  s.name = "lazylead"
35
- s.version = "0.8.2"
35
+ s.version = "0.8.3"
36
36
  s.license = "MIT"
37
37
  s.summary = "Eliminate the annoying work within bug-trackers."
38
38
  s.description = "Ticketing systems (Github, Jira, etc.) are strongly
@@ -45,7 +45,7 @@ tasks instead of solving technical problems."
45
45
  s.authors = ["Yurii Dubinka"]
46
46
  s.email = "yurii.dubinka@gmail.com"
47
47
  s.homepage = "http://github.com/dgroup/lazylead"
48
- s.post_install_message = "Thanks for installing Lazylead v0.8.2!
48
+ s.post_install_message = "Thanks for installing Lazylead v0.8.3!
49
49
  Read our blog posts: https://lazylead.org
50
50
  Stay in touch with the community in Telegram: https://t.me/lazylead
51
51
  Follow us on Twitter: https://twitter.com/lazylead
@@ -90,8 +90,8 @@ tasks instead of solving technical problems."
90
90
  s.add_development_dependency "rake", "13.0.3"
91
91
  s.add_development_dependency "random-port", "0.5.1"
92
92
  s.add_development_dependency "rdoc", "6.3.0"
93
- s.add_development_dependency "rubocop", "1.12.0"
94
- s.add_development_dependency "rubocop-minitest", "0.11.0"
93
+ s.add_development_dependency "rubocop", "1.12.1"
94
+ s.add_development_dependency "rubocop-minitest", "0.11.1"
95
95
  s.add_development_dependency "rubocop-performance", "1.10.2"
96
96
  s.add_development_dependency "rubocop-rake", "0.5.1"
97
97
  s.add_development_dependency "rubocop-rspec", "2.2.0"
@@ -47,7 +47,7 @@ module Lazylead
47
47
  Requires.new(__dir__).load
48
48
  opts[:rules] = opts.construct("rules")
49
49
  opts[:total] = opts[:rules].sum(&:score)
50
- opts[:tickets] = sys.issues(opts["jql"], opts.jira_defaults)
50
+ opts[:tickets] = sys.issues(opts["jql"], opts.jira_defaults.merge(expand: "changelog"))
51
51
  .map { |i| Score.new(i, opts) }
52
52
  .each(&:evaluate)
53
53
  .each(&:post)
@@ -83,7 +83,7 @@ module Lazylead
83
83
  # The jira comment in markdown format
84
84
  def comment
85
85
  comment = [
86
- "Hi [~#{@issue.reporter.id}],",
86
+ "Hi [~#{reporter}],",
87
87
  "",
88
88
  "The triage accuracy is '{color:#{color}}#{@score}{color}'" \
89
89
  " (~{color:#{color}}#{@accuracy}%{color}), here are the reasons why:",
@@ -133,5 +133,17 @@ module Lazylead
133
133
  def grade(value)
134
134
  (value / 10).floor * 10
135
135
  end
136
+
137
+ # Detect the ticket reporter.
138
+ #
139
+ # If ticket created by some automatic/admin user account then reporter is the first non-system
140
+ # user account who modified the ticket.
141
+ def reporter
142
+ return @issue.reporter.id unless @opts.key? "system-users"
143
+ sys = @opts.slice("system-users", ",")
144
+ return @issue.reporter.id if sys.empty? || sys.none? { |susr| @issue.reporter.id.eql? susr }
145
+ @issue.history
146
+ .find { |h| sys.none? { |susr| susr.eql? h["author"]["key"] } }["author"]["key"]
147
+ end
136
148
  end
137
149
  end
@@ -29,11 +29,12 @@ module Lazylead
29
29
  # Check that ticket has screenshot(s).
30
30
  # The screenshots should
31
31
  # 1. present as attachments
32
- # 2. mentioned in description with !<name>.<extension>|thumbnail! (read more https://bit.ly/3rusNgW)
32
+ # 2. has extension .jpg .jpeg .exif .tiff .tff .bmp .png .svg
33
+ # 3. mentioned in description with !<name>.<extension>|thumbnail! (read more https://bit.ly/3rusNgW)
33
34
  #
34
35
  class Screenshots < Lazylead::Requirement
35
36
  # @param minimum The number of expected screenshots
36
- def initialize(minimum: 2, score: 2, ext: %w[.jpg .jpeg .exif .tiff .tff .bmp .png .svg])
37
+ def initialize(minimum: 1, score: 2, ext: %w[.jpg .jpeg .exif .tiff .tff .bmp .png .svg])
37
38
  super "Screenshots", score, "Description,Attachments"
38
39
  @minimum = minimum
39
40
  @ext = ext
@@ -41,11 +42,19 @@ module Lazylead
41
42
 
42
43
  def passed(issue)
43
44
  return false if issue.attachments.nil? || blank?(issue, "description")
44
- regexps = issue.attachments
45
- .select { |a| @ext.include? File.extname(a.filename) }
46
- .map { |a| /!#{a.filename}\|thumbnail!/ }
47
- return false if regexps.size < @minimum
48
- regexps.all? { |r| issue.description.match? r }
45
+ references = issue.description
46
+ .to_enum(:scan, /!.+!/)
47
+ .map { Regexp.last_match }
48
+ .map(&:to_s)
49
+ return false if references.size < @minimum
50
+ references.all? { |ref| pictures(issue).any? { |file| ref.include? file } }
51
+ end
52
+
53
+ # Detect all pictures in ticket attachments and returns an array with file names.
54
+ def pictures(issue)
55
+ @pictures ||= issue.attachments
56
+ .select { |a| @ext.include? File.extname(a.filename).downcase }
57
+ .map(&:filename)
49
58
  end
50
59
  end
51
60
  end
@@ -23,5 +23,5 @@
23
23
  # OR OTHER DEALINGS IN THE SOFTWARE.
24
24
 
25
25
  module Lazylead
26
- VERSION = "0.8.2"
26
+ VERSION = "0.8.3"
27
27
  end
@@ -23,6 +23,7 @@
23
23
  # OR OTHER DEALINGS IN THE SOFTWARE.
24
24
 
25
25
  require_relative "../../../test"
26
+ require_relative "../../../../lib/lazylead/system/jira"
26
27
  require_relative "../../../../lib/lazylead/task/accuracy/accuracy"
27
28
  require_relative "../../../../lib/lazylead/task/accuracy/affected_build"
28
29
 
@@ -69,5 +70,15 @@ module Lazylead
69
70
  )
70
71
  ).evaluate.comment
71
72
  end
73
+
74
+ test "detect non-system reporter" do
75
+ assert_equal "grussell",
76
+ Score.new(
77
+ NoAuthJira.new("https://jira.spring.io")
78
+ .issues("key=INT-4116", expand: "changelog")
79
+ .first,
80
+ Opts.new("system-users" => "abilan")
81
+ ).reporter
82
+ end
72
83
  end
73
84
  end
@@ -51,13 +51,11 @@ module Lazylead
51
51
  )
52
52
  end
53
53
 
54
- test "issue has only one .png file however minimum 2 are required" do
54
+ test "issue has no .png file however minimum 1 are required" do
55
55
  refute Screenshots.new.passed(
56
56
  OpenStruct.new(
57
- description: "Hi,\n here are snapshots !img1.jpg|thumbnail!\n",
58
- fields: {
59
- "description" => "Hi,\n here are snapshots !img1.jpg|thumbnail!\n"
60
- },
57
+ description: "Hi,\n here are snapshots !img1.zip!\n",
58
+ fields: { "description" => "Hi,\n here are snapshots !img1.zip!\n" },
61
59
  attachments: [
62
60
  OpenStruct.new("filename" => "img1.jpg"),
63
61
  OpenStruct.new("filename" => "img2.jpg")
@@ -80,5 +78,49 @@ module Lazylead
80
78
  )
81
79
  )
82
80
  end
81
+
82
+ test "issue has two .png file in description but three .png in attachments" do
83
+ assert Screenshots.new.passed(
84
+ OpenStruct.new(
85
+ description: "Hi,\n here are snapshots !img1.JPG|thumbnail!\n!img2.jpg|thumbnail!\n",
86
+ fields: {
87
+ "description" => "Hi,\n here are snapshots !img1.JPG|thumbnail!\n!img2.jpg|thumbnail!\n"
88
+ },
89
+ attachments: [
90
+ OpenStruct.new("filename" => "img1.JPG"),
91
+ OpenStruct.new("filename" => "img2.jpg"),
92
+ OpenStruct.new("filename" => "img3.jpg")
93
+ ]
94
+ )
95
+ )
96
+ end
97
+
98
+ test "issue has two .png files with reference in description without thumbnail" do
99
+ assert Screenshots.new.passed(
100
+ OpenStruct.new(
101
+ description: "Hi,\n here are snapshots !img1.jpg!\n!img2.jpg!\n",
102
+ fields: { "description" => "Hi,\n here are snapshots !img1.jpg!\n!img2.jpg!\n" },
103
+ attachments: [
104
+ OpenStruct.new("filename" => "img1.jpg"),
105
+ OpenStruct.new("filename" => "img2.jpg")
106
+ ]
107
+ )
108
+ )
109
+ end
110
+
111
+ test "issue has two .png files with reference in description but absent in attachments" do
112
+ refute Screenshots.new.passed(
113
+ OpenStruct.new(
114
+ description: "Hi,\n here are snapshots !img1.jpg!\n!img2.jpg!\n",
115
+ fields: {
116
+ "description" => "Hi,\n here are snapshots !img1.jpg!\n!img2.jpg!\n"
117
+ },
118
+ attachments: [
119
+ OpenStruct.new("filename" => "img3.jpg"),
120
+ OpenStruct.new("filename" => "img4.jpg")
121
+ ]
122
+ )
123
+ )
124
+ end
83
125
  end
84
126
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lazylead
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yurii Dubinka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-28 00:00:00.000000000 Z
11
+ date: 2021-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -506,28 +506,28 @@ dependencies:
506
506
  requirements:
507
507
  - - '='
508
508
  - !ruby/object:Gem::Version
509
- version: 1.12.0
509
+ version: 1.12.1
510
510
  type: :development
511
511
  prerelease: false
512
512
  version_requirements: !ruby/object:Gem::Requirement
513
513
  requirements:
514
514
  - - '='
515
515
  - !ruby/object:Gem::Version
516
- version: 1.12.0
516
+ version: 1.12.1
517
517
  - !ruby/object:Gem::Dependency
518
518
  name: rubocop-minitest
519
519
  requirement: !ruby/object:Gem::Requirement
520
520
  requirements:
521
521
  - - '='
522
522
  - !ruby/object:Gem::Version
523
- version: 0.11.0
523
+ version: 0.11.1
524
524
  type: :development
525
525
  prerelease: false
526
526
  version_requirements: !ruby/object:Gem::Requirement
527
527
  requirements:
528
528
  - - '='
529
529
  - !ruby/object:Gem::Version
530
- version: 0.11.0
530
+ version: 0.11.1
531
531
  - !ruby/object:Gem::Dependency
532
532
  name: rubocop-performance
533
533
  requirement: !ruby/object:Gem::Requirement
@@ -783,7 +783,7 @@ licenses:
783
783
  - MIT
784
784
  metadata: {}
785
785
  post_install_message: |-
786
- Thanks for installing Lazylead v0.8.2!
786
+ Thanks for installing Lazylead v0.8.3!
787
787
  Read our blog posts: https://lazylead.org
788
788
  Stay in touch with the community in Telegram: https://t.me/lazylead
789
789
  Follow us on Twitter: https://twitter.com/lazylead