watchdoge 0.0.22 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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