hiroeorz-rspec-response-code-matchers 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 hiroeorz
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,41 @@
1
+ = rspec-response-code-matcher
2
+
3
+ * http://github.com/hiroeorz/rspec-response-code-matchers/tree/master
4
+ * mailto:hiroeorz@gmail.com
5
+
6
+ == DESCRIPTION:
7
+
8
+ RSpecResponseCodeMatchers is rspec's custom spec matcher, that checking http response code.
9
+
10
+
11
+ == SYNOPSIS:
12
+
13
+ target is Integer or Object, that defined "status" method.
14
+
15
+ require "rspec_response_code_matchers"
16
+
17
+ 500.should be_internal_server_error
18
+ 404.should be_not_found
19
+
20
+ ===If you use merb rspec:
21
+
22
+ in spec/spec_helper.rb:
23
+ require "rspec_response_code_matchers"
24
+
25
+ in spec/requests/sample_helper.rb:
26
+
27
+ describe "/sample/show" do
28
+ before(:each) do
29
+ @response = request("/sample/show")
30
+ end
31
+
32
+ it "should response code 301(redirect)" do
33
+ @response.should be_redirect # match 3xx
34
+ @response.should be_moved_permanently # match 301
35
+ end
36
+ end
37
+
38
+
39
+ == Copyright
40
+
41
+ Copyright (c) 2009 hiroeorz. See LICENSE for details.
@@ -0,0 +1,48 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "rspec-response-code-matchers"
8
+ gem.summary = %Q{TODO}
9
+ gem.email = "hiroe.orz@gmail.com"
10
+ gem.homepage = "http://github.com/hiroeorz/rspec-response-code-matchers"
11
+ gem.authors = ["hiroeorz"]
12
+
13
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
14
+ end
15
+ rescue LoadError
16
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
17
+ end
18
+
19
+ require 'spec/rake/spectask'
20
+ Spec::Rake::SpecTask.new(:spec) do |spec|
21
+ spec.libs << 'lib' << 'spec'
22
+ spec.spec_files = FileList['spec/**/*_spec.rb']
23
+ end
24
+
25
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
26
+ spec.libs << 'lib' << 'spec'
27
+ spec.pattern = 'spec/**/*_spec.rb'
28
+ spec.rcov = true
29
+ end
30
+
31
+
32
+ task :default => :spec
33
+
34
+ require 'rake/rdoctask'
35
+ Rake::RDocTask.new do |rdoc|
36
+ if File.exist?('VERSION.yml')
37
+ config = YAML.load(File.read('VERSION.yml'))
38
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
39
+ else
40
+ version = ""
41
+ end
42
+
43
+ rdoc.rdoc_dir = 'rdoc'
44
+ rdoc.title = "rspec-response-code-matchers #{version}"
45
+ rdoc.rdoc_files.include('README*')
46
+ rdoc.rdoc_files.include('lib/**/*.rb')
47
+ end
48
+
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 0
3
+ :minor: 9
4
+ :patch: 1
@@ -0,0 +1,197 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class BeStatus
4
+ def initialize(status)
5
+ @status = status
6
+ end
7
+
8
+ def matches?(target)
9
+ if defined?(target.status)
10
+ @target = target.status
11
+ else
12
+ @target = target
13
+ end
14
+
15
+ if @status.is_a?(Range)
16
+ return @status.include?(@target)
17
+ else
18
+ return @target == @status
19
+ end
20
+ end
21
+
22
+ def failure_message_for_should
23
+ "expected #{@target} to be Status #{@status}"
24
+ end
25
+
26
+ def failure_message_for_should_not
27
+ "expected #{@target} not to be in Status #{@status}"
28
+ end
29
+ end
30
+
31
+ def be_information
32
+ BeStatus.new(100..101)
33
+ end
34
+
35
+ def be_continue
36
+ BeStatus.new(100)
37
+ end
38
+
39
+ def be_switching_protocols
40
+ BeStatus.new(101)
41
+ end
42
+
43
+ # def be_successful
44
+ # BeStatus.new(200..206)
45
+ # end
46
+
47
+ def be_request_ok
48
+ BeStatus.new(200)
49
+ end
50
+
51
+ def be_resource_created
52
+ BeStatus.new(201)
53
+ end
54
+
55
+ def be_request_accepted
56
+ BeStatus.new(202)
57
+ end
58
+
59
+ def be_non_authoritative_information
60
+ BeStatus.new(203)
61
+ end
62
+
63
+ def be_no_content
64
+ BeStatus.new(204)
65
+ end
66
+
67
+ def be_reset_content
68
+ BeStatus.new(205)
69
+ end
70
+
71
+ def be_partial_content
72
+ BeStatus.new(206)
73
+ end
74
+
75
+ def be_redirect
76
+ BeStatus.new(300..305)
77
+ end
78
+
79
+ def be_multiple_choices
80
+ BeStatus.new(300)
81
+ end
82
+
83
+ def be_moved_permanently
84
+ BeStatus.new(301)
85
+ end
86
+
87
+ def be_moved_temporarily
88
+ BeStatus.new(302)
89
+ end
90
+
91
+ def be_see_other
92
+ BeStatus.new(303)
93
+ end
94
+
95
+ def be_not_modified
96
+ BeStatus.new(304)
97
+ end
98
+
99
+ def be_use_proxy
100
+ BeStatus.new(305)
101
+ end
102
+
103
+ def be_client_error
104
+ BeStatus.new(400..415)
105
+ end
106
+
107
+ def be_bad_request
108
+ BeStatus.new(400)
109
+ end
110
+
111
+ def be_unauthorized
112
+ BeStatus.new(401)
113
+ end
114
+
115
+ def be_payment_required
116
+ BeStatus.new(402)
117
+ end
118
+
119
+ def be_forbidden
120
+ BeStatus.new(403)
121
+ end
122
+
123
+ def be_not_found
124
+ BeStatus.new(404)
125
+ end
126
+
127
+ def be_method_not_allowed
128
+ BeStatus.new(405)
129
+ end
130
+
131
+ def be_not_acceptable
132
+ BeStatus.new(406)
133
+ end
134
+
135
+ def be_proxy_authentication_required
136
+ BeStatus.new(407)
137
+ end
138
+
139
+ def be_request_timeout
140
+ BeStatus.new(408)
141
+ end
142
+
143
+ def be_request_conflict
144
+ BeStatus.new(409)
145
+ end
146
+
147
+ def be_resource_is_gone
148
+ BeStatus.new(410)
149
+ end
150
+
151
+ def be_length_required
152
+ BeStatus.new(411)
153
+ end
154
+
155
+ def be_precondition_failed
156
+ BeStatus.new(412)
157
+ end
158
+
159
+ def be_request_entity_too_large
160
+ BeStatus.new(413)
161
+ end
162
+
163
+ def be_request_uri_too_large
164
+ BeStatus.new(414)
165
+ end
166
+
167
+ def be_unsupported_media_type
168
+ BeStatus.new(415)
169
+ end
170
+
171
+ def be_server_error
172
+ BeStatus.new(500..505)
173
+ end
174
+
175
+ def be_internal_server_error
176
+ BeStatus.new(500)
177
+ end
178
+
179
+ def be_not_implemented
180
+ BeStatus.new(501)
181
+ end
182
+
183
+ def be_bad_gateway
184
+ BeStatus.new(502)
185
+ end
186
+
187
+ def be_service_unavailable
188
+ BeStatus.new(503)
189
+ end
190
+
191
+ def be_gateway_timeout
192
+ BeStatus.new(504)
193
+ end
194
+
195
+ def be_http_version_not_supported
196
+ BeStatus.new(505)
197
+ end
@@ -0,0 +1,82 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe "RspecResponseCodeMatchers" do
4
+ it "should information response" do
5
+ 100.should be_information
6
+ 200.should_not be_information
7
+
8
+ 100.should be_continue
9
+ 101.should be_switching_protocols
10
+
11
+ 303.should_not be_continue
12
+ end
13
+
14
+ it "should success response" do
15
+ 200.should be_request_ok
16
+ 201.should be_resource_created
17
+ 202.should be_request_accepted
18
+ 203.should be_non_authoritative_information
19
+ 204.should be_no_content
20
+ 205.should be_reset_content
21
+ 206.should be_partial_content
22
+
23
+ 506.should_not be_partial_content
24
+ end
25
+
26
+ it "should redirect response" do
27
+ 302.should be_redirect
28
+ 404.should_not be_redirect
29
+
30
+ 300.should be_multiple_choices
31
+ 301.should be_moved_permanently
32
+ 302.should be_moved_temporarily
33
+
34
+ 502.should_not be_moved_temporarily
35
+ end
36
+
37
+ it "should client error response" do
38
+ MockResponse.new(404).should be_client_error
39
+ MockResponse.new(504).should_not be_client_error
40
+
41
+ MockResponse.new(400).should be_bad_request
42
+ MockResponse.new(401).should be_unauthorized
43
+ MockResponse.new(402).should be_payment_required
44
+ MockResponse.new(403).should be_forbidden
45
+ MockResponse.new(404).should be_not_found
46
+ MockResponse.new(405).should be_method_not_allowed
47
+ MockResponse.new(406).should be_not_acceptable
48
+ MockResponse.new(407).should be_proxy_authentication_required
49
+ MockResponse.new(408).should be_request_timeout
50
+ MockResponse.new(409).should be_request_conflict
51
+ MockResponse.new(410).should be_resource_is_gone
52
+ MockResponse.new(411).should be_length_required
53
+ MockResponse.new(412).should be_precondition_failed
54
+ MockResponse.new(413).should be_request_entity_too_large
55
+ MockResponse.new(414).should be_request_uri_too_large
56
+ MockResponse.new(415).should be_unsupported_media_type
57
+
58
+ MockResponse.new(515).should_not be_unsupported_media_type
59
+ end
60
+
61
+ it "should server error response" do
62
+ MockResponse.new(504).should be_server_error
63
+ MockResponse.new(404).should_not be_server_error
64
+
65
+ MockResponse.new(500).should be_internal_server_error
66
+ MockResponse.new(501).should be_not_implemented
67
+ MockResponse.new(502).should be_bad_gateway
68
+ MockResponse.new(503).should be_service_unavailable
69
+ MockResponse.new(504).should be_gateway_timeout
70
+ MockResponse.new(505).should be_http_version_not_supported
71
+
72
+ MockResponse.new(405).should_not be_http_version_not_supported
73
+ end
74
+ end
75
+
76
+ class MockResponse
77
+ attr_accessor :status
78
+
79
+ def initialize(status)
80
+ @status = status
81
+ end
82
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec'
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ require 'rspec_response_code_matchers'
6
+
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hiroeorz-rspec-response-code-matchers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.1
5
+ platform: ruby
6
+ authors:
7
+ - hiroeorz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-15 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: hiroe.orz@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - LICENSE
24
+ - README.rdoc
25
+ files:
26
+ - LICENSE
27
+ - README.rdoc
28
+ - Rakefile
29
+ - VERSION.yml
30
+ - lib/rspec_response_code_matchers.rb
31
+ - spec/rspec_response_code_matchers_spec.rb
32
+ - spec/spec_helper.rb
33
+ has_rdoc: true
34
+ homepage: http://github.com/hiroeorz/rspec-response-code-matchers
35
+ post_install_message:
36
+ rdoc_options:
37
+ - --charset=UTF-8
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ version:
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: "0"
51
+ version:
52
+ requirements: []
53
+
54
+ rubyforge_project:
55
+ rubygems_version: 1.2.0
56
+ signing_key:
57
+ specification_version: 2
58
+ summary: TODO
59
+ test_files:
60
+ - spec/spec_helper.rb
61
+ - spec/rspec_response_code_matchers_spec.rb