quintocumber 1.1.1 → 1.1.2

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
  SHA1:
3
- metadata.gz: 8bdd9770abd8fa9d237735d7cc8310b1b3d0bb60
4
- data.tar.gz: c09fe2e3b379c7a71d9210b276c8dd19f73b43c7
3
+ metadata.gz: 380dd9838bd05ca966fc0e23ee8f76fc4211596a
4
+ data.tar.gz: 6ebd05e6b6ba66fe301358330c585fa5e0a466ef
5
5
  SHA512:
6
- metadata.gz: 46cb8b9f7f6b73b74fc3e11283bf882fef82acc2b8a4e59c80ad1fc23a0b36831eb36b7f40d45cfafeb2ec7694c7ceed62f96bee77697325885a80dc12936d91
7
- data.tar.gz: 4d1a399538348d3297194a1f7a37e2d16d3799c187b0c58bc00ad662d4b9e986fc08e5d8e52862e5a4500b6d5363b3d20a19ff591856af95c2f9414b4c1b3318
6
+ metadata.gz: d116b54826a0144fcf8b9d491b09ab2e7d09903a89ee928429d6b01e3ea8a5a23938dea2fff03d293fc26bf3077cb6b1658b7e4929cc4dddc4bf28cfc74242fa
7
+ data.tar.gz: 25a4270942f7f6a98bdfcd459da73c7dc18472ec0785a4f58081789859ffa23c178bf2885f30d91b31a0c0af887f24e69361cf7f382dc31f3a7620e0fbbc96c7
data/.gitignore CHANGED
@@ -3,3 +3,5 @@ tmp/
3
3
  Gemfile.lock
4
4
  quintocumber-*.gem
5
5
  pkg/
6
+ coverage
7
+ .vscode/
data/.rubocop.yml ADDED
@@ -0,0 +1,7 @@
1
+ AllCops:
2
+ TargetRubyVersion: "2.3"
3
+ Exclude:
4
+ - 'quintocumber.gemspec'
5
+ - 'tmp/**/*'
6
+ Style/Documentation:
7
+ Enabled: false
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in quintocumber.gemspec
4
6
  gemspec
data/README.md CHANGED
@@ -1,9 +1,5 @@
1
1
  # Quintocumber
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/quintocumber`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
6
-
7
3
  ## Installation
8
4
 
9
5
  Add this line to your application's Gemfile:
@@ -22,13 +18,25 @@ Or install it yourself as:
22
18
 
23
19
  ## Usage
24
20
 
25
- TODO: Write usage instructions here
21
+ $ quintocumber
22
+
26
23
 
27
24
  ## Development
28
25
 
29
26
  After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
27
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
28
+ Install development external dependencies:
29
+
30
+ * Allure CLI 2.2.1 (https://github.com/allure-framework/allure2/releases/tag/2.2.1)
31
+ * Firefox and geckodriver
32
+
33
+ To install this gem onto your local machine, run `bundle exec rake install`.
34
+
35
+ To run all tests: `bin/test`
36
+
37
+ To release a new version run `gem bump --version (major|minor|patch)`, which will create a git tag and commit for the version. Push the new commit and tag with `git push`.
38
+
39
+ Push the `.gem` file to [rubygems.org](https://rubygems.org) using `gem push quintocumber-<NEW_VERSION_TAG>.gem`
32
40
 
33
41
  ## Contributing
34
42
 
data/Rakefile CHANGED
@@ -1,2 +1,4 @@
1
- require "bundler/gem_tasks"
2
- task :default => :spec
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ task default: :spec
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "quintocumber"
4
+ require 'bundler/setup'
5
+ require 'quintocumber'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "quintocumber"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start(__FILE__)
data/bin/test ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env bash
2
+ rubocop || exit 1
3
+ [ -e file ] && rm -rf ./coverage
4
+ bundle exec cucumber && echo "Coverage report generated to: $(pwd)/coverage/index.html"
data/exe/quintocumber CHANGED
@@ -1,10 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
- require 'cucumber/cli/main'
2
+ # frozen_string_literal: true
3
3
 
4
- loader_file = File.join(File.dirname(__FILE__), "../lib/loader.rb")
4
+ require 'quintocumber'
5
5
 
6
- cmd_args = "#{ARGV.join(' ')}"
7
-
8
- args = "--format pretty --format AllureCucumber::Formatter --out reports --require #{loader_file} #{cmd_args}".split(/\s+/)
9
-
10
- Cucumber::Cli::Main.new(args).execute!
6
+ Quintocumber::Cli::Main.new(ARGV.dup).execute!
data/lib/env.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require 'selenium/webdriver'
3
5
  require 'rspec'
@@ -8,10 +10,10 @@ require 'rspec/expectations'
8
10
  require 'factory_girl'
9
11
 
10
12
  Capybara.default_max_wait_time = 10
11
- Capybara.save_path = "screenshots/"
13
+ Capybara.save_path = 'screenshots/'
12
14
 
13
- After do |scenario|
14
- Capybara.current_session.driver.quit()
15
+ After do |_scenario|
16
+ Capybara.current_session.driver.quit
15
17
  end
16
18
 
17
19
  Capybara.default_driver = :wip
data/lib/loader.rb CHANGED
@@ -1,15 +1,17 @@
1
- require_relative "env"
1
+ # frozen_string_literal: true
2
2
 
3
- require_relative "quintocumber_config"
3
+ require_relative 'env'
4
4
 
5
- Dir[File.join(File.dirname(__FILE__), "plugins/**/*.rb")].each do |file|
6
- require file
5
+ require_relative 'quintocumber_config'
6
+
7
+ Dir[File.join(File.dirname(__FILE__), 'plugins/**/*.rb')].each do |file|
8
+ require file
7
9
  end
8
10
 
9
- Dir[File.join(Dir.pwd, "features/support/**/*.rb")].each do |file|
10
- require file
11
+ Dir[File.join(Dir.pwd, 'features/support/**/*.rb')].each do |file|
12
+ require file
11
13
  end
12
14
 
13
- Dir[File.join(Dir.pwd, "features/**/*.rb")].each do |file|
14
- require file
15
+ Dir[File.join(Dir.pwd, 'features/**/*.rb')].each do |file|
16
+ require file
15
17
  end
@@ -1,75 +1,88 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'capybara/cucumber'
2
4
 
3
- #Get browserstack configuration from browserstack.yml
4
- #and override credentials if credentials are set in env variables
5
- browserstack_default_config = YAML.load(File.read(File.join(File.dirname(__FILE__), "./browserstack.yml")))
5
+ # Get browserstack configuration from browserstack.yml
6
+ # and override credentials if credentials are set in env variables
7
+ browserstack_default_config = YAML.safe_load(
8
+ File.read(File.join(File.dirname(__FILE__), './browserstack.yml'))
9
+ )
6
10
 
7
- browserstack_project_config_filename = File.join(Dir.pwd, "./browserstack.yml")
11
+ browserstack_project_config_filename = File.join(Dir.pwd, './browserstack.yml')
8
12
  if File.file?(browserstack_project_config_filename)
9
- browserstack_project_config = YAML.load(File.read(browserstack_project_config_filename)) || Hash.new
13
+ browserstack_project_config = YAML.safe_load(
14
+ File.read(browserstack_project_config_filename)
15
+ ) || {}
10
16
  else
11
- browserstack_project_config = Hash.new
17
+ browserstack_project_config = {}
12
18
  end
13
19
 
14
- browserstack_config = browserstack_default_config.merge(browserstack_project_config)
20
+ browserstack_config = browserstack_default_config.merge(
21
+ browserstack_project_config
22
+ )
15
23
 
16
- browserstack_config['user'] = ENV['BROWSERSTACK_USERNAME'] || browserstack_config['user']
17
- browserstack_config['key'] = ENV['BROWSERSTACK_ACCESS_KEY'] || browserstack_config['key']
24
+ browserstack_config['user'] = ENV['BROWSERSTACK_USERNAME'] ||
25
+ browserstack_config['user']
26
+ browserstack_config['key'] = ENV['BROWSERSTACK_ACCESS_KEY'] ||
27
+ browserstack_config['key']
18
28
 
19
- #Only user browserstack if credentials are set
29
+ # Only user browserstack if credentials are set
20
30
  if browserstack_config['user'] && browserstack_config['key']
21
- #Register browserstack remote driver into Capybara context
31
+ # Register browserstack remote driver into Capybara context
22
32
  Capybara.register_driver :browserstack do |app|
23
-
24
- #check if target browser is properly configured in browsertack.yaml
25
- #if no target browser is defined, skip verification due to later override
26
- if ENV['TEST_BROWSER'] && browserstack_config['browser_caps'][ENV['TEST_BROWSER']].nil?
33
+ # check if target browser is properly configured in browsertack.yaml
34
+ # if no target browser is defined, skip verification due to later override
35
+ if ENV['TEST_BROWSER'] &&
36
+ browserstack_config['browser_caps'][ENV['TEST_BROWSER']].nil?
27
37
  raise 'Remote browser not configured in browsertack.yaml'
28
38
  end
29
39
 
30
- #merge common capabilities and browser capabilities (if not browser is set, deafults to chrome)
31
- browserstack_config['common_caps'] = browserstack_config['common_caps'] || {}
32
- @caps = browserstack_config['common_caps'].merge(browserstack_config['browser_caps'][TEST_BROWSER])
40
+ # merge common capabilities and browser capabilities
41
+ # (if not browser is set, deafults to chrome)
42
+ browserstack_config['common_caps'] = browserstack_config['common_caps'] ||
43
+ {}
44
+
45
+ @caps = browserstack_config['common_caps'].merge(
46
+ browserstack_config['browser_caps'][TEST_BROWSER]
47
+ )
33
48
 
34
- #sets timestamp as build name along with target browser
49
+ # sets timestamp as build name along with target browser
35
50
  @caps['build'] = BUILD
36
-
37
- #sets project name
51
+
52
+ # sets project name
38
53
  @caps['project'] = PROJECT_NAME
39
54
 
40
- #all set, instanciate new remote broser
41
- Capybara::Selenium::Driver.new(app,
42
- :browser => :remote,
43
- :url => "http://#{browserstack_config['user']}:#{browserstack_config['key']}@#{browserstack_config['server']}/wd/hub",
44
- :desired_capabilities => @caps
55
+ # all set, instanciate new remote broser
56
+ Capybara::Selenium::Driver.new(
57
+ app,
58
+ browser: :remote,
59
+ url: "http://#{browserstack_config['user']}" \
60
+ ":#{browserstack_config['key']}@" \
61
+ "#{browserstack_config['server']}/wd/hub",
62
+ desired_capabilities: @caps
45
63
  )
46
64
  end
47
-
48
- #set browserstack as default browser
65
+
66
+ # set browserstack as default browser
49
67
  Capybara.default_driver = :browserstack
50
68
  end
51
69
 
52
-
53
- #Re-register browserstack remote browser before each scenario run to ensure
54
- #browserstack will receive scenario name as test name
70
+ # Re-register browserstack remote browser before each scenario run to ensure
71
+ # browserstack will receive scenario name as test name
55
72
  Before do |scenario|
56
-
57
- #Only re-register if browserstack is the current driver
73
+ # Only re-register if browserstack is the current driver
58
74
  if Capybara.current_driver == :browserstack
59
75
 
60
- #Get current options to override later
76
+ # Get current options to override later
61
77
  opts = Capybara.current_session.driver.options
62
78
 
63
- #Put scenario name on options
64
- opts[:desired_capabilities] = opts[:desired_capabilities].merge({"name" => scenario.name})
65
-
66
- #Re-register browserstack with new options
67
- Capybara.register_driver :browserstack do |app|
68
- Capybara::Selenium::Driver.new(app, opts)
69
- end
79
+ # Put scenario name on options
80
+ opts[:desired_capabilities] = opts[:desired_capabilities].merge(
81
+ 'name' => scenario.name
82
+ )
70
83
 
71
- #Ensure Capybara will get the most recent driver registered (Kinda MAGIC; don't touch)
84
+ # Ensure Capybara will get the most recent driver registered
85
+ # (Kinda MAGIC; don't touch)
72
86
  Capybara.current_driver = :browserstack
73
87
  end
74
88
  end
75
-
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ environments_config_filename = File.join(Dir.pwd, './environments.yaml')
4
+ ENVIRONMENT = if File.file?(environments_config_filename)
5
+ YAML.safe_load(
6
+ File.read(environments_config_filename), [], [], true
7
+ ).dig(ENV['WHERE'] || 'default').freeze || {}.freeze
8
+ else
9
+ {}.freeze
10
+ end
@@ -1,4 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Capybara.register_driver :wip do |app|
2
- test_browser = ENV['TEST_BROWSER'] || "firefox"
3
- Capybara::Selenium::Driver.new(app, browser: test_browser.to_sym)
4
- end
4
+ test_browser = ENV['TEST_BROWSER'] || 'chrome'
5
+ selenium_server = ENV['SELENIUM_SERVER']
6
+ if ENV['SELENIUM_SERVER'].nil?
7
+ Capybara::Selenium::Driver.new(app, browser: test_browser.to_sym)
8
+ else
9
+ Capybara::Selenium::Driver.new(app, browser: :remote, url: selenium_server, desired_capabilities: test_browser.to_sym)
10
+ end
11
+ end
@@ -1,56 +1,80 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'httparty'
2
4
  require 'aws-sdk'
3
5
 
4
- PUBLISH_REPORTS_TESTS_FAILED = []
6
+ tests_failed = []
7
+
8
+ def pagerduty_payload(failed_length, reports_list_str)
9
+ {
10
+ payload: {
11
+ summary: failed_length.to_s + ' #{PROJECT_NAME} test(s) failed',
12
+ source: '#{PROJECT_NAME}',
13
+ severity: 'critical',
14
+ custom_details: "Failed test(s):\n- #{reports_list_str}"
15
+ },
16
+ event_action: 'trigger',
17
+ routing_key: ENV['PAGERDUTY_ROUTING_KEY']
18
+ }
19
+ end
5
20
 
6
21
  AfterConfiguration do |config|
7
22
  config.on_event :after_test_case do |event|
8
- if not event.result.ok?
9
- PUBLISH_REPORTS_TESTS_FAILED.push(event.test_case.name)
10
- end
23
+ tests_failed.push(event.test_case.name) unless event.result.ok?
11
24
  end
12
25
  end
13
26
 
14
- at_exit do
27
+ def generate_report_and_upload_to_s3
15
28
  bucket = ENV['REPORT_BUCKET']
16
- bucket_region = ENV['REPORT_BUCKET_REGION'] || 'us-east-1'
17
- report_url = nil
18
- if bucket && system('allure --help >> /dev/null')
19
- puts "Generating allure report and uploading to s3"
20
- system('allure generate --clean reports')
21
- Dir[File.join(Dir.pwd, "allure-report/**/*")].each do |file|
22
- if not File.directory?(file)
23
- file_name = file.clone
24
- file_name.sub! File.join(Dir.pwd, "allure-report/"), ''
25
- s3 = Aws::S3::Resource.new(region: bucket_region)
26
- obj = s3.bucket(bucket).object("#{BUILD}/#{file_name}")
27
- obj.upload_file(file)
28
- obj.acl.put({ acl: "public-read" })
29
- end
30
- end
31
- report_url = "http://#{bucket}.s3-website-#{bucket_region}.amazonaws.com/#{URI.escape(BUILD)}"
32
- end
33
- if ENV['PAGERDUTY_ROUTING_KEY'] && PUBLISH_REPORTS_TESTS_FAILED.length > 0
34
- puts "Sending test failed alert to PagerDuty"
35
- payload = {
36
- :payload => {
37
- :summary => "#{PUBLISH_REPORTS_TESTS_FAILED.length} #{PROJECT_NAME} test(s) failed",
38
- :source => "#{PROJECT_NAME}",
39
- :severity => "critical",
40
- :custom_details => "Failed test(s):\n- #{PUBLISH_REPORTS_TESTS_FAILED.join("\n- ")}"
41
- },
42
- :event_action => "trigger",
43
- :routing_key => ENV['PAGERDUTY_ROUTING_KEY'],
44
- }
45
- if report_url
46
- payload[:links] = [{
47
- :href => report_url,
48
- :text => "Report for #{BUILD}"
49
- }]
50
- end
51
- response = HTTParty.post "https://events.pagerduty.com/v2/enqueue",
52
- headers:{ "Content-Type" => "application/json"},
53
- body: payload.to_json
29
+ bucket_region = ENV['REPORT_BUCKET_REGION']
30
+ return unless bucket && system('allure --help >> /dev/null')
31
+ puts 'Generating allure report and uploading to s3'
32
+ system('allure generate --clean reports')
33
+ upload_report_files_to_s3
34
+ "http://#{bucket}.s3-website-#{bucket_region}.amazonaws.com/" +
35
+ URI.escape(BUILD)
36
+ end
37
+
38
+ def upload_report_files_to_s3
39
+ s3 = instanciate_s3_connector
40
+ Dir[File.join(Dir.pwd, 'allure-report/**/*')].each do |file|
41
+ next if File.directory?(file)
42
+ upload_to_s3(s3, ENV['REPORT_BUCKET'], file)
54
43
  end
55
44
  end
56
45
 
46
+ def instanciate_s3_connector
47
+ bucket_region = ENV['REPORT_BUCKET_REGION'] || 'us-east-1'
48
+ Aws::S3::Resource.new(region: bucket_region)
49
+ end
50
+
51
+ def upload_to_s3(s3, bucket, file)
52
+ file_name = file.clone
53
+ file_name.sub! File.join(Dir.pwd, 'allure-report/'), ''
54
+ obj = s3.bucket(bucket).object('#{BUILD}/#{file_name}')
55
+ obj.upload_file(file)
56
+ obj.acl.put(acl: 'public-read')
57
+ end
58
+
59
+ def insert_report_url_on_pagerduty_payload(report_url, payload)
60
+ payload[:links] = [{
61
+ href: report_url,
62
+ text: 'Report for #{BUILD}'
63
+ }]
64
+ puts 'Sending s3 report url to PagerDuty'
65
+ end
66
+
67
+ def report_to_pagerduty(report_url, tests_failed)
68
+ return unless ENV['PAGERDUTY_ROUTING_KEY'] && !tests_failed.empty?
69
+ puts 'Sending test failed alert to PagerDuty'
70
+ payload = pagerduty_payload(tests_failed.length, tests_failed.join('\n- '))
71
+ insert_report_url_on_pagerduty_payload(report_url, payload) if report_url
72
+ HTTParty.post 'https://events.pagerduty.com/v2/enqueue',
73
+ headers: { 'Content-Type' => 'application/json' },
74
+ body: payload.to_json
75
+ end
76
+
77
+ at_exit do
78
+ report_url = generate_report_and_upload_to_s3
79
+ report_to_pagerduty(report_url, tests_failed)
80
+ end
@@ -1,12 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Using temp class to avoid conflict with Capybara.attach_file
4
+ class AllureCucumberDSLTemp
5
+ extend AllureCucumber::DSL
6
+ end
7
+
1
8
  AfterConfiguration do |config|
2
9
  config.on_event :after_test_step do |event|
3
10
  if !ENV['DISABLE_REPORTS_SCREENSHOT'] && !event.result.ok?
4
11
  filename = "#{event.test_case.name}/#{event.test_step.name}.png"
5
12
  Capybara.page.save_screenshot(filename)
6
- class Includer
7
- extend AllureCucumber::DSL
8
- end
9
- Includer.attach_file(filename, File.open(File.join(Dir.pwd, Capybara.save_path, "#{filename}")))
13
+ AllureCucumberDSLTemp.attach_file(
14
+ filename,
15
+ File.open(File.join(Dir.pwd, Capybara.save_path, filename.to_s))
16
+ )
10
17
  end
11
18
  end
12
- end
19
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quintocumber
2
- VERSION = "1.1.1"
4
+ VERSION = '1.1.2'
3
5
  end
data/lib/quintocumber.rb CHANGED
@@ -1,5 +1,67 @@
1
- require "quintocumber/version"
1
+ # frozen_string_literal: true
2
+
3
+ require 'quintocumber/version'
4
+ require 'cucumber/cli/main'
2
5
 
3
6
  module Quintocumber
4
- # Your code goes here...
7
+ module Cli
8
+ # CLI entrypoint class
9
+ class Main
10
+ def initialize(args, _ = nil, out = STDOUT, err = STDERR, kernel = Kernel)
11
+ @args = args
12
+ @out = out
13
+ @err = err
14
+ @kernel = kernel
15
+ end
16
+
17
+ def execute!
18
+ if ENV['TESTS']
19
+ require 'setup_tests/coverage'
20
+ require 'setup_tests/mocks'
21
+ end
22
+ loader_file = File.join(File.dirname(__FILE__), '/loader.rb')
23
+ args = default_args(loader_file) + @args
24
+ args.push("--format", "rerun", "--out", "failed.txt")
25
+
26
+ # TODO: Extract and improve this block
27
+ retry_attempts = 0
28
+ retry_attempts_idx = args.index("--retry")
29
+ if retry_attempts_idx
30
+ args.slice(retry_attempts_idx)
31
+ retry_attempts = args.slice(retry_attempts_idx + 1)
32
+ puts retry_attempts
33
+ end
34
+
35
+ begin
36
+ Cucumber::Cli::Main.new(args, nil, @out, @err, @kernel).execute!
37
+ rescue SystemExit
38
+ i = 0
39
+ while i < retry_attempts.to_i
40
+ # TODO: Extract and improve this block
41
+ puts "Retry ##{i+1}"
42
+ args_to_retry = args.clone
43
+ args_to_retry + File.readlines("failed.txt")
44
+ begin
45
+ Cucumber::Cli::Main.new(args_to_retry, nil, @out, @err, @kernel).execute!
46
+ rescue SystemExit
47
+ i = i + 1
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ def default_args(loader_file)
54
+ [
55
+ '--format',
56
+ 'pretty',
57
+ '--format',
58
+ 'AllureCucumber::Formatter',
59
+ '--out',
60
+ 'reports',
61
+ '--require',
62
+ loader_file.to_s
63
+ ]
64
+ end
65
+ end
66
+ end
5
67
  end
@@ -1,14 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  TEST_BROWSER = ENV['TEST_BROWSER'] || 'chrome'
2
4
 
3
5
  BUILD = "#{Time.now.utc.iso8601} - #{TEST_BROWSER}"
4
6
 
5
- quintocumber_project_config_filename = File.join(Dir.pwd, "./quintocumber.yaml")
6
- if File.file?(quintocumber_project_config_filename)
7
- quintocumber_config = YAML.load(File.read(quintocumber_project_config_filename)) || Hash.new
8
- else
9
- quintocumber_config = Hash.new
10
- end
7
+ quintocumber_project_config_filename = File.join(Dir.pwd, './quintocumber.yaml')
8
+ quintocumber_config = if File.file?(quintocumber_project_config_filename)
9
+ YAML.safe_load(
10
+ File.read(quintocumber_project_config_filename)
11
+ ) || {}
12
+ else
13
+ {}
14
+ end
11
15
 
12
16
  quintocumber_config['project'] = quintocumber_config['project'] || {}
13
17
 
14
- PROJECT_NAME = quintocumber_config['project']['name'] || "UNNAMED PROJECT"
18
+ PROJECT_NAME = quintocumber_config['project']['name'] || 'UNNAMED PROJECT'
data/lib/runner.rb CHANGED
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'cucumber/cli/main'
2
4
 
3
- loader_file = File.join(File.dirname(__FILE__), "loader.rb")
5
+ loader_file = File.join(File.dirname(__FILE__), 'loader.rb')
4
6
 
5
7
  args = "--verbose --require #{loader_file}".split(/\s+/)
6
8
 
7
- Cucumber::Cli::Main.new(args).execute!
9
+ Cucumber::Cli::Main.new(args).execute!
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov'
4
+
5
+ SimpleCov.command_name "quintocumber #{Process.pid}"
6
+ SimpleCov.root(File.join(File.expand_path(File.dirname(__FILE__)), '../..'))
7
+ SimpleCov.start do
8
+ add_filter 'tests_setup'
9
+ add_filter 'tmp'
10
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'webmock'
4
+ include WebMock::API
5
+
6
+ WebMock.enable!
7
+
8
+ WebMock.disable_net_connect!(allow_localhost: true)
9
+
10
+ stub_request(:any, /events.pagerduty.com/)
11
+
12
+ stub_request(:any, /dummy.s3.amazonaws.com/)
13
+
14
+ # stub_request(:any, /hub-cloud.browserstack.com/)
15
+
16
+ browserstack_mock_post1_reponse = '
17
+ {
18
+ "state": null,
19
+ "sessionId": "6b04a40d32157861f90f4b624bbf40090fdb9477",
20
+ "hCode": 21722156,
21
+ "value": {
22
+ "applicationCacheEnabled": false,
23
+ "rotatable": false,
24
+ "mobileEmulationEnabled": false,
25
+ "networkConnectionEnabled": false,
26
+ "chrome": {
27
+ "chromedriverVersion": "2.30.477700 ()",
28
+ "userDataDir": "C:\\Windows\\proxy\\scoped_dir6792_23550"
29
+ },
30
+ "takesHeapSnapshot": true,
31
+ "pageLoadStrategy": "normal",
32
+ "databaseEnabled": false,
33
+ "handlesAlerts": true,
34
+ "hasTouchScreen": false,
35
+ "version": "59.0.3071.86",
36
+ "platform": "XP",
37
+ "browserConnectionEnabled": false,
38
+ "nativeEvents": true,
39
+ "acceptSslCerts": true,
40
+ "webdriver.remote.sessionid": "6b04a40d32157861f90f4b624bbf40090fdb9477",
41
+ "locationContextEnabled": true,
42
+ "webStorageEnabled": true,
43
+ "browserName": "chrome",
44
+ "takesScreenshot": true,
45
+ "javascriptEnabled": true,
46
+ "cssSelectorsEnabled": true,
47
+ "unexpectedAlertBehaviour": ""
48
+ },
49
+ "class": "org.openqa.selenium.remote.Response",
50
+ "status": 0
51
+ }
52
+ '
53
+
54
+ browserstack_mock_post2_reponse = '
55
+ {
56
+ "state": "success",
57
+ "sessionId": "6b04a40d32157861f90f4b624bbf40090fdb9477",
58
+ "hCode": 6531147,
59
+ "value": null,
60
+ "class": "org.openqa.selenium.remote.Response",
61
+ "status": 0
62
+ }
63
+ '
64
+
65
+ browserstack_mock_delete_reponse = '
66
+ {"state":"success", "status": 0}
67
+ '
68
+
69
+ stub_request(
70
+ :post,
71
+ %r{hub-cloud.browserstack.com\/wd\/hub\/session$}
72
+ ).to_return(
73
+ body: browserstack_mock_post1_reponse,
74
+ headers: { 'Content-Type' => 'application/json' }
75
+ )
76
+
77
+ stub_request(
78
+ :post,
79
+ %r{hub-cloud.browserstack.com\/wd\/hub\/session\/(.+)\/url$}
80
+ ).to_return(
81
+ body: browserstack_mock_post2_reponse,
82
+ headers: { 'Content-Type' => 'application/json' }
83
+ )
84
+
85
+ stub_request(
86
+ :delete,
87
+ %r{hub-cloud.browserstack.com\/wd\/hub\/session\/(.+)$}
88
+ ).to_return(
89
+ body: browserstack_mock_delete_reponse,
90
+ headers: { 'Content-Type' => 'application/json' }
91
+ )
data/quintocumber.gemspec CHANGED
@@ -1,49 +1,46 @@
1
+ # frozen_string_literal: true
1
2
  # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
+
4
+ lib = File.expand_path('../lib', __FILE__)
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "quintocumber/version"
6
+ require 'quintocumber/version'
5
7
 
6
8
  Gem::Specification.new do |spec|
7
- spec.name = "quintocumber"
9
+ spec.name = 'quintocumber'
8
10
  spec.version = Quintocumber::VERSION
9
- spec.authors = ["Diego Queiroz"]
10
- spec.email = ["dqueiroz@quintoandar.com.br"]
11
+ spec.authors = ['Diego Queiroz']
12
+ spec.email = ['dqueiroz@quintoandar.com.br']
11
13
 
12
- spec.summary = %q{Cucumber on steroids}
13
- spec.description = %q{Cucumber with some additional support: Capybara, Browsertack, Allure reports, Rspec and SitePrism}
14
- spec.homepage = "https://github.com/quintoandar/quintocumber"
15
- spec.license = "MIT"
14
+ spec.summary = 'Cucumber on steroids'
15
+ spec.description = 'Cucumber with some additional support: Capybara,' \
16
+ 'Browsertack, Allure reports, Rspec and SitePrism'
16
17
 
17
- # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
- # to allow pushing to a single host or delete this section to allow pushing to any host.
19
- # if spec.respond_to?(:metadata)
20
- # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
21
- # else
22
- # raise "RubyGems 2.0 or newer is required to protect against " \
23
- # "public gem pushes."
24
- # end
18
+ spec.homepage = 'https://github.com/quintoandar/quintocumber'
19
+ spec.license = 'MIT'
25
20
 
26
21
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
22
  f.match(%r{^(test|spec|features)/})
28
23
  end
29
- spec.executables = ["quintocumber"]
30
- spec.bindir = "exe"
24
+ spec.executables = ['quintocumber']
25
+ spec.bindir = 'exe'
31
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
- spec.require_paths = ["lib"]
27
+ spec.require_paths = ['lib']
28
+
29
+ spec.add_development_dependency 'bundler', '~> 1.15'
30
+ spec.add_development_dependency 'rake', '~> 10.0'
31
+ spec.add_development_dependency 'aruba', '~> 0.7'
32
+ spec.add_development_dependency 'simplecov', '~> 0.14.1'
33
+ spec.add_development_dependency 'webmock', '~> 3.0.1'
34
+ spec.add_development_dependency 'rubocop', '~> 0.49.1'
33
35
 
34
- spec.add_development_dependency "bundler", "~> 1.15"
35
- spec.add_development_dependency "rake", "~> 10.0"
36
- spec.add_development_dependency "cucumber", "~> 2.4"
37
- spec.add_development_dependency "aruba", "~> 0.7"
38
-
39
- spec.add_dependency "cucumber", "~> 2.4"
40
- spec.add_dependency "rspec", "~> 3.6"
41
- spec.add_dependency "site_prism", "~> 2.9"
42
- spec.add_dependency "capybara", "~> 2.14"
43
- spec.add_dependency "selenium-webdriver", "~> 3.4"
44
- spec.add_dependency "allure-cucumber", "~> 0.5"
45
- spec.add_dependency "factory_girl", "~> 4.8"
46
- spec.add_dependency "faker", "~> 1.8"
47
- spec.add_dependency "httparty", "~> 0.15"
48
- spec.add_dependency "aws-sdk", "~> 2.10"
36
+ spec.add_dependency 'cucumber', '~> 2.4'
37
+ spec.add_dependency 'rspec', '~> 3.6'
38
+ spec.add_dependency 'site_prism', '~> 2.9'
39
+ spec.add_dependency 'capybara', '~> 2.14'
40
+ spec.add_dependency 'selenium-webdriver', '~> 3.4'
41
+ spec.add_dependency 'allure-cucumber', '~> 0.5'
42
+ spec.add_dependency 'factory_girl', '~> 4.8'
43
+ spec.add_dependency 'faker', '~> 1.8'
44
+ spec.add_dependency 'httparty', '~> 0.15'
45
+ spec.add_dependency 'aws-sdk', '~> 2.10'
49
46
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quintocumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diego Queiroz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-02 00:00:00.000000000 Z
11
+ date: 2017-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -39,33 +39,61 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: cucumber
42
+ name: aruba
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2.4'
47
+ version: '0.7'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '2.4'
54
+ version: '0.7'
55
55
  - !ruby/object:Gem::Dependency
56
- name: aruba
56
+ name: simplecov
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.7'
61
+ version: 0.14.1
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.7'
68
+ version: 0.14.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.49.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.49.1
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: cucumber
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -206,7 +234,7 @@ dependencies:
206
234
  - - "~>"
207
235
  - !ruby/object:Gem::Version
208
236
  version: '2.10'
209
- description: 'Cucumber with some additional support: Capybara, Browsertack, Allure
237
+ description: 'Cucumber with some additional support: Capybara,Browsertack, Allure
210
238
  reports, Rspec and SitePrism'
211
239
  email:
212
240
  - dqueiroz@quintoandar.com.br
@@ -216,18 +244,20 @@ extensions: []
216
244
  extra_rdoc_files: []
217
245
  files:
218
246
  - ".gitignore"
247
+ - ".rubocop.yml"
219
248
  - Gemfile
220
249
  - LICENSE.txt
221
250
  - README.md
222
251
  - Rakefile
223
252
  - bin/console
224
253
  - bin/setup
254
+ - bin/test
225
255
  - exe/quintocumber
226
256
  - lib/env.rb
227
257
  - lib/loader.rb
228
258
  - lib/plugins/browserstack.yml
229
259
  - lib/plugins/browserstack_config.rb
230
- - lib/plugins/envitonment_variables.rb
260
+ - lib/plugins/environment_variables.rb
231
261
  - lib/plugins/local_config.rb
232
262
  - lib/plugins/publish_reports.rb
233
263
  - lib/plugins/screeshot_hooks.rb
@@ -235,6 +265,8 @@ files:
235
265
  - lib/quintocumber/version.rb
236
266
  - lib/quintocumber_config.rb
237
267
  - lib/runner.rb
268
+ - lib/setup_tests/coverage.rb
269
+ - lib/setup_tests/mocks.rb
238
270
  - quintocumber.gemspec
239
271
  homepage: https://github.com/quintoandar/quintocumber
240
272
  licenses:
@@ -256,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
256
288
  version: '0'
257
289
  requirements: []
258
290
  rubyforge_project:
259
- rubygems_version: 2.6.12
291
+ rubygems_version: 2.5.1
260
292
  signing_key:
261
293
  specification_version: 4
262
294
  summary: Cucumber on steroids
@@ -1,6 +0,0 @@
1
- environments_config_filename = File.join(Dir.pwd, "./environments.yaml")
2
- if File.file?(environments_config_filename)
3
- ENVIRONMENT = YAML.load(File.read(environments_config_filename)).dig(ENV['WHERE'] || 'default') || Hash.new
4
- else
5
- ENVIRONMENT = Hash.new
6
- end