rspec-webservice_matchers 4.9.0 → 4.10.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
  SHA1:
3
- metadata.gz: f930e26ec837ba1ca066f2a911608b5c58edfc09
4
- data.tar.gz: 0c2be7eae06450c998838d3e1530421ee9dcb6b2
3
+ metadata.gz: 03bc4ee87b606016d8853436df80b164d0f4f5f4
4
+ data.tar.gz: 0429080abde8b75215e9ce6700e7ed6c84620a38
5
5
  SHA512:
6
- metadata.gz: 702e17e06e648086ce8c75c2838eb3997a7d44ccb741af282d22b46785fc5d44862966713e788c54acbe908f2290469fb170754c0fec303b8218dab3bfa7197b
7
- data.tar.gz: 88be96f4ae2de62c765bb0a9fd6bc621e0024b6513ba945700922adeb4e76031f9b3e9ab04e9ed1247cb928bf305ee335679a4c9a96128245e44ab721c7c6ec6
6
+ metadata.gz: 7bdddc6c091db3c310fc7ded0457a1655d9c8cc8f2fff3fbe788c91601f74d81b35a19ff62930d36c3f4843621853fa4d693e0e6648bb219fd4346abdf9bd70e
7
+ data.tar.gz: 6e4f6b04be911e8a6f55898dcc78bc8ea8497d82978b3f9cf387cccbeb1dd447eb9ebf93565ca37db845d6902924a347227152cf6b13c600e435b5af50ce5d5f
data/HISTORY.md CHANGED
@@ -1,3 +1,7 @@
1
+ 4.10.0
2
+ ------
3
+ Refactoring lower-level code into new namespace.
4
+
1
5
  4.9.0
2
6
  -----
3
7
  Adds new API for `be_fast`.
@@ -1,59 +1,15 @@
1
1
  # frozen_string_literal: true
2
- require 'cgi'
3
- require 'json'
4
2
  require 'rspec/matchers'
5
- require 'rspec/webservice_matchers/util'
6
- require 'validated_object'
3
+ require 'web_test/be_fast'
7
4
 
8
5
  module RSpec
9
6
  module WebserviceMatchers
10
7
  module BeFast
11
-
12
- class TestResult < ValidatedObject::Base
13
- attr_accessor :success, :score
14
- alias success? success
15
-
16
- validates :success, inclusion: [true, false]
17
- validates :score, inclusion: (0..100)
18
- end
19
-
20
-
21
- def self.parse(json:)
22
- response = JSON.parse(json)
23
- unless response.key?('ruleGroups')
24
- raise "Couldn't parse the PageSpeed response: #{response.inspect}"
25
- end
26
- score = response.fetch('ruleGroups').fetch('SPEED').fetch('score')
27
- { score: score }
28
- end
29
-
30
- def self.page_speed_score(url:)
31
- url_param = CGI.escape(Util.make_url(url))
32
- key = ENV['WEBSERVICE_MATCHER_INSIGHTS_KEY']
33
- if key.nil?
34
- raise 'be_fast requires the WEBSERVICE_MATCHER_INSIGHTS_KEY '\
35
- 'environment variable to be set to a Google PageSpeed '\
36
- 'Insights API key.'
37
- end
38
- endpoint = 'https://www.googleapis.com/pagespeedonline/v2/runPagespeed'
39
- api_url = "#{endpoint}?url=#{url_param}&screenshot=false&key=#{key}"
40
- response = Faraday.get(api_url)
41
- BeFast.parse(json: response.body).fetch(:score)
42
- end
43
-
44
- def self.test(url:)
45
- TestResult.new do |r|
46
- r.score = BeFast.page_speed_score(url: url)
47
- r.success = r.score >= 85
48
- end
49
- end
50
-
51
-
52
8
  RSpec::Matchers.define :be_fast do
53
9
  score = nil
54
10
 
55
11
  match do |url|
56
- result = BeFast.test(url: url)
12
+ result = WebTest::BeFast.test(url: url)
57
13
  score = result.score
58
14
  result.success?
59
15
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'rspec/webservice_matchers/util'
2
+ require 'web_test/util'
3
+
3
4
 
4
5
  module RSpec
5
6
  module WebserviceMatchers
@@ -10,7 +11,7 @@ module RSpec
10
11
  actual_code = nil
11
12
 
12
13
  match do |url_or_domain_name|
13
- actual_code = Util.status(url_or_domain_name)
14
+ actual_code = WebTest::Util.status(url_or_domain_name)
14
15
  actual_code == expected_code.to_i
15
16
  end
16
17
 
@@ -1,37 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rspec/matchers'
3
- require 'rspec/webservice_matchers/util'
4
- require 'validated_object'
3
+ require 'web_test/be_up'
5
4
 
6
5
  # Pass when the response code is 200, following redirects if necessary.
7
6
  module RSpec
8
7
  module WebserviceMatchers
9
8
  module BeUp
10
-
11
- class TestResult < ValidatedObject::Base
12
- attr_accessor :success, :status_code
13
- alias success? success
14
-
15
- validates :success, inclusion: [true, false]
16
- validates :status_code, inclusion: 100..510
17
- end
18
-
19
-
20
- def self.test(url:nil, domain:nil)
21
- raise 'Must specify a url or domain' if url.nil? && domain.nil?
22
-
23
- TestResult.new do |r|
24
- r.status_code = Util.status(url || domain, follow: true)
25
- r.success = (r.status_code == 200)
26
- end
27
- end
28
-
29
-
30
9
  RSpec::Matchers.define :be_up do
31
10
  status = nil
32
11
 
33
12
  match do |url_or_domain_name|
34
- result = BeUp.test(url: url_or_domain_name)
13
+ result = WebTest::BeUp.test(url: url_or_domain_name)
35
14
  status = result.status_code
36
15
  result.success?
37
16
  end
@@ -40,7 +19,6 @@ module RSpec
40
19
  "Received status #{status}"
41
20
  end
42
21
  end
43
-
44
22
  end
45
23
  end
46
24
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require 'faraday'
3
- require 'rspec/webservice_matchers/util'
3
+ require 'web_test/util'
4
+
4
5
  require 'rspec/webservice_matchers/redirect_helpers'
5
6
 
6
7
  module RSpec
@@ -17,7 +18,7 @@ module RSpec
17
18
  match do |domain_name|
18
19
  begin
19
20
  status, new_url, final_protocol = get_info(domain_name)
20
- meets_expectations?(status, final_protocol, Util.valid_cert?(new_url))
21
+ meets_expectations?(status, final_protocol, WebTest::Util.valid_cert?(new_url))
21
22
  rescue Faraday::Error::ConnectionFailed
22
23
  error_msg = 'Connection failed'
23
24
  false
@@ -25,7 +26,7 @@ module RSpec
25
26
  end
26
27
 
27
28
  def get_info(domain_name)
28
- status, headers = Util.head(domain_name)
29
+ status, headers = WebTest::Util.head(domain_name)
29
30
  location = headers['location']
30
31
  /^(https?)/ =~ location
31
32
  protocol = Regexp.last_match(1) || nil
@@ -51,7 +52,7 @@ module RSpec
51
52
  errors << "destination uses protocol #{protocol.upcase}"
52
53
  end
53
54
  errors << "there's no valid SSL certificate" unless cert_is_valid
54
- Util.error_message(errors)
55
+ WebTest::Util.error_message(errors)
55
56
  end
56
57
  end
57
58
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'rspec/webservice_matchers/util'
2
+ require 'web_test/util'
3
+
3
4
  require 'rspec/matchers'
4
5
 
5
6
  module RSpec
@@ -11,7 +12,7 @@ module RSpec
11
12
 
12
13
  match do |domain_name_or_url|
13
14
  begin
14
- Util.try_ssl_connection(domain_name_or_url)
15
+ WebTest::Util.try_ssl_connection(domain_name_or_url)
15
16
  rescue Exception => e
16
17
  error_message = fix_for_excon_bug(e.message)
17
18
  false
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
- require 'rspec/webservice_matchers/util'
2
+ require 'web_test/util'
3
+
3
4
 
4
5
  module RSpec
5
6
  module WebserviceMatchers
6
7
  module RedirectHelpers
7
8
  def redirect_failure_message(exception, status, actual_location, kind)
8
- return Util.error_message(exception) if exception
9
+ return WebTest::Util.error_message(exception) if exception
9
10
 
10
11
  errors = []
11
12
  if redirect? status
@@ -19,7 +20,7 @@ module RSpec
19
20
  errors << "not a redirect: received status #{status}"
20
21
  end
21
22
 
22
- Util.error_message(errors)
23
+ WebTest::Util.error_message(errors)
23
24
  end
24
25
 
25
26
  def redirects_correctly?(status, actual_loc, expected_loc, kind)
@@ -27,7 +28,7 @@ module RSpec
27
28
  end
28
29
 
29
30
  def redirect_result(url_or_domain_name)
30
- status, headers = Util.head(url_or_domain_name)
31
+ status, headers = WebTest::Util.head(url_or_domain_name)
31
32
  [status, headers['location']]
32
33
  end
33
34
 
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'rspec/webservice_matchers/util'
2
+ require 'web_test/util'
3
+
3
4
  require 'rspec/webservice_matchers/redirect_helpers'
4
5
 
5
6
  module RSpec
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'rspec/webservice_matchers/util'
2
+ require 'web_test/util'
3
+
3
4
  require 'rspec/webservice_matchers/redirect_helpers'
4
5
 
5
6
  module RSpec
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module RSpec
3
3
  module WebserviceMatchers
4
- VERSION = '4.9.0'
4
+ VERSION = '4.10.0'
5
5
  end
6
6
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+ require 'cgi'
3
+ require 'json'
4
+ require 'validated_object'
5
+ require 'web_test/util'
6
+
7
+ module WebTest
8
+ module BeFast
9
+ class TestResult < ValidatedObject::Base
10
+ attr_accessor :success, :score
11
+ alias success? success
12
+
13
+ validates :success, inclusion: [true, false]
14
+ validates :score, inclusion: 0..100
15
+ end
16
+
17
+
18
+ def self.parse(json:)
19
+ response = JSON.parse(json)
20
+ unless response.key?('ruleGroups')
21
+ raise "Couldn't parse the PageSpeed response: #{response.inspect}"
22
+ end
23
+ score = response.fetch('ruleGroups').fetch('SPEED').fetch('score')
24
+ { score: score }
25
+ end
26
+
27
+ def self.page_speed_score(url:)
28
+ url_param = CGI.escape(WebTest::Util.make_url(url))
29
+ key = ENV['WEBSERVICE_MATCHER_INSIGHTS_KEY']
30
+ if key.nil?
31
+ raise 'be_fast requires the WEBSERVICE_MATCHER_INSIGHTS_KEY '\
32
+ 'environment variable to be set to a Google PageSpeed '\
33
+ 'Insights API key.'
34
+ end
35
+ endpoint = 'https://www.googleapis.com/pagespeedonline/v2/runPagespeed'
36
+ api_url = "#{endpoint}?url=#{url_param}&screenshot=false&key=#{key}"
37
+ response = Faraday.get(api_url)
38
+ BeFast.parse(json: response.body).fetch(:score)
39
+ end
40
+
41
+ def self.test(url:)
42
+ TestResult.new do |r|
43
+ r.score = BeFast.page_speed_score(url: url)
44
+ r.success = r.score >= 85
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+ require 'validated_object'
3
+ require 'web_test/util'
4
+
5
+ module WebTest
6
+ module BeUp
7
+ class TestResult < ValidatedObject::Base
8
+ attr_accessor :success, :status_code
9
+ alias success? success
10
+
11
+ validates :success, inclusion: [true, false]
12
+ validates :status_code, inclusion: 100..510
13
+ end
14
+
15
+
16
+ def self.test(url:nil, domain:nil)
17
+ raise 'Must specify a url or domain' if url.nil? && domain.nil?
18
+
19
+ TestResult.new do |r|
20
+ r.status_code = WebTest::Util.status(url || domain, follow: true)
21
+ r.success = (r.status_code == 200)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+ require 'faraday'
3
+ require 'faraday_middleware'
4
+
5
+ TIMEOUT_IN_SECONDS = 5
6
+ OPEN_TIMEOUT_IN_SECONDS = 5
7
+
8
+ module WebTest
9
+ module Util
10
+ def self.error_message(errors)
11
+ return errors.message if errors.respond_to?(:message)
12
+
13
+ errors
14
+ .map(&:to_s)
15
+ .join('; ')
16
+ .capitalize
17
+ end
18
+
19
+ def self.status(url_or_domain_name, follow: false)
20
+ code = head(url_or_domain_name, follow: follow)[0]
21
+ return code if code != 405
22
+ get(url_or_domain_name, follow: follow)[0]
23
+ end
24
+
25
+ def self.head(url_or_domain_name, follow: false)
26
+ request(:head, url_or_domain_name, follow: follow)
27
+ end
28
+
29
+ def self.get(url_or_domain_name, follow: false)
30
+ request(:get, url_or_domain_name, follow: follow)
31
+ end
32
+
33
+ def self.request(method, url_or_domain_name, follow: false)
34
+ url = make_url(url_or_domain_name)
35
+ response = recheck_on_timeout { connection(follow: follow).send(method, url) }
36
+ [response.status, response.headers]
37
+ end
38
+
39
+ # @return true if the given page has status 200,
40
+ # and follow a few redirects if necessary.
41
+ def self.up?(url_or_domain_name)
42
+ url = make_url(url_or_domain_name)
43
+ conn = connection(follow: true)
44
+ response = recheck_on_timeout { conn.head(url) }
45
+ response.status == 200
46
+ end
47
+
48
+ def self.valid_cert?(domain_name_or_url)
49
+ try_ssl_connection(domain_name_or_url)
50
+ true
51
+ rescue
52
+ # Not serving SSL, expired, or incorrect domain name in certificate
53
+ false
54
+ end
55
+
56
+ def self.try_ssl_connection(domain_name_or_url)
57
+ url = "https://#{remove_protocol(domain_name_or_url)}"
58
+ recheck_on_timeout { connection.head(url) }
59
+ true
60
+ end
61
+
62
+ # private
63
+
64
+ def self.connection(follow: false)
65
+ Faraday.new do |c|
66
+ c.options[:timeout] = TIMEOUT_IN_SECONDS
67
+ c.options[:open_timeout] = OPEN_TIMEOUT_IN_SECONDS
68
+ c.use(FaradayMiddleware::FollowRedirects, limit: 4) if follow
69
+ c.adapter :net_http
70
+ end
71
+ end
72
+
73
+ # Ensure that the given string is a URL,
74
+ # making it into one if necessary.
75
+ def self.make_url(url_or_domain_name)
76
+ if %r{^https?://} =~ url_or_domain_name
77
+ url_or_domain_name
78
+ else
79
+ "http://#{url_or_domain_name}"
80
+ end
81
+ end
82
+
83
+ # Normalize the input: remove 'http(s)://' if it's there
84
+ def self.remove_protocol(domain_name_or_url)
85
+ %r{^https?://(?<name>.+)$} =~ domain_name_or_url
86
+ name || domain_name_or_url
87
+ end
88
+
89
+ def self.recheck_on_timeout
90
+ yield
91
+ rescue Faraday::Error::TimeoutError
92
+ yield
93
+ end
94
+ end
95
+ end
@@ -15,8 +15,8 @@ Gem::Specification.new do |spec|
15
15
  spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
18
- spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(/^(test|spec|features)\//)
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ['lib']
21
21
  spec.required_ruby_version = '>= 2.1.0'
22
22
 
@@ -27,7 +27,8 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency 'rspec_junit_formatter', '0.2.2'
28
28
  spec.add_development_dependency 'webmock'
29
29
 
30
- spec.add_runtime_dependency 'rspec', '~> 3.0'
30
+ spec.add_runtime_dependency 'rspec-core', '~> 3.0'
31
+ spec.add_runtime_dependency 'rspec-expectations', '~> 3.0'
31
32
  spec.add_runtime_dependency 'faraday'
32
33
  spec.add_runtime_dependency 'faraday_middleware'
33
34
  spec.add_runtime_dependency 'validated_object'
@@ -3,19 +3,12 @@
3
3
 
4
4
  require 'spec_helper'
5
5
  require 'rspec/webservice_matchers'
6
- require 'rspec/webservice_matchers/util'
6
+ require 'web_test/util'
7
+
7
8
 
8
9
  SAMPLE_JSON_RESPONSE = 'spec/fixtures/pagespeed.json'
9
10
 
10
11
  describe RSpec::WebserviceMatchers::BeFast do
11
- describe '#parse' do
12
- it 'can parse the overall score' do
13
- api_response = File.read(SAMPLE_JSON_RESPONSE)
14
- data = RSpec::WebserviceMatchers::BeFast.parse(json: api_response)
15
- expect(data[:score]).to eq(85)
16
- end
17
- end
18
-
19
12
  describe '#be_fast' do
20
13
  it 'performs a Google PageSpeed Insights API query on a fast site' do
21
14
  expect('nonstop.qa').to be_fast
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
  require 'spec_helper'
3
3
  require 'rspec/webservice_matchers'
4
- require 'rspec/webservice_matchers/util'
4
+ require 'web_test/util'
5
+
5
6
 
6
7
  describe 'be_status' do
7
8
  it 'can check 200 for successful resource requests' do
@@ -50,7 +51,7 @@ describe 'be_up' do
50
51
  end
51
52
 
52
53
  it 'is available via a public API' do
53
- status = RSpec::WebserviceMatchers::Util.up?('http://www.website.com/')
54
+ status = WebTest::Util.up?('http://www.website.com/')
54
55
  expect(status).to be true
55
56
  end
56
57
 
@@ -1,15 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
  require 'spec_helper'
3
- require 'rspec/webservice_matchers/util'
3
+ require 'web_test/util'
4
+
4
5
  include RSpec::WebserviceMatchers
5
6
 
6
7
  describe '#up?' do
7
8
  it 'follows redirects when necessary' do
8
- expect(Util.up?('perm-redirector.com')).to be_truthy
9
- expect(Util.up?('temp-redirector.org')).to be_truthy
9
+ expect(WebTest::Util.up?('perm-redirector.com')).to be_truthy
10
+ expect(WebTest::Util.up?('temp-redirector.org')).to be_truthy
10
11
  end
11
12
 
12
13
  it 'retries timeout errors once' do
13
- expect(Util.up?('http://www.timeout-once.com')).to be_truthy
14
+ expect(WebTest::Util.up?('http://www.timeout-once.com')).to be_truthy
14
15
  end
15
16
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+ require 'web_test/be_fast'
3
+
4
+ RSpec.describe WebTest::BeFast do
5
+ it { is_expected.not_to be_nil }
6
+
7
+ describe '#test' do
8
+ it 'handles a fast site' do
9
+ result = WebTest::BeFast.test url: 'http://nonstop.qa'
10
+ expect(result.success?).to be true
11
+ expect(result.score).to be >= 85
12
+ end
13
+ end
14
+
15
+ describe '#parse' do
16
+ it 'can parse the overall score' do
17
+ api_response = File.read(SAMPLE_JSON_RESPONSE)
18
+ data = WebTest::BeFast.parse json: api_response
19
+ expect(data[:score]).to eq 85
20
+ end
21
+ end
22
+
23
+ describe WebTest::BeFast::TestResult do
24
+ it 'requires :success' do
25
+ expect do
26
+ WebTest::BeFast::TestResult.new {}
27
+ end.to raise_error(ArgumentError, /success/i)
28
+ end
29
+
30
+ it 'requires :score' do
31
+ expect do
32
+ WebTest::BeFast::TestResult.new { |r| r.success = true }
33
+ end.to raise_error(ArgumentError, /score/i)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+ require 'web_test/be_up'
4
+
5
+ RSpec.describe WebTest::BeUp do
6
+ it { is_expected.not_to be_nil }
7
+
8
+ describe '#test' do
9
+ it 'handles a simple 200' do
10
+ result = WebTest::BeUp.test url: 'http://www.website.com/'
11
+ expect(result.success?).to be true
12
+ expect(result.status_code).to be 200
13
+ end
14
+
15
+ it 'handles a simple 200 as a domain' do
16
+ result = WebTest::BeUp.test domain: 'www.website.com'
17
+ expect(result.success?).to be true
18
+ expect(result.status_code).to be 200
19
+ end
20
+
21
+ it 'handles a 404' do
22
+ result = WebTest::BeUp.test url: 'http://notfound.com/no.txt'
23
+ expect(result.success?).to be false
24
+ expect(result.status_code).to be 404
25
+ end
26
+ end
27
+
28
+ describe WebTest::BeUp::TestResult do
29
+ it 'requires :success' do
30
+ expect do
31
+ WebTest::BeUp::TestResult.new { |r| r.status_code = 200 }
32
+ end.to raise_error(ArgumentError)
33
+ end
34
+
35
+ it 'requires :status_code' do
36
+ expect do
37
+ WebTest::BeUp::TestResult.new { |r| r.success = true }
38
+ end.to raise_error(ArgumentError)
39
+ end
40
+
41
+ it 'accepts boolean :success & integer :status_code' do
42
+ result = WebTest::BeUp::TestResult.new do |r|
43
+ r.status_code = 404
44
+ r.success = false
45
+ end
46
+ expect(result).to be_an_instance_of(WebTest::BeUp::TestResult)
47
+ end
48
+
49
+ it 'requires boolean :success' do
50
+ expect do
51
+ WebTest::BeUp::TestResult.new do |r|
52
+ r.status_code = 200
53
+ r.success = 1
54
+ end
55
+ end.to raise_error(ArgumentError)
56
+ end
57
+
58
+ it 'requires integer :status_code' do
59
+ expect do
60
+ WebTest::BeUp::TestResult.new do |r|
61
+ r.status_code = '404'
62
+ r.success = false
63
+ end
64
+ end.to raise_error(ArgumentError)
65
+ end
66
+
67
+ it 'cannot have status < 100' do
68
+ expect do
69
+ WebTest::BeUp::TestResult.new do |r|
70
+ r.status_code = -5
71
+ r.success = false
72
+ end
73
+ end.to raise_error(ArgumentError)
74
+ end
75
+
76
+ it 'cannot have status > 510' do
77
+ expect do
78
+ WebTest::BeUp::TestResult.new do |r|
79
+ r.status_code = 511
80
+ r.success = false
81
+ end
82
+ end.to raise_error(ArgumentError)
83
+ end
84
+
85
+ it 'allows status 510' do
86
+ result = WebTest::BeUp::TestResult.new do |r|
87
+ r.status_code = 510
88
+ r.success = false
89
+ end
90
+ expect(result).to be_an_instance_of(WebTest::BeUp::TestResult)
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ require 'web_test/util'
3
+
4
+ RSpec.describe WebTest::Util do
5
+ it { is_expected.not_to be_nil }
6
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-webservice_matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.9.0
4
+ version: 4.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robb Shecter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-30 00:00:00.000000000 Z
11
+ date: 2016-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -95,7 +95,21 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rspec
98
+ name: rspec-core
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-expectations
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - "~>"
@@ -173,18 +187,21 @@ files:
173
187
  - lib/rspec/webservice_matchers/redirect_helpers.rb
174
188
  - lib/rspec/webservice_matchers/redirect_permanently_to.rb
175
189
  - lib/rspec/webservice_matchers/redirect_temporarily_to.rb
176
- - lib/rspec/webservice_matchers/util.rb
177
190
  - lib/rspec/webservice_matchers/version.rb
191
+ - lib/web_test/be_fast.rb
192
+ - lib/web_test/be_up.rb
193
+ - lib/web_test/util.rb
178
194
  - rspec-webservice_matchers.gemspec
179
195
  - spec/fixtures/pagespeed.json
180
- - spec/rspec/webservice_matchers/be_fast_spec.rb
181
- - spec/rspec/webservice_matchers/be_up_spec.rb
182
196
  - spec/rspec/webservice_matchers/page_speed_spec.rb
183
- - spec/rspec/webservice_matchers/protcol_spec.rb
197
+ - spec/rspec/webservice_matchers/protocol_spec.rb
184
198
  - spec/rspec/webservice_matchers/public_api_spec.rb
185
199
  - spec/rspec/webservice_matchers/redirect_spec.rb
186
200
  - spec/rspec/webservice_matchers/ssl_spec.rb
187
201
  - spec/spec_helper.rb
202
+ - spec/web_test/be_fast_spec.rb
203
+ - spec/web_test/be_up_spec.rb
204
+ - spec/web_test/util_spec.rb
188
205
  homepage: https://github.com/dogweather/rspec-webservice_matchers
189
206
  licenses:
190
207
  - MIT
@@ -205,17 +222,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
222
  version: '0'
206
223
  requirements: []
207
224
  rubyforge_project:
208
- rubygems_version: 2.6.2
225
+ rubygems_version: 2.5.1
209
226
  signing_key:
210
227
  specification_version: 4
211
228
  summary: Black-box web app configuration testing
212
229
  test_files:
213
230
  - spec/fixtures/pagespeed.json
214
- - spec/rspec/webservice_matchers/be_fast_spec.rb
215
- - spec/rspec/webservice_matchers/be_up_spec.rb
216
231
  - spec/rspec/webservice_matchers/page_speed_spec.rb
217
- - spec/rspec/webservice_matchers/protcol_spec.rb
232
+ - spec/rspec/webservice_matchers/protocol_spec.rb
218
233
  - spec/rspec/webservice_matchers/public_api_spec.rb
219
234
  - spec/rspec/webservice_matchers/redirect_spec.rb
220
235
  - spec/rspec/webservice_matchers/ssl_spec.rb
221
236
  - spec/spec_helper.rb
237
+ - spec/web_test/be_fast_spec.rb
238
+ - spec/web_test/be_up_spec.rb
239
+ - spec/web_test/util_spec.rb
@@ -1,97 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'faraday'
3
- require 'faraday_middleware'
4
-
5
- TIMEOUT_IN_SECONDS = 5
6
- OPEN_TIMEOUT_IN_SECONDS = 5
7
-
8
- module RSpec
9
- module WebserviceMatchers
10
- module Util
11
- def self.error_message(errors)
12
- return errors.message if errors.respond_to?(:message)
13
-
14
- errors
15
- .map(&:to_s)
16
- .join('; ')
17
- .capitalize
18
- end
19
-
20
- def self.status(url_or_domain_name, follow: false)
21
- code = head(url_or_domain_name, follow: follow)[0]
22
- return code if code != 405
23
- get(url_or_domain_name, follow: follow)[0]
24
- end
25
-
26
- def self.head(url_or_domain_name, follow: false)
27
- request(:head, url_or_domain_name, follow: follow)
28
- end
29
-
30
- def self.get(url_or_domain_name, follow: false)
31
- request(:get, url_or_domain_name, follow: follow)
32
- end
33
-
34
- def self.request(method, url_or_domain_name, follow: false)
35
- url = make_url(url_or_domain_name)
36
- response = recheck_on_timeout { connection(follow: follow).send(method, url) }
37
- [response.status, response.headers]
38
- end
39
-
40
- # @return true if the given page has status 200,
41
- # and follow a few redirects if necessary.
42
- def self.up?(url_or_domain_name)
43
- url = make_url(url_or_domain_name)
44
- conn = connection(follow: true)
45
- response = recheck_on_timeout { conn.head(url) }
46
- response.status == 200
47
- end
48
-
49
- def self.valid_cert?(domain_name_or_url)
50
- try_ssl_connection(domain_name_or_url)
51
- true
52
- rescue
53
- # Not serving SSL, expired, or incorrect domain name in certificate
54
- false
55
- end
56
-
57
- def self.try_ssl_connection(domain_name_or_url)
58
- url = "https://#{remove_protocol(domain_name_or_url)}"
59
- recheck_on_timeout { connection.head(url) }
60
- true
61
- end
62
-
63
- # private
64
-
65
- def self.connection(follow: false)
66
- Faraday.new do |c|
67
- c.options[:timeout] = TIMEOUT_IN_SECONDS
68
- c.options[:open_timeout] = OPEN_TIMEOUT_IN_SECONDS
69
- c.use(FaradayMiddleware::FollowRedirects, limit: 4) if follow
70
- c.adapter :net_http
71
- end
72
- end
73
-
74
- # Ensure that the given string is a URL,
75
- # making it into one if necessary.
76
- def self.make_url(url_or_domain_name)
77
- if %r{^https?://} =~ url_or_domain_name
78
- url_or_domain_name
79
- else
80
- "http://#{url_or_domain_name}"
81
- end
82
- end
83
-
84
- # Normalize the input: remove 'http(s)://' if it's there
85
- def self.remove_protocol(domain_name_or_url)
86
- %r{^https?://(?<name>.+)$} =~ domain_name_or_url
87
- name || domain_name_or_url
88
- end
89
-
90
- def self.recheck_on_timeout
91
- yield
92
- rescue Faraday::Error::TimeoutError
93
- yield
94
- end
95
- end
96
- end
97
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'rspec/webservice_matchers/be_fast'
4
- include RSpec::WebserviceMatchers
5
-
6
- describe BeFast do
7
- describe BeFast::TestResult do
8
- it 'requires :success' do
9
- expect {
10
- BeFast::TestResult.new {}
11
- }.to raise_error(ArgumentError, /success/i)
12
- end
13
-
14
- it 'requires :score' do
15
- expect {
16
- BeFast::TestResult.new { |r| r.success = true }
17
- }.to raise_error(ArgumentError, /score/i)
18
- end
19
- end
20
-
21
- describe '#test' do
22
- it 'handles a fast site' do
23
- result = BeFast.test url: 'http://nonstop.qa'
24
- expect( result.success? ).to be true
25
- expect( result.score ).to be >= 85
26
- end
27
- end
28
- end
@@ -1,94 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'rspec/webservice_matchers/be_up'
4
-
5
- include RSpec::WebserviceMatchers
6
-
7
- describe BeUp do
8
- describe '#test' do
9
- it 'handles a simple 200' do
10
- result = BeUp.test url: 'http://www.website.com/'
11
- expect( result.success? ).to be true
12
- expect( result.status_code ).to be 200
13
- end
14
-
15
- it 'handles a simple 200 as a domain' do
16
- result = BeUp.test domain: 'www.website.com'
17
- expect( result.success? ).to be true
18
- expect( result.status_code ).to be 200
19
- end
20
-
21
- it 'handles a 404' do
22
- result = BeUp.test url: 'http://notfound.com/no.txt'
23
- expect( result.success? ).to be false
24
- expect( result.status_code ).to be 404
25
- end
26
- end
27
-
28
-
29
- describe BeUp::TestResult do
30
- it 'requires :success' do
31
- expect {
32
- BeUp::TestResult.new { |r| r.status_code = 200 }
33
- }.to raise_error(ArgumentError)
34
- end
35
-
36
- it 'requires :status_code' do
37
- expect {
38
- BeUp::TestResult.new { |r| r.success = true }
39
- }.to raise_error(ArgumentError)
40
- end
41
-
42
- it 'accepts boolean :success & integer :status_code' do
43
- result = BeUp::TestResult.new do |r|
44
- r.status_code = 404
45
- r.success = false
46
- end
47
- expect( result ).to be_an_instance_of(BeUp::TestResult)
48
- end
49
-
50
- it 'requires boolean :success' do
51
- expect {
52
- BeUp::TestResult.new do |r|
53
- r.status_code = 200
54
- r.success = 1
55
- end
56
- }.to raise_error(ArgumentError)
57
- end
58
-
59
- it 'requires integer :status_code' do
60
- expect {
61
- BeUp::TestResult.new do |r|
62
- r.status_code = '404'
63
- r.success = false
64
- end
65
- }.to raise_error(ArgumentError)
66
- end
67
-
68
- it 'cannot have status < 100' do
69
- expect {
70
- BeUp::TestResult.new do |r|
71
- r.status_code = -5
72
- r.success = false
73
- end
74
- }.to raise_error(ArgumentError)
75
- end
76
-
77
- it 'cannot have status > 510' do
78
- expect {
79
- BeUp::TestResult.new do |r|
80
- r.status_code = 511
81
- r.success = false
82
- end
83
- }.to raise_error(ArgumentError)
84
- end
85
-
86
- it 'allows status 510' do
87
- result = BeUp::TestResult.new do |r|
88
- r.status_code = 510
89
- r.success = false
90
- end
91
- expect( result ).to be_an_instance_of(BeUp::TestResult)
92
- end
93
- end
94
- end