rspec-webservice_matchers 1.4.3 → 1.4.4

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: e5e2f461f7c91199840fe5296000e9592ca4f7e3
4
- data.tar.gz: 6d62373fefe398e53de5294763fcc9b2ccd612b4
3
+ metadata.gz: 61e21d1a503a63265b3ff7608ac69a75daa846b6
4
+ data.tar.gz: 89c6aa33d5e010a2835e30b1d0a99a4d830587eb
5
5
  SHA512:
6
- metadata.gz: a63683fe144143b747a1b78dd57e5761ef38a2a32aba37867808e3388a3aa7efd3739592f85714f6e398d2be0f5e7ffc87e63dbfa28ddf24f68ba18c649168a8
7
- data.tar.gz: 9105da66765a264943fa94e2b14bc64a90ab02e8f05201396e62258c0a7510b2546d5f4a0010dcc6d1041f964c5e59e3a93f7db9cfb2ce57037a5810f9447e0f
6
+ metadata.gz: dc905ac397698db66464b220afe03b19aa704e7cf4d83d17bdd5f5cbf914ff349ffdde0f1796678f8dab7cfc6677e8b93879ca5ccd553d6fcf141f0164604503
7
+ data.tar.gz: 25380cba323ad7aac3d13b6b27533d0d0fe88b0dcd0bd83359b2c045673430a8bc088e7a1a6849628f4332d3468036e1ad4e789fafad6d1ff192f90d2760abbf
@@ -26,6 +26,7 @@ module RSpec
26
26
  end
27
27
  end
28
28
 
29
+
29
30
  # Return true if the given page has status 200,
30
31
  # and follow a few redirects if necessary.
31
32
  def self.up?(url_or_domain_name)
@@ -36,16 +37,42 @@ module RSpec
36
37
  end
37
38
 
38
39
 
40
+ def self.try_ssl_connection(domain_name_or_url)
41
+ # Normalize the input: remove 'http(s)://' if it's there
42
+ if %r|^https?://(.+)$| === domain_name_or_url
43
+ domain_name_or_url = $1
44
+ end
45
+ connection.head("https://#{domain_name_or_url}")
46
+ end
47
+
48
+
39
49
  # RSpec Custom Matchers ###########################################
40
50
  # See https://www.relishapp.com/rspec/rspec-expectations/v/2-3/docs/custom-matchers/define-matcher
41
51
 
42
52
  # Test whether https is correctly implemented
43
53
  RSpec::Matchers.define :have_a_valid_cert do
54
+ error_message = nil
55
+
44
56
  match do |domain_name_or_url|
45
- RSpec::WebserviceMatchers.has_valid_ssl_cert?(domain_name_or_url)
57
+ begin
58
+ RSpec::WebserviceMatchers.try_ssl_connection(domain_name_or_url)
59
+ true
60
+ rescue Exception => e
61
+ error_message = e.message
62
+ false
63
+ end
64
+ end
65
+
66
+ failure_message_for_should do
67
+ error_message
68
+ end
69
+
70
+ failure_message_for_should_not do
71
+ error_message
46
72
  end
47
73
  end
48
74
 
75
+
49
76
  # Pass successfully if we get a 301 to the place we intend.
50
77
  RSpec::Matchers.define :redirect_permanently_to do |expected|
51
78
  match do |url_or_domain_name|
@@ -76,36 +103,47 @@ module RSpec
76
103
  # 2. to an https url
77
104
  # 3. which is correctly configured
78
105
  RSpec::Matchers.define :enforce_https_everywhere do
79
- actual_status = actual_protocol = actual_valid_cert = nil
106
+ error_msg = actual_status = actual_protocol = actual_valid_cert = nil
80
107
 
81
108
  match do |domain_name|
82
- response = RSpec::WebserviceMatchers.connection.head("http://#{domain_name}")
83
- new_url = response.headers['location']
84
-
85
- actual_status = response.status
86
- if new_url =~ /^(https?)/
87
- actual_protocol = $1
109
+ begin
110
+ response = RSpec::WebserviceMatchers.connection.head("http://#{domain_name}")
111
+ new_url = response.headers['location']
112
+ actual_status = response.status
113
+ if new_url =~ /^(https?)/
114
+ actual_protocol = $1
115
+ end
116
+ actual_valid_cert = RSpec::WebserviceMatchers.has_valid_ssl_cert?(new_url)
117
+ (actual_status == 301) &&
118
+ (actual_protocol == 'https') &&
119
+ (actual_valid_cert == true)
120
+ rescue Faraday::Error::ConnectionFailed => e
121
+ error_msg = "Connection failed"
122
+ false
88
123
  end
89
- actual_valid_cert = RSpec::WebserviceMatchers.has_valid_ssl_cert?(new_url)
90
-
91
- (actual_status == 301) &&
92
- (actual_protocol == 'https') &&
93
- (actual_valid_cert == true)
94
124
  end
95
125
 
126
+
127
+ # Create a compound error message listing all of the
128
+ # relevant actual values received.
96
129
  failure_message_for_should do
97
- mesgs = []
98
- if actual_status != 301
99
- mesgs << "Received status #{actual_status} instead of 301"
100
- end
101
- if !actual_protocol.nil? && actual_protocol != 'https'
102
- mesgs << "Destination uses protocol #{actual_protocol.upcase}"
130
+ if !error_msg.nil?
131
+ error_msg
132
+ else
133
+ mesgs = []
134
+ if actual_status != 301
135
+ mesgs << "received status #{actual_status} instead of 301"
136
+ end
137
+ if !actual_protocol.nil? && actual_protocol != 'https'
138
+ mesgs << "destination uses protocol #{actual_protocol.upcase}"
139
+ end
140
+ if ! actual_valid_cert
141
+ mesgs << "there's no valid SSL certificate"
142
+ end
143
+ mesgs.join('; ').capitalize
103
144
  end
104
- if ! actual_valid_cert
105
- mesgs << "There's no valid SSL certificate"
106
- end
107
- mesgs.join('; ')
108
145
  end
146
+
109
147
  end
110
148
 
111
149
 
@@ -1,5 +1,5 @@
1
1
  module RSpec
2
2
  module WebserviceMatchers
3
- VERSION = "1.4.3"
3
+ VERSION = "1.4.4"
4
4
  end
5
5
  end
@@ -1,3 +1,4 @@
1
+ require 'spec_helper'
1
2
  require 'rspec/webservice_matchers'
2
3
 
3
4
  # VCR may be the tool to use for this. Can it handle https? Would that work?
@@ -15,6 +16,18 @@ describe 'have_a_valid_cert matcher' do
15
16
  expect('www.psu.edu').to have_a_valid_cert
16
17
  }.to fail
17
18
  end
19
+
20
+ it 'provides a relevant error message' do
21
+ expect {
22
+ expect('www.psu.edu').to have_a_valid_cert
23
+ }.to fail_matching(/no route to host/i)
24
+ end
25
+
26
+ it "provides a relevant error message when the domain name doesn't exist" do
27
+ expect {
28
+ expect('sdfgkljhsdfghjkhsdfgj.edu').to have_a_valid_cert
29
+ }.to fail_matching(/not known/i)
30
+ end
18
31
  end
19
32
 
20
33
 
@@ -29,4 +42,10 @@ describe 'enforce_https_everywhere' do
29
42
  expect('www.psu.edu').to enforce_https_everywhere
30
43
  }.to fail_matching(/200/)
31
44
  end
45
+
46
+ it "provides a relevant error message when the domain name doesn't exist" do
47
+ expect {
48
+ expect('asdhfjkalsdhfjklasdfhjkasdhfl.com').to enforce_https_everywhere
49
+ }.to fail_matching(/connection failed/i)
50
+ end
32
51
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-webservice_matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.3
4
+ version: 1.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robb Shecter