lazylead 0.4.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.docs/accuracy.md +4 -4
  3. data/.docs/duedate_expired.md +3 -3
  4. data/.docs/propagate_down.md +3 -3
  5. data/.gitattributes +1 -0
  6. data/.github/dependabot.yml +6 -0
  7. data/Rakefile +2 -0
  8. data/bin/lazylead +1 -1
  9. data/lazylead.gemspec +3 -2
  10. data/lib/lazylead/exchange.rb +15 -9
  11. data/lib/lazylead/model.rb +37 -3
  12. data/lib/lazylead/opts.rb +13 -1
  13. data/lib/lazylead/postman.rb +1 -2
  14. data/lib/lazylead/schedule.rb +16 -15
  15. data/lib/lazylead/system/jira.rb +43 -0
  16. data/lib/lazylead/task/accuracy/accuracy.rb +13 -8
  17. data/lib/lazylead/task/accuracy/affected_build.rb +2 -6
  18. data/lib/lazylead/task/accuracy/attachment.rb +44 -0
  19. data/lib/lazylead/task/accuracy/environment.rb +39 -0
  20. data/lib/lazylead/task/accuracy/logs.rb +40 -0
  21. data/lib/lazylead/task/accuracy/records.rb +45 -0
  22. data/lib/lazylead/task/accuracy/requirement.rb +9 -0
  23. data/lib/lazylead/task/accuracy/servers.rb +50 -0
  24. data/lib/lazylead/task/accuracy/stacktrace.rb +63 -0
  25. data/lib/lazylead/task/accuracy/testcase.rb +75 -0
  26. data/lib/lazylead/task/accuracy/wiki.rb +41 -0
  27. data/lib/lazylead/task/echo.rb +18 -0
  28. data/lib/lazylead/task/fix_version.rb +9 -2
  29. data/lib/lazylead/task/touch.rb +28 -11
  30. data/lib/lazylead/version.rb +1 -1
  31. data/lib/messages/svn_log.erb +117 -0
  32. data/lib/messages/svn_touch.erb +1 -1
  33. data/license.txt +1 -1
  34. data/readme.md +5 -5
  35. data/test/lazylead/cli/app_test.rb +11 -11
  36. data/test/lazylead/opts_test.rb +4 -0
  37. data/test/lazylead/system/jira_test.rb +38 -0
  38. data/test/lazylead/task/accuracy/accuracy_test.rb +1 -1
  39. data/test/lazylead/task/accuracy/affected_build_test.rb +2 -2
  40. data/test/lazylead/task/accuracy/attachment_test.rb +50 -0
  41. data/test/lazylead/task/accuracy/environment_test.rb +42 -0
  42. data/test/lazylead/task/accuracy/logs_test.rb +78 -0
  43. data/test/lazylead/task/accuracy/records_test.rb +60 -0
  44. data/test/lazylead/task/accuracy/score_test.rb +46 -0
  45. data/test/lazylead/task/accuracy/servers_test.rb +66 -0
  46. data/test/lazylead/task/accuracy/stacktrace_test.rb +113 -0
  47. data/test/lazylead/task/accuracy/testcase_test.rb +205 -0
  48. data/test/lazylead/task/accuracy/wiki_test.rb +40 -0
  49. data/test/lazylead/task/touch_test.rb +48 -23
  50. data/test/test.rb +25 -0
  51. data/upgrades/sqlite/001-install-main-lazylead-tables.sql +1 -5
  52. data/upgrades/sqlite/999.testdata.sql +12 -17
  53. metadata +45 -4
  54. data/.travis.yml +0 -16
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The MIT License
4
+ #
5
+ # Copyright (c) 2019-2020 Yurii Dubinka
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"),
9
+ # to deal in the Software without restriction, including without limitation
10
+ # the rights to use, copy, modify, merge, publish, distribute, sublicense,
11
+ # and/or sell copies of the Software, and to permit persons to whom
12
+ # the Software is furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included
15
+ # in all copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22
+ # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
23
+ # OR OTHER DEALINGS IN THE SOFTWARE.
24
+
25
+ require_relative "../../../test"
26
+ require_relative "../../../../lib/lazylead/task/accuracy/wiki"
27
+
28
+ module Lazylead
29
+ class WikiTest < Lazylead::Test
30
+ test "wiki reference is present" do
31
+ assert Wiki.new.passed(
32
+ OpenStruct.new(
33
+ remote_links: [
34
+ OpenStruct.new(attrs: { "relationship" => "Wiki Page" })
35
+ ]
36
+ )
37
+ )
38
+ end
39
+ end
40
+ end
@@ -25,39 +25,64 @@
25
25
  require "mail"
26
26
  require_relative "../../test"
27
27
  require_relative "../../../lib/lazylead/smtp"
28
-
28
+ require_relative "../../../lib/lazylead/opts"
29
29
  require_relative "../../../lib/lazylead/postman"
30
30
  require_relative "../../../lib/lazylead/task/touch"
31
31
 
32
32
  module Lazylead
33
33
  class SvnTouchTest < Lazylead::Test
34
- # @todo #/DEV Find stable svn repo which can be used for stable test, for
35
- # now only floating repo used for testing locally. Also, create a new
36
- # method "ping" which can be used during tests like
37
- # skip "No connection available to svn repo" unless ping("https://svn.com")
38
34
  test "important files changed in svn repo" do
39
- skip "No svn credentials provided" unless env? "svn_url",
40
- "svn_user",
41
- "svn_password"
35
+ skip "No svn credentials provided" unless env? "svn_touch_user",
36
+ "svn_touch_password"
37
+ skip "No internet connection to riouxsvn.com" unless ping? "riouxsvn.com"
42
38
  Lazylead::Smtp.new.enable
43
39
  Task::SvnTouch.new.run(
44
- nil,
40
+ [],
41
+ Postman.new,
42
+ Opts.new(
43
+ "svn_url" => "https://svn.riouxsvn.com/touch4ll",
44
+ "svn_user" => ENV["svn_touch_user"],
45
+ "svn_password" => ENV["svn_touch_password"],
46
+ "commit_url" => "https://view.commit.com?rev=",
47
+ "user" => "https://user.com?id=",
48
+ "to" => "lead@fake.com",
49
+ "from" => "ll@fake.com",
50
+ "now" => "2020-08-17T00:00:00+01:00",
51
+ "period" => "864000",
52
+ "files" => "189.md,absent.txt",
53
+ "subject" => "[SVN] Important files have been changed!",
54
+ "template" => "lib/messages/svn_touch.erb"
55
+ )
56
+ )
57
+ assert_email "[SVN] Important files have been changed!",
58
+ %w[3 dgroup /189.md Add\ description\ for\ 189\ issue]
59
+ end
60
+ end
61
+
62
+ class SvnLogTest < Lazylead::Test
63
+ test "changes since revision" do
64
+ skip "No svn credentials provided" unless env? "svn_log_user",
65
+ "svn_log_password"
66
+ skip "No internet connection to riouxsvn.com" unless ping? "riouxsvn.com"
67
+ Lazylead::Smtp.new.enable
68
+ Task::SvnLog.new.run(
69
+ [],
45
70
  Postman.new,
46
- "svn_url" => ENV["svn_url"],
47
- "svn_user" => ENV["svn_user"],
48
- "svn_password" => ENV["svn_password"],
49
- "commit_url" => "https://view.commit.com?rev=",
50
- "user" => "https://user.com?id=",
51
- "to" => "lead@fake.com",
52
- "from" => "ll@fake.com",
53
- "now" => "2020-07-12T17:24:45+01:00",
54
- "period" => "864000",
55
- "files" => "checkstyle.xml,checkstyle_suppressions.xml",
56
- "subject" => "[SVN] Static analysis configuration has been changed!",
57
- "template" => "lib/messages/svn_touch.erb"
71
+ Opts.new(
72
+ "from" => "svnlog@test.com",
73
+ "svn_url" => "https://svn.riouxsvn.com/touch4ll",
74
+ "svn_user" => ENV["svn_log_user"],
75
+ "svn_password" => ENV["svn_log_password"],
76
+ "commit_url" => "https://view.commit.com?rev=",
77
+ "user" => "https://user.com?id=",
78
+ "to" => "lead@fake.com",
79
+ "since_rev" => "1",
80
+ "subject" => "[SVN] Changed since rev1",
81
+ "template" => "lib/messages/svn_log.erb"
82
+ )
58
83
  )
59
- assert_email "[SVN] Static analysis configuration has been changed!",
60
- %w[revision user ticket]
84
+ assert_email_line "[SVN] Changed since rev1",
85
+ %w[r2 by dgroup at 2020-08-16]
61
86
  end
62
87
  end
63
88
  end
@@ -110,5 +110,30 @@ module Lazylead
110
110
  .first
111
111
  .body.parts.first.body.raw_source
112
112
  end
113
+
114
+ # Assert that email sent using 'mail' gem in test mode
115
+ # has expected subject and line with expected words
116
+ # @todo #/DEV Gem 'mail' sends email as a single line, find a way how to add
117
+ # symbol '\n' to each line for email during unit testing.
118
+ def assert_email_line(subject, words)
119
+ words = [words] unless words.respond_to? :each
120
+ mail = Mail::TestMailer.deliveries
121
+ .filter { |m| m.subject.eql? subject }
122
+ .first
123
+ .body.parts.first.body.raw_source
124
+ .split("\n")
125
+ .reject(&:blank?)
126
+ assert mail.any? { |line| words.all? { |w| line.include? w } },
127
+ "Words '#{words.join(',')}' wasn't found in '#{mail.join('\n')}'"
128
+ end
129
+
130
+ # Ping remote host
131
+ # https://github.com/eitoball/net-ping
132
+ # https://stackoverflow.com/a/35508446/6916890
133
+ # https://rubygems.org/gems/net-ping/versions/2.0.8
134
+ def ping?(host)
135
+ require "net/ping"
136
+ Net::Ping::External.new(host).ping?
137
+ end
113
138
  end
114
139
  end
@@ -46,11 +46,7 @@ create table if not exists tasks
46
46
  (
47
47
  id integer primary key,
48
48
  name text not null,
49
- cron text not null,
50
- -- @todo #/DEV task.cron - add support for non-cron based schedule like at, once, every.
51
- -- More details:
52
- -- https://github.com/jmettraux/rufus-scheduler
53
- -- https://stackoverflow.com/questions/46691666/using-constantize-to-invoke-both-a-class-and-method-from-separate-strings
49
+ schedule text not null,
54
50
  system integer not null,
55
51
  action text not null,
56
52
  team_id integer not null,
@@ -22,24 +22,19 @@
22
22
  * OR OTHER DEALINGS IN THE SOFTWARE.
23
23
  */
24
24
  insert into systems(id, properties)
25
- values (1,
26
- '{"type":"Lazylead::Jira", "username":"", "password":"", "site":"https://jira.spring.io", "context_path":""}'),
27
- (2,
28
- '{"type":"Lazylead::Jira", "username":"${jsi_usr}", "password":"${jsi_psw}", "site":"https://jira.spring.io", "context_path":""}');
25
+ values (1,'{"type":"Lazylead::Jira", "username":"", "password":"", "site":"https://jira.spring.io", "context_path":""}'),
26
+ (2,'{"type":"Lazylead::Jira", "username":"${jsi_usr}", "password":"${jsi_psw}", "site":"https://jira.spring.io", "context_path":""}');
29
27
  insert into teams(id, name, properties)
30
28
  values (1, 'BA squad', '{"from":"basquad@fake.com", "usr":"${usr}"}'),
31
29
  (154, 'Team for issue #154', '{"cc":"lead@fake.com"}');
32
- insert into tasks(name, cron, enabled, id, system, team_id, action, properties)
33
- values ('echo', '* * * * *', 'false', 1, 1, 1, 'Lazylead::Task::Echo', '{}'),
34
- ('expired due date', '* * * * *', 'false', 2, 1, 1,
35
- 'Lazylead::Task::Notification',
36
- '{"sql":"filter=100500","subject":"[DD] PDTN!","template":"lib/messages/due_date_expired.erb"}'),
37
- ('task with cc', '* * * * *', 'false', 3, 1, 1, 'Lazylead::Task::Echo',
38
- '{"cc":"leelakenny@mail.com,maciecrane@mail.com"}'),
39
- ('task', '* * * * *', 'false', 4, 2, 1, 'Lazylead::Task::Echo', '{}'),
30
+ insert into tasks(name, schedule, enabled, id, system, team_id, action, properties)
31
+ values ('echo', 'cron:* * * * *', 'false', 1, 1, 1, 'Lazylead::Task::Echo', '{}'),
32
+ ('expired due date', 'cron:* * * * *', 'false', 2, 1, 1,'Lazylead::Task::Notification','{"sql":"filter=100500","subject":"[DD] PDTN!","template":"lib/messages/due_date_expired.erb"}'),
33
+ ('task with cc', 'cron:* * * * *', 'false', 3, 1, 1, 'Lazylead::Task::Echo','{"cc":"leelakenny@mail.com,maciecrane@mail.com"}'),
34
+ ('task', 'cron:* * * * *', 'false', 4, 2, 1, 'Lazylead::Task::Echo', '{}'),
40
35
  ('pman', '', '', 5, 2, 1, '', '{"postman":"Lazylead::Postman"}'),
41
- ('issue 154', '* * * * *', 'false', 154, 1, 154, 'Lazylead::Task::AssigneeAlert', '{}'),
42
- ('task with complex cc', '* * * * *', 'false', 165, 1, 1, 'Lazylead::Task::Echo',
43
- '{"cc":{"type":"Lazylead::PredefinedCC","opts": {"jvm":"tom@fake.com","jdbc":"mike@fake.com"}}}'),
44
- ('issue 171', '* * * * *', 'false', 171, 1, 1, 'Lazylead::Task::Echo', '{"envkey":"${key171}"}'),
45
- ('issue 195', '* * * * *', 'false', 195, 1, 1, 'Lazylead::Task::Accuracy', '{"key":"value"}');
36
+ ('issue 154', '', 'false', 154, 1, 154, 'Lazylead::Task::AssigneeAlert', '{}'),
37
+ ('task with complex cc', '', 'false', 165, 1, 1, 'Lazylead::Task::Echo','{"cc":{"type":"Lazylead::PredefinedCC","opts": {"jvm":"tom@fake.com","jdbc":"mike@fake.com"}}}'),
38
+ ('issue 171', '', 'false', 171, 1, 1, 'Lazylead::Task::Echo', '{"envkey":"${key171}"}'),
39
+ ('issue 195', '', 'false', 195, 1, 1, 'Lazylead::Task::Accuracy', '{"key":"value"}'),
40
+ ('issue 130', 'in:0.001s', 'true', 130, 1, 1, 'Lazylead::Task::EchoIO', '{}');
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.4.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yurii Dubinka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-13 00:00:00.000000000 Z
11
+ date: 2020-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -388,6 +388,20 @@ dependencies:
388
388
  - - '='
389
389
  - !ruby/object:Gem::Version
390
390
  version: 1.3.6
391
+ - !ruby/object:Gem::Dependency
392
+ name: net-ping
393
+ requirement: !ruby/object:Gem::Requirement
394
+ requirements:
395
+ - - '='
396
+ - !ruby/object:Gem::Version
397
+ version: 2.0.8
398
+ type: :development
399
+ prerelease: false
400
+ version_requirements: !ruby/object:Gem::Requirement
401
+ requirements:
402
+ - - '='
403
+ - !ruby/object:Gem::Version
404
+ version: 2.0.8
391
405
  - !ruby/object:Gem::Dependency
392
406
  name: rake
393
407
  requirement: !ruby/object:Gem::Requirement
@@ -553,6 +567,7 @@ files:
553
567
  - ".github/ISSUE_TEMPLATE/bug_report.md"
554
568
  - ".github/ISSUE_TEMPLATE/feature_request.md"
555
569
  - ".github/PULL_REQUEST_TEMPLATE.md"
570
+ - ".github/dependabot.yml"
556
571
  - ".github/tasks.yml"
557
572
  - ".github/trello.md"
558
573
  - ".gitignore"
@@ -561,7 +576,6 @@ files:
561
576
  - ".ruby-version"
562
577
  - ".rultor.yml"
563
578
  - ".simplecov"
564
- - ".travis.yml"
565
579
  - CNAME
566
580
  - Gemfile
567
581
  - Guardfile
@@ -592,7 +606,15 @@ files:
592
606
  - lib/lazylead/system/synced.rb
593
607
  - lib/lazylead/task/accuracy/accuracy.rb
594
608
  - lib/lazylead/task/accuracy/affected_build.rb
609
+ - lib/lazylead/task/accuracy/attachment.rb
610
+ - lib/lazylead/task/accuracy/environment.rb
611
+ - lib/lazylead/task/accuracy/logs.rb
612
+ - lib/lazylead/task/accuracy/records.rb
595
613
  - lib/lazylead/task/accuracy/requirement.rb
614
+ - lib/lazylead/task/accuracy/servers.rb
615
+ - lib/lazylead/task/accuracy/stacktrace.rb
616
+ - lib/lazylead/task/accuracy/testcase.rb
617
+ - lib/lazylead/task/accuracy/wiki.rb
596
618
  - lib/lazylead/task/alert.rb
597
619
  - lib/lazylead/task/confluence_ref.rb
598
620
  - lib/lazylead/task/echo.rb
@@ -607,6 +629,7 @@ files:
607
629
  - lib/messages/illegal_fixversion_change.erb
608
630
  - lib/messages/missing_comment.erb
609
631
  - lib/messages/savepoint.erb
632
+ - lib/messages/svn_log.erb
610
633
  - lib/messages/svn_touch.erb
611
634
  - license.txt
612
635
  - readme.md
@@ -624,6 +647,15 @@ files:
624
647
  - test/lazylead/system/jira_test.rb
625
648
  - test/lazylead/task/accuracy/accuracy_test.rb
626
649
  - test/lazylead/task/accuracy/affected_build_test.rb
650
+ - test/lazylead/task/accuracy/attachment_test.rb
651
+ - test/lazylead/task/accuracy/environment_test.rb
652
+ - test/lazylead/task/accuracy/logs_test.rb
653
+ - test/lazylead/task/accuracy/records_test.rb
654
+ - test/lazylead/task/accuracy/score_test.rb
655
+ - test/lazylead/task/accuracy/servers_test.rb
656
+ - test/lazylead/task/accuracy/stacktrace_test.rb
657
+ - test/lazylead/task/accuracy/testcase_test.rb
658
+ - test/lazylead/task/accuracy/wiki_test.rb
627
659
  - test/lazylead/task/assignee_alert_test.rb
628
660
  - test/lazylead/task/confluence_ref_test.rb
629
661
  - test/lazylead/task/duedate_test.rb
@@ -643,7 +675,7 @@ licenses:
643
675
  - MIT
644
676
  metadata: {}
645
677
  post_install_message: |-
646
- Thanks for installing Lazylead v0.4.0!
678
+ Thanks for installing Lazylead v0.5.1!
647
679
  Read our blog posts: https://lazylead.org
648
680
  Stay in touch with the community in Telegram: https://t.me/lazylead
649
681
  Follow us on Twitter: https://twitter.com/lazylead
@@ -682,6 +714,15 @@ test_files:
682
714
  - test/lazylead/system/jira_test.rb
683
715
  - test/lazylead/task/accuracy/accuracy_test.rb
684
716
  - test/lazylead/task/accuracy/affected_build_test.rb
717
+ - test/lazylead/task/accuracy/attachment_test.rb
718
+ - test/lazylead/task/accuracy/environment_test.rb
719
+ - test/lazylead/task/accuracy/logs_test.rb
720
+ - test/lazylead/task/accuracy/records_test.rb
721
+ - test/lazylead/task/accuracy/score_test.rb
722
+ - test/lazylead/task/accuracy/servers_test.rb
723
+ - test/lazylead/task/accuracy/stacktrace_test.rb
724
+ - test/lazylead/task/accuracy/testcase_test.rb
725
+ - test/lazylead/task/accuracy/wiki_test.rb
685
726
  - test/lazylead/task/assignee_alert_test.rb
686
727
  - test/lazylead/task/confluence_ref_test.rb
687
728
  - test/lazylead/task/duedate_test.rb
@@ -1,16 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.6.5
4
- cache: bundler
5
- branches:
6
- only:
7
- - master
8
- install:
9
- - travis_retry bundle update
10
- - gem install pdd -v 0.20.5
11
- script:
12
- - pdd -f /dev/null
13
- - export RUBYOPT="-W0"
14
- - rake --quiet
15
- after_success:
16
- - "bash <(curl -s https://codecov.io/bash)"