response_code_matchers 0.0.1

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.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in response_code_matchers.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Ryo NAKAMURA
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,116 @@
1
+ # ResponseCodeMatchers
2
+
3
+ Provide rspec matchers to match http response code.
4
+ The receiver of this matcher should have `#code` method which returns http status code.
5
+
6
+ ## Installation
7
+ ```
8
+ $ gem install response_code_matchers
9
+ ```
10
+
11
+ ## Usage
12
+ In Rails example:
13
+
14
+ ```ruby
15
+ # spec/spec_helper.rb
16
+ require "response_code_matchers"
17
+
18
+ RSpec.configure do |config|
19
+ config.include ResponseCodeMatchers
20
+ end
21
+ ```
22
+
23
+ ```ruby
24
+ # spec/controllers/blogs_controller.rb
25
+ describe BlogsController do
26
+ describe "#create" do
27
+ subject do
28
+ post :create, params
29
+ end
30
+
31
+ let(:params) do
32
+ { :title => "title", :body => "body", :token => "token", :user_id => 1 }
33
+ end
34
+
35
+ # 201
36
+ context "with valid token" do
37
+ it { should be_created }
38
+ end
39
+
40
+ # 400
41
+ context "without user_id" do
42
+ before do
43
+ params.delete(:user_id)
44
+ end
45
+
46
+ it { should be_bad_request }
47
+ end
48
+
49
+ # 401
50
+ context "with invalid token" do
51
+ before do
52
+ params[:token] = "invalid"
53
+ end
54
+
55
+ it { should be_unauthorized }
56
+ end
57
+ end
58
+ end
59
+ ```
60
+
61
+
62
+ ## Matchers
63
+ ```ruby
64
+ 100: response.should be_continue
65
+ 101: response.should be_switching_protocols
66
+ 102: response.should be_processing
67
+ 200: response.should be_ok
68
+ 201: response.should be_created
69
+ 202: response.should be_accepted
70
+ 203: response.should be_non_authoritative_information
71
+ 204: response.should be_no_content
72
+ 205: response.should be_reset_content
73
+ 206: response.should be_partial_content
74
+ 207: response.should be_multi_status
75
+ 226: response.should be_im_used
76
+ 300: response.should be_multiple_choices
77
+ 301: response.should be_moved_permanently
78
+ 302: response.should be_found
79
+ 303: response.should be_see_other
80
+ 304: response.should be_not_modified
81
+ 305: response.should be_use_proxy
82
+ 306: response.should be_reserved
83
+ 307: response.should be_temporary_redirect
84
+ 400: response.should be_bad_request
85
+ 401: response.should be_unauthorized
86
+ 402: response.should be_payment_required
87
+ 403: response.should be_forbidden
88
+ 404: response.should be_not_found
89
+ 405: response.should be_method_not_allowed
90
+ 406: response.should be_not_acceptable
91
+ 407: response.should be_proxy_authentication_required
92
+ 408: response.should be_request_timeout
93
+ 409: response.should be_conflict
94
+ 410: response.should be_gone
95
+ 411: response.should be_length_required
96
+ 412: response.should be_precondition_failed
97
+ 413: response.should be_request_entity_too_large
98
+ 414: response.should be_request_uri_too_long
99
+ 415: response.should be_unsupported_media_type
100
+ 416: response.should be_requested_range_not_satisfiable
101
+ 417: response.should be_expectation_failed
102
+ 418: response.should be_im_a_teapot
103
+ 422: response.should be_unprocessable_entity
104
+ 423: response.should be_locked
105
+ 424: response.should be_failed_dependency
106
+ 426: response.should be_upgrade_required
107
+ 500: response.should be_internal_server_error
108
+ 501: response.should be_not_implemented
109
+ 502: response.should be_bad_gateway
110
+ 503: response.should be_service_unavailable
111
+ 504: response.should be_gateway_timeout
112
+ 505: response.should be_http_version_not_supported
113
+ 506: response.should be_variant_also_negotiates
114
+ 507: response.should be_insufficient_storage
115
+ 510: response.should be_not_extended
116
+ ```
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,3 @@
1
+ module ResponseCodeMatchers
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,35 @@
1
+ require "response_code_matchers/version"
2
+ require "rack"
3
+
4
+ module ResponseCodeMatchers
5
+ Rack::Utils::SYMBOL_TO_STATUS_CODE.each do |name, code|
6
+ name = name.to_s.gsub("'", "")
7
+ define_method("be_#{name}") do
8
+ ResponseCodeMatcher.new(code.to_s, name)
9
+ end
10
+ end
11
+
12
+ class ResponseCodeMatcher
13
+ def initialize(expected, name)
14
+ @expected = expected
15
+ @description = name.to_s.gsub("_", " ")
16
+ end
17
+
18
+ def matches?(response)
19
+ @actual = response.code
20
+ @actual == @expected
21
+ end
22
+
23
+ def description
24
+ "be #@description"
25
+ end
26
+
27
+ def failure_message
28
+ "expected response code to be #@expected, but #@actual"
29
+ end
30
+
31
+ def negative_failure_message
32
+ "expected response code not to be #@expected, but #@actual"
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'response_code_matchers/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "response_code_matchers"
8
+ gem.version = ResponseCodeMatchers::VERSION
9
+ gem.authors = ["Ryo NAKAMURA"]
10
+ gem.email = ["r7kamura@gmail.com"]
11
+ gem.description = "Provide rspec matchers to match http response code"
12
+ gem.summary = "RSpec utility matchers for http response code"
13
+ gem.homepage = "https://github.com/r7kamura/response_code_matchers"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency "rack"
21
+ gem.add_development_dependency "rspec"
22
+ end
@@ -0,0 +1,68 @@
1
+ require "spec_helper"
2
+
3
+ describe ResponseCodeMatchers do
4
+ %w[
5
+ 100 be_continue
6
+ 101 be_switching_protocols
7
+ 102 be_processing
8
+ 200 be_ok
9
+ 201 be_created
10
+ 202 be_accepted
11
+ 203 be_non_authoritative_information
12
+ 204 be_no_content
13
+ 205 be_reset_content
14
+ 206 be_partial_content
15
+ 207 be_multi_status
16
+ 226 be_im_used
17
+ 300 be_multiple_choices
18
+ 301 be_moved_permanently
19
+ 302 be_found
20
+ 303 be_see_other
21
+ 304 be_not_modified
22
+ 305 be_use_proxy
23
+ 306 be_reserved
24
+ 307 be_temporary_redirect
25
+ 400 be_bad_request
26
+ 401 be_unauthorized
27
+ 402 be_payment_required
28
+ 403 be_forbidden
29
+ 404 be_not_found
30
+ 405 be_method_not_allowed
31
+ 406 be_not_acceptable
32
+ 407 be_proxy_authentication_required
33
+ 408 be_request_timeout
34
+ 409 be_conflict
35
+ 410 be_gone
36
+ 411 be_length_required
37
+ 412 be_precondition_failed
38
+ 413 be_request_entity_too_large
39
+ 414 be_request_uri_too_long
40
+ 415 be_unsupported_media_type
41
+ 416 be_requested_range_not_satisfiable
42
+ 417 be_expectation_failed
43
+ 418 be_im_a_teapot
44
+ 422 be_unprocessable_entity
45
+ 423 be_locked
46
+ 424 be_failed_dependency
47
+ 426 be_upgrade_required
48
+ 500 be_internal_server_error
49
+ 501 be_not_implemented
50
+ 502 be_bad_gateway
51
+ 503 be_service_unavailable
52
+ 504 be_gateway_timeout
53
+ 505 be_http_version_not_supported
54
+ 506 be_variant_also_negotiates
55
+ 507 be_insufficient_storage
56
+ 510 be_not_extended
57
+ ].each_slice(2) do |code, matcher|
58
+ describe "##{matcher}" do
59
+ let(:response) do
60
+ mock(:code => code)
61
+ end
62
+
63
+ it "matches http response code #{code}" do
64
+ response.should send(matcher)
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,9 @@
1
+ require "response_code_matchers"
2
+
3
+ RSpec.configure do |config|
4
+ config.treat_symbols_as_metadata_keys_with_true_values = true
5
+ config.run_all_when_everything_filtered = true
6
+ config.filter_run :focus
7
+
8
+ config.include ResponseCodeMatchers
9
+ end
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: response_code_matchers
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Ryo NAKAMURA
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-11-28 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rack
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: rspec
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :development
47
+ version_requirements: *id002
48
+ description: Provide rspec matchers to match http response code
49
+ email:
50
+ - r7kamura@gmail.com
51
+ executables: []
52
+
53
+ extensions: []
54
+
55
+ extra_rdoc_files: []
56
+
57
+ files:
58
+ - .gitignore
59
+ - Gemfile
60
+ - LICENSE.txt
61
+ - README.md
62
+ - Rakefile
63
+ - lib/response_code_matchers.rb
64
+ - lib/response_code_matchers/version.rb
65
+ - response_code_matchers.gemspec
66
+ - spec/response_code_matchers_spec.rb
67
+ - spec/spec_helper.rb
68
+ homepage: https://github.com/r7kamura/response_code_matchers
69
+ licenses: []
70
+
71
+ post_install_message:
72
+ rdoc_options: []
73
+
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ hash: 3
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ requirements: []
95
+
96
+ rubyforge_project:
97
+ rubygems_version: 1.8.24
98
+ signing_key:
99
+ specification_version: 3
100
+ summary: RSpec utility matchers for http response code
101
+ test_files:
102
+ - spec/response_code_matchers_spec.rb
103
+ - spec/spec_helper.rb