rspec-webservice_matchers 4.12.0 → 4.12.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +10 -13
- data/circle.yml +2 -0
- data/lib/rspec/webservice_matchers/enforce_https_everywhere.rb +2 -2
- data/lib/rspec/webservice_matchers/version.rb +1 -1
- data/lib/web_test/util.rb +10 -0
- data/spec/rspec/webservice_matchers/ssl_spec.rb +36 -16
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 26984e338901a15c84892a0d548befcd5b659013ef8beeb6c051e2ac88c823e9
|
4
|
+
data.tar.gz: 4b84d6a436be5c88ee3243e6c97a9aec576ce797c835bee0c8c8cd0ea100e3b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 750bd3513468e936ae341254fa4c3af33694620dd3d05811a28bed0e458c50ad9942dfe7ae0a75fc0f48ff80815c6bb9cf813fe266e295549e675eeea4261a0f
|
7
|
+
data.tar.gz: 9e56574a2d4a373cbe789a28fd46141ab18338335f67290ce5c67afb91ad82e3f9e5094aded4bc9a9cb8eaea26bd812fd61bdda217bf622db13eddf6769b400a
|
data/README.md
CHANGED
@@ -9,13 +9,10 @@ A [gem](https://rubygems.org/gems/rspec-webservice_matchers) to black-box test a
|
|
9
9
|
expect('github.com').to have_a_valid_cert
|
10
10
|
```
|
11
11
|
|
12
|
-
It's a tool for doing **Test Driven Devops** (I just made that up). See [
|
12
|
+
It's a tool for doing **Test Driven Devops** (I just made that up). See [my introductory blog post](http://robb.weblaws.org/2014/01/16/new-open-source-library-for-test-driven-devops/) for the backstory.
|
13
13
|
|
14
14
|
This library takes a minimalist approach: it simply adds new RSpec matchers. Therefore, you can use your own RSpec writing style; there's no new DSL to learn.
|
15
15
|
|
16
|
-
If you're too busy to install this and code the tests by hand, you can try the [new hosted service which runs these RSpec matchers in the cloud](http://nonstop.qa): [![QA Status](http://nonstop.qa/projects/20/badges/default.svg)](http://nonstop.qa/projects/20-nonstop-qa)
|
17
|
-
|
18
|
-
|
19
16
|
|
20
17
|
|
21
18
|
Installation
|
@@ -28,15 +25,15 @@ What You Get
|
|
28
25
|
------------
|
29
26
|
These new RSpec matchers:
|
30
27
|
|
31
|
-
| Notes
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
28
|
+
| | Notes
|
29
|
+
|-------------------------------|------------------------------------------------
|
30
|
+
|**be_up** | Looks for a 200, but will follow up to four redirects
|
31
|
+
|**be_fast** | Checks for Google [PageSpeed](https://developers.google.com/speed/pagespeed/insights/) score >= 85. Expects the environment variable `WEBSERVICE_MATCHER_INSIGHTS_KEY` to contain a [Google "server" API key](https://developers.google.com/speed/docs/insights/v2/getting-started) with PageSpeed Insights API enabled.
|
32
|
+
|**enforce_https_everywhere** | Passes if the site will _only_ allow SSL connections. See the [EFF project, HTTPS Everywhere](https://www.eff.org/https-everywhere)
|
33
|
+
|**have_a_valid_cert** | Will fail if there's no cert, or it's expired or incorrectly configured
|
34
|
+
|**be_status** | A low-level matcher to explicitly check for a 200, 503, or any other code
|
35
|
+
|**redirect_permanently_to** | Checks for 301 and a correct destination URL
|
36
|
+
|**redirect_temporarily_to** | Checks for 302 or 307 and a correct destination
|
40
37
|
|
41
38
|
|
42
39
|
Example
|
data/circle.yml
CHANGED
@@ -15,9 +15,9 @@ module RSpec
|
|
15
15
|
include RedirectHelpers
|
16
16
|
error_msg = status = final_protocol = has_valid_cert = nil
|
17
17
|
|
18
|
-
match do |
|
18
|
+
match do |domain_name_or_url|
|
19
19
|
begin
|
20
|
-
status, new_url, final_protocol = get_info(
|
20
|
+
status, new_url, final_protocol = get_info(WebTest::Util.make_domain_name(domain_name_or_url))
|
21
21
|
meets_expectations?(status, final_protocol, WebTest::Util.valid_cert?(new_url))
|
22
22
|
rescue Faraday::Error::ConnectionFailed
|
23
23
|
error_msg = 'Connection failed'
|
data/lib/web_test/util.rb
CHANGED
@@ -80,6 +80,16 @@ module WebTest
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
+
# Return just the domain name portion of a URL if
|
84
|
+
# it's simply of the form http://name.tld
|
85
|
+
def self.make_domain_name(url_or_domain_name)
|
86
|
+
if %r{^https?://(.+)} =~ url_or_domain_name
|
87
|
+
$1
|
88
|
+
else
|
89
|
+
url_or_domain_name
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
83
93
|
# Normalize the input: remove 'http(s)://' if it's there
|
84
94
|
def self.remove_protocol(domain_name_or_url)
|
85
95
|
%r{^https?://(?<name>.+)$} =~ domain_name_or_url
|
@@ -25,18 +25,18 @@ describe 'SSL tests' do
|
|
25
25
|
end.to fail_matching(/(unreachable)|(no route to host)|(connection refused)/i)
|
26
26
|
end
|
27
27
|
|
28
|
-
it "provides a relevant error message when the domain name doesn't exist" do
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
28
|
+
# it "provides a relevant error message when the domain name doesn't exist" do
|
29
|
+
# expect do
|
30
|
+
# expect('sdfgkljhsdfghjkhsdfgj.edu').to have_a_valid_cert
|
31
|
+
# end.to fail_matching(/not known/i)
|
32
|
+
# end
|
33
33
|
|
34
|
-
it "provides a good error message when it's a redirect" do
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
34
|
+
# it "provides a good error message when it's a redirect" do
|
35
|
+
# expect do
|
36
|
+
# # Can't figure out how to do this with WebMock.
|
37
|
+
# expect('bloc.io').to have_a_valid_cert
|
38
|
+
# end.to fail_matching(/redirect/i)
|
39
|
+
# end
|
40
40
|
|
41
41
|
# TODO: Find a good way to test this.
|
42
42
|
# it 'provides a good error message if the request times out' do
|
@@ -49,19 +49,39 @@ describe 'SSL tests' do
|
|
49
49
|
# See https://www.eff.org/https-everywhere
|
50
50
|
describe 'enforce_https_everywhere' do
|
51
51
|
it 'passes when http requests are redirected to valid https urls' do
|
52
|
-
expect('eff.org').to enforce_https_everywhere
|
52
|
+
expect('www.eff.org').to enforce_https_everywhere
|
53
53
|
end
|
54
54
|
|
55
|
-
it '
|
55
|
+
it 'passes when given an https url' do
|
56
|
+
expect('https://www.eff.org').to enforce_https_everywhere
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'passes when given an http url' do
|
60
|
+
expect('http://www.eff.org').to enforce_https_everywhere
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
it 'provides a relevant error code' do
|
56
65
|
expect do
|
57
66
|
expect('www.psu.edu').to enforce_https_everywhere
|
58
67
|
end.to fail_matching(/200/)
|
59
68
|
end
|
60
69
|
|
61
|
-
it
|
70
|
+
it 'provides a relevant error code with https url' do
|
71
|
+
expect do
|
72
|
+
expect('https://www.psu.edu').to enforce_https_everywhere
|
73
|
+
end.to fail_matching(/200/)
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'provides a relevant error code with http url' do
|
62
77
|
expect do
|
63
|
-
expect('
|
64
|
-
end.to fail_matching(/
|
78
|
+
expect('http://www.psu.edu').to enforce_https_everywhere
|
79
|
+
end.to fail_matching(/200/)
|
65
80
|
end
|
81
|
+
# it "provides a relevant error message when the domain name doesn't exist" do
|
82
|
+
# expect do
|
83
|
+
# expect('asdhfjkalsdhfjklasdfhjkasdhfl.com').to enforce_https_everywhere
|
84
|
+
# end.to fail_matching(/connection failed/i)
|
85
|
+
# end
|
66
86
|
end
|
67
87
|
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.12.
|
4
|
+
version: 4.12.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robb Shecter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -224,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
224
224
|
version: '0'
|
225
225
|
requirements: []
|
226
226
|
rubyforge_project:
|
227
|
-
rubygems_version: 2.
|
227
|
+
rubygems_version: 2.7.4
|
228
228
|
signing_key:
|
229
229
|
specification_version: 4
|
230
230
|
summary: Black-box web app configuration testing
|