watchdoge 0.0.22 → 0.1.0

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: 31cb08ec084f6a87288b884292874e815e92eef470404399230d08d22f8f4b33
4
- data.tar.gz: 10a605d5e1c650c3952fd7402971f138cfc77adae9ea86433cd7d537579c9352
3
+ metadata.gz: 72caecca4e8bfaadd19424e647b0ddc3ff408b7d44b6f50c3941cd15fc2efcf5
4
+ data.tar.gz: df63f75a199c4840f3c5e8b175c264c11210952ec608a7b1397494c33f0a124f
5
5
  SHA512:
6
- metadata.gz: b948cf7d631da31077c429d2b1eb653d15af77087cc2582d863930083f3c679a08c128f4a15c36a39747b34338fc036489e02b696348d30e7977b6546e0aa281
7
- data.tar.gz: b6ea1174d59ee36afd315a8a0de8c3c21976471a36a158101858c73f405ad85b008cee33856fbacd1c4a8d583b2274dd62424fb8c6d116d0bd48c398b0f24f24
6
+ metadata.gz: 2da1305c69374b490a4f7e06a8055e4994bfd9651263aba4e764eb9454027ce318673c531e031a2f6858623981d3e8cc059937fa8e4fa76616766017a86c2266
7
+ data.tar.gz: f53c2328b8479be6dd9e0379dc6deb47d2b40b7699970eaa62b5fe198929771bcefbb95322c2951e165e84c301c90daff5be8302e9290b5744492071062db294
@@ -2,6 +2,24 @@ require 'watir'
2
2
 
3
3
  module WatchDoge
4
4
  class Configuration
5
+ class Hooks
6
+ attr_accessor :sign_in
7
+ attr_accessor :sign_out
8
+ attr_accessor :before_regression
9
+ attr_accessor :after_regression
10
+ attr_accessor :before_scenario
11
+ attr_accessor :after_scenario
12
+
13
+ def initialize
14
+ @sign_in = -> (worker, resource) {}
15
+ @sign_out = -> (worker, resource) {}
16
+ @before_regression = -> {}
17
+ @after_regression = -> {}
18
+ @before_scenario = -> {}
19
+ @after_scenario = -> {}
20
+ end
21
+ end
22
+
5
23
  attr_accessor :base_dir
6
24
 
7
25
  attr_accessor :web_drivers_dir
@@ -12,9 +30,13 @@ module WatchDoge
12
30
 
13
31
  attr_accessor :notifications
14
32
 
15
- attr_accessor :compare_host
16
- attr_accessor :compare_dir
17
- attr_accessor :user_authentication
33
+ attr_accessor :host
34
+ attr_accessor :regression_dir
35
+
36
+ attr_accessor :hooks
37
+
38
+ attr_accessor :chrome_version
39
+ attr_accessor :firefox_version
18
40
 
19
41
  def initialize
20
42
  @base_dir = Dir.pwd
@@ -44,21 +66,19 @@ module WatchDoge
44
66
  # }
45
67
  }
46
68
 
47
- @compare_host = ''
69
+ @host = ''
48
70
 
49
- @compare_dir =
71
+ @regression_dir =
50
72
  if defined?(Rails)
51
73
  @base_dir + "/test/watchdoge"
52
74
  else
53
75
  @base_dir + "/watchdoge"
54
76
  end
55
77
 
56
- @user_authentication = {
57
- sign_in: -> (worker, resource) {
58
- },
59
- sign_out: -> (worker, resource) {
60
- }
61
- }
78
+ @hooks = WatchDoge::Configuration::Hooks.new
79
+
80
+ @chrome_version = nil
81
+ @firefox_version = nil
62
82
  end
63
83
  end
64
84
  end
@@ -2,12 +2,39 @@ require 'net_http_ssl_fix'
2
2
  require 'webdrivers'
3
3
 
4
4
  module WatchDoge
5
- class << self
6
- def install_webdriver
7
- Webdrivers.install_dir = configuration.web_drivers_dir
5
+ class InstallManager
6
+ attr_reader :driver
7
+ attr_reader :install_version
8
+ attr_reader :install_path
8
9
 
9
- Webdrivers::Geckodriver.update
10
- Webdrivers::Chromedriver.update
10
+ def initialize browser
11
+ @driver =
12
+ case browser
13
+ when :chrome
14
+ Webdrivers::Chromedriver
15
+ when :firefox
16
+ Webdrivers::Geckodriver
17
+ end
18
+
19
+ @install_version = (eval "WatchDoge.configuration.#{browser}_version") || @driver.latest_version.to_s
20
+
21
+ @install_path = "#{WatchDoge.configuration.web_drivers_dir}/#{browser}/#{@install_version}/"
22
+ Webdrivers.install_dir = @install_path
23
+
24
+ @driver.required_version = @install_version
25
+
26
+ @driver.update
27
+
28
+ klass = "Selenium::WebDriver::#{browser.to_s.split('_').collect(&:capitalize).join}::Service".constantize
29
+ binary =
30
+ case browser
31
+ when :chrome
32
+ "chromedriver"
33
+ when :firefox
34
+ "geckodriver"
35
+ end
36
+
37
+ klass.driver_path = "#{@install_path}/#{binary}"
11
38
  end
12
39
  end
13
40
  end
@@ -18,12 +18,8 @@ module WatchDoge
18
18
  private
19
19
 
20
20
  def get_source_class source_sym
21
- case source_sym
22
- when :slack
23
- WatchDoge::Notification::Slack
24
- when :matter_most
25
- WatchDoge::Notification::MatterMost
26
- end
21
+ klass = source_sym.to_s.split('_').collect(&:capitalize).join
22
+ "WatchDoge::Notification::#{klass}".constantize
27
23
  end
28
24
  end
29
25
  end
@@ -3,11 +3,12 @@ module WatchDoge
3
3
  namespace 'watchdoge'
4
4
  argument :secenario
5
5
 
6
+
6
7
  def create_watchdoge_file
7
8
  configuration = WatchDoge.configuration
8
- create_file "#{configuration.cookie_pool}/.placeholder"
9
+ empty_directory "#{configuration.cookie_pool}"
9
10
 
10
- create_file "#{configuration.compare_dir}/scenarios/#{secenario}.rb", <<~DSL
11
+ create_file "#{configuration.regression_dir}/scenarios/#{secenario}.rb", <<~DSL
11
12
  # use :chrome
12
13
 
13
14
  # compare 'some url'
@@ -19,7 +20,7 @@ module WatchDoge
19
20
  #
20
21
  DSL
21
22
 
22
- create_file "#{configuration.compare_dir}/reference/#{secenario}/.placeholder"
23
+ empty_directory "#{configuration.regression_dir}/reference/#{secenario}"
23
24
  end
24
25
  end
25
26
  end
@@ -10,11 +10,11 @@ module WatchDoge
10
10
  end
11
11
  desc "generating reference images"
12
12
  task :make_reference => :environment do
13
- WatchDoge::Compare::Manager.make_reference
13
+ WatchDoge::Regression::Manager.make_reference
14
14
  end
15
15
  desc "scrap screenshots and compare with reference images"
16
- task :compare => :environment do
17
- WatchDoge::Compare::Manager.compare_reference
16
+ task :regression => :environment do
17
+ WatchDoge::Regression::Manager.regression
18
18
  end
19
19
  end
20
20
  end
@@ -1,5 +1,5 @@
1
1
  module WatchDoge
2
- module Compare
2
+ module Regression
3
3
  module DSL
4
4
  def use browser
5
5
  puts "[use] browser #{browser}"
@@ -8,11 +8,15 @@ module WatchDoge
8
8
  end
9
9
 
10
10
  def sign_in_as resoruce
11
+
11
12
  puts "[sign_in_as] #{resoruce}"
12
- sign_in_proc.call(@worker, resoruce)
13
+ WatchDoge.hooks.sign_in.call(@worker, resoruce)
14
+
15
+ return unless block_given?
16
+
13
17
  yield(@worker)
14
18
  puts "sign_out #{resoruce}"
15
- sign_out_proc.call(@worker, resoruce)
19
+ WatchDoge.hooks.sign_out.call(@worker, resoruce)
16
20
  end
17
21
 
18
22
  def with_viewport **kwargs
@@ -22,7 +26,7 @@ module WatchDoge
22
26
  end
23
27
 
24
28
  def compare path, **kwargs
25
- path = URI.join(WatchDoge.configuration.compare_host, path).to_s
29
+ path = URI.join(WatchDoge.configuration.host, path).to_s
26
30
 
27
31
  @reference_file_name =
28
32
  if kwargs[:with]
@@ -50,7 +54,7 @@ module WatchDoge
50
54
  end
51
55
 
52
56
  @worker.resize_by_document(@view_port) do
53
- @compare_proc.call(@worker)
57
+ @regression_proc.call(@worker)
54
58
  end
55
59
 
56
60
  @teardown_proc.call if @teardown_proc
@@ -1,7 +1,7 @@
1
1
  require 'digest'
2
2
 
3
3
  module WatchDoge
4
- module Compare
4
+ module Regression
5
5
  module Utils
6
6
  def load_png input
7
7
  raise 'Invalid Input' unless input.respond_to? :length
@@ -18,16 +18,16 @@ module WatchDoge
18
18
  end
19
19
  end
20
20
 
21
- def compare_dir
22
- WatchDoge.configuration.compare_dir
21
+ def regression_dir
22
+ WatchDoge.configuration.regression_dir
23
23
  end
24
24
 
25
25
  def scenarios_dir
26
- "#{compare_dir}/scenarios"
26
+ "#{regression_dir}/scenarios"
27
27
  end
28
28
 
29
29
  def reference_dir
30
- "#{compare_dir}/reference"
30
+ "#{regression_dir}/reference"
31
31
  end
32
32
  end
33
33
  end
@@ -1,43 +1,49 @@
1
1
  module WatchDoge
2
- module Compare
3
- Dir["#{File.expand_path File.dirname(__FILE__)}/compare/*.rb"].each {|file| require file }
2
+ module Regression
3
+ Dir["#{File.expand_path File.dirname(__FILE__)}/regression/*.rb"].each {|file| require file }
4
4
 
5
5
  class Manager
6
- extend WatchDoge::Compare::Utils
7
- include WatchDoge::Compare::DSL
6
+ extend WatchDoge::Regression::Utils
7
+ include WatchDoge::Regression::DSL
8
8
 
9
9
  class << self
10
- def compare_reference
11
- @@compare_flag = :compare_reference
12
- run_all_scenarios
10
+ def regression
11
+ run_all_scenarios :regression
13
12
  end
14
13
  def make_reference
15
- @@compare_flag = :make_reference
16
- run_all_scenarios
14
+ run_all_scenarios :make_reference
17
15
  end
18
16
 
19
17
  private
20
18
 
21
- def run_all_scenarios
19
+ def run_all_scenarios regression_flag
20
+ WatchDoge.hooks.before_regression.call
21
+
22
22
  Dir["#{scenarios_dir}/*"].each do |scenario_path|
23
- mgr = self.new scenario_path
23
+ WatchDoge.hooks.before_scenario.call
24
+
25
+ mgr = self.new scenario_path, regression_flag: regression_flag
24
26
  mgr.eval_scenario
27
+
28
+ WatchDoge.hooks.after_scenario.call
25
29
  end
30
+
31
+ WatchDoge.hooks.after_regression.call
26
32
  end
27
33
  end
28
34
 
29
- def initialize scenario_path
35
+ def initialize scenario_path, regression_flag:
30
36
  @scenario_path = scenario_path
31
- @scenario_name = File.basename scenario_path, '.rb'
37
+ @scenario_name = File.basename @scenario_path, '.rb'
32
38
 
33
- case @@compare_flag
39
+ case regression_flag
34
40
  when :make_reference
35
- @compare_proc = -> (worker) {
41
+ @regression_proc = -> (worker) {
36
42
  puts " -> make reference images on worker #{worker}"
37
43
  worker.screenshot.save reference_image
38
44
  }
39
- when :compare_reference
40
- @compare_proc = -> (worker) {
45
+ when :regression
46
+ @regression_proc = -> (worker) {
41
47
  puts " -> compare reference images on worker #{worker}"
42
48
  reference_image = self.class.load_png self.reference_image
43
49
  cycle_image = self.class.load_png worker.screenshot.png
@@ -68,13 +74,6 @@ module WatchDoge
68
74
  puts ""
69
75
  end
70
76
 
71
- def sign_in_proc
72
- WatchDoge.configuration.user_authentication[:sign_in]
73
- end
74
- def sign_out_proc
75
- WatchDoge.configuration.user_authentication[:sign_out]
76
- end
77
-
78
77
  def reference_image
79
78
  self.class.reference_dir + "/#{@scenario_name}/#{@reference_file_name}.png"
80
79
  end
@@ -1,3 +1,3 @@
1
1
  module WatchDoge
2
- Version = '0.0.22'
2
+ Version = '0.1.0'
3
3
  end
@@ -20,6 +20,7 @@ module WatchDoge
20
20
  @landed_page = nil
21
21
 
22
22
  # flag that cookie is loaded
23
+ @cookie_autosafe = false
23
24
  @cookie_loaded = false
24
25
 
25
26
  @width = default_opt[:width]
@@ -85,8 +86,6 @@ module WatchDoge
85
86
  private
86
87
  # callbacks before/after init
87
88
  def _before_initialize
88
- Selenium::WebDriver::Firefox::Service.driver_path = WatchDoge.configuration.web_drivers_dir + "/geckodriver"
89
- Selenium::WebDriver::Chrome::Service.driver_path = WatchDoge.configuration.web_drivers_dir + "/chromedriver"
90
89
  @http = Selenium::WebDriver::Remote::Http::Default.new
91
90
  @browser = WatchDoge.configuration.browser
92
91
  end
@@ -119,7 +118,9 @@ module WatchDoge
119
118
  @cookie_loaded
120
119
  end
121
120
  def _save_cookie
122
- @core.cookies.save WatchDoge::CookiePool.source(@uuid, @landed_page)
121
+ if @cookie_autosafe
122
+ @core.cookies.save WatchDoge::CookiePool.source(@uuid, @landed_page)
123
+ end
123
124
  end
124
125
  def _load_cookie
125
126
  source = WatchDoge::CookiePool.source(@uuid, @landed_page)
data/lib/watchdoge.rb CHANGED
@@ -6,7 +6,7 @@ require 'watchdoge/cookie_pool'
6
6
  require 'watchdoge/worker'
7
7
  require 'watchdoge/notification'
8
8
  require 'watchdoge/image_diff'
9
- require 'watchdoge/compare'
9
+ require 'watchdoge/regression'
10
10
  require 'watchdoge/rails/railtie' if defined?(Rails)
11
11
  require 'watchdoge/rails/generator' if defined?(Rails)
12
12
 
@@ -16,6 +16,10 @@ module WatchDoge
16
16
  configuration.base_dir
17
17
  end
18
18
 
19
+ def hooks
20
+ configuration.hooks
21
+ end
22
+
19
23
  def configure(&block)
20
24
  yield(configuration)
21
25
  configuration
@@ -25,7 +29,7 @@ module WatchDoge
25
29
  @_configuration ||= Configuration.new
26
30
  end
27
31
 
28
- def load_configuration
32
+ def initialize!
29
33
  path = ENV['WATCHDOGE_CONFIG'] ||
30
34
  if defined?(Rails)
31
35
  "#{Dir.pwd}/config/watchdoge.rb"
@@ -37,5 +41,3 @@ module WatchDoge
37
41
  end
38
42
  end
39
43
  end
40
-
41
- WatchDoge.load_configuration
data/watchdoge.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'watchdoge'
3
- s.version = '0.0.22'
3
+ s.version = '0.1.0'
4
4
  s.date = '2019-07-22'
5
5
  s.summary = "dogi"
6
6
  s.description = "A collection of web test tools"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watchdoge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.22
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shen Lee
@@ -112,9 +112,6 @@ extra_rdoc_files: []
112
112
  files:
113
113
  - ".gitignore"
114
114
  - lib/watchdoge.rb
115
- - lib/watchdoge/compare.rb
116
- - lib/watchdoge/compare/dsl.rb
117
- - lib/watchdoge/compare/utils.rb
118
115
  - lib/watchdoge/configuration.rb
119
116
  - lib/watchdoge/cookie_pool.rb
120
117
  - lib/watchdoge/image_diff.rb
@@ -124,6 +121,9 @@ files:
124
121
  - lib/watchdoge/notification/slack.rb
125
122
  - lib/watchdoge/rails/generator.rb
126
123
  - lib/watchdoge/rails/railtie.rb
124
+ - lib/watchdoge/regression.rb
125
+ - lib/watchdoge/regression/dsl.rb
126
+ - lib/watchdoge/regression/utils.rb
127
127
  - lib/watchdoge/version.rb
128
128
  - lib/watchdoge/worker.rb
129
129
  - watchdoge.gemspec