dock_test 0.0.2 → 0.0.3
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 +4 -4
- data/Gemfile +1 -0
- data/dock_test.gemspec +1 -0
- data/lib/dock_test/assertions.rb +20 -2
- data/lib/dock_test/methods.rb +20 -2
- data/lib/dock_test/version.rb +1 -1
- data/lib/dock_test.rb +23 -8
- data/schemas/response.schema.json +49 -0
- data/test/dock_test/test_assertions.rb +33 -0
- data/test/dock_test/{test_localhost_methods.rb → test_methods.rb} +7 -9
- data/test/test_helper.rb +14 -3
- metadata +21 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c43981a27f80adac84538b16c9ae454d8bb3eed
|
4
|
+
data.tar.gz: eb96234292816cd2308d78441ef9894c4006d716
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d662ffa52961ac51da3f33f1a08f0b48af5181857938a34b626654ff035f2fbe8ee4479409d81ef66479c8022d9c66d08532ad89e39e3d09ea0cebc782e1f305
|
7
|
+
data.tar.gz: 93cd0d97755211dbca00c9f0ed640492d1acd1c80371e75a250993858d9d1b3ae456e1d674c9b52c5b86bb6f5da656a85f2b221c26fcac6d807c51d4800b9746
|
data/Gemfile
CHANGED
data/dock_test.gemspec
CHANGED
data/lib/dock_test/assertions.rb
CHANGED
@@ -1,5 +1,23 @@
|
|
1
|
-
module
|
2
|
-
|
1
|
+
module Minitest::Assertions
|
2
|
+
def assert_response_status(status)
|
3
|
+
assert last_response.code == status.to_s, "The response status is expected to be #{last_response.code}"
|
4
|
+
end
|
5
|
+
|
6
|
+
def assert_response_content_type(content_type)
|
7
|
+
assert last_response['Content-Type'] == content_type.to_s, "The response content_type is expected to be #{last_response['Content-Type']}"
|
8
|
+
end
|
9
|
+
|
10
|
+
def assert_response_headers(headers, options = {})
|
11
|
+
exclude_keys = Array(options[:exclude] || [])
|
12
|
+
response_headers = last_response.to_hash.delete_if {|k, _| exclude_keys.include?(k)}
|
13
|
+
end
|
14
|
+
|
15
|
+
def assert_response_body(body_string)
|
16
|
+
assert last_response.body == body_string, "The response body is expected to be #{last_response.body}"
|
17
|
+
end
|
3
18
|
|
19
|
+
def assert_response_json_schema(schema_path)
|
20
|
+
schema = File.open(schema_path).read
|
21
|
+
assert JSON::Validator.validate(schema, last_response.body), "The response is expected to have a schema defined in #{schema_path}"
|
4
22
|
end
|
5
23
|
end
|
data/lib/dock_test/methods.rb
CHANGED
@@ -4,6 +4,12 @@ module DockTest
|
|
4
4
|
%w(get post put patch delete options head).each do |meth_name|
|
5
5
|
define_method meth_name do |path, params = '', headers = {}, &block|
|
6
6
|
|
7
|
+
with_side_effects = verb_has_side_effects?(meth_name)
|
8
|
+
|
9
|
+
if with_side_effects && DockTest.skippy_envs.include?(dock_env)
|
10
|
+
skip_test_to_avoid_side_efforts
|
11
|
+
end
|
12
|
+
|
7
13
|
uri = URI.join(DockTest.url, path)
|
8
14
|
|
9
15
|
if DockTest.localhost?
|
@@ -11,7 +17,7 @@ module DockTest
|
|
11
17
|
end
|
12
18
|
|
13
19
|
# add the params to the GET requests
|
14
|
-
if
|
20
|
+
if !with_side_effects && !params.empty?
|
15
21
|
if(params.is_a?(Hash))
|
16
22
|
uri.query = URI.encode_www_form(URI.decode_www_form(uri.query || '') + params.to_a)
|
17
23
|
else
|
@@ -22,7 +28,7 @@ module DockTest
|
|
22
28
|
@last_request = Net::HTTP.const_get(meth_name.capitalize).new(uri.request_uri)
|
23
29
|
|
24
30
|
# add the params to the body of other requests
|
25
|
-
if
|
31
|
+
if with_side_effects
|
26
32
|
@last_request.body = params
|
27
33
|
end
|
28
34
|
|
@@ -45,6 +51,15 @@ module DockTest
|
|
45
51
|
end
|
46
52
|
|
47
53
|
private
|
54
|
+
|
55
|
+
def dock_env
|
56
|
+
ENV['DOCK_ENV']
|
57
|
+
end
|
58
|
+
|
59
|
+
def verb_has_side_effects?(verb)
|
60
|
+
%w(post put patch delete).include?(verb)
|
61
|
+
end
|
62
|
+
|
48
63
|
def last_response
|
49
64
|
@last_response
|
50
65
|
end
|
@@ -53,5 +68,8 @@ module DockTest
|
|
53
68
|
@last_request
|
54
69
|
end
|
55
70
|
|
71
|
+
def skip_test_to_avoid_side_efforts
|
72
|
+
skip('this test is skipped in order to avoid potential side effects.')
|
73
|
+
end
|
56
74
|
end
|
57
75
|
end
|
data/lib/dock_test/version.rb
CHANGED
data/lib/dock_test.rb
CHANGED
@@ -1,28 +1,30 @@
|
|
1
|
+
require 'multi_json'
|
2
|
+
require 'json-schema'
|
1
3
|
require "dock_test/version"
|
2
4
|
require "dock_test/methods"
|
3
|
-
|
5
|
+
|
6
|
+
if defined?(::Minitest)
|
7
|
+
require 'dock_test/assertions'
|
8
|
+
else
|
9
|
+
end
|
4
10
|
|
5
11
|
module DockTest
|
6
12
|
|
7
13
|
class << self
|
8
14
|
|
9
|
-
attr_writer :port
|
10
|
-
def port
|
11
|
-
@port ||= 9999
|
12
|
-
end
|
13
|
-
|
14
15
|
attr_reader :url
|
15
16
|
# sets the test url
|
16
17
|
# also creates a new webrick server process
|
17
18
|
def url=(value)
|
18
19
|
@url = value
|
19
|
-
|
20
|
+
|
21
|
+
if localhost? && @server_thread.nil?
|
20
22
|
require "rack"
|
21
23
|
require 'webrick'
|
22
24
|
server = WEBrick::HTTPServer.new(:Port => port).tap do |server|
|
23
25
|
server.mount '/', Rack::Handler::WEBrick, Rack::Server.new.app
|
24
26
|
end
|
25
|
-
|
27
|
+
@server_thread = Thread.new { server.start }
|
26
28
|
trap('INT') do
|
27
29
|
server.shutdown
|
28
30
|
exit
|
@@ -30,8 +32,21 @@ module DockTest
|
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
35
|
+
def port
|
36
|
+
URI.parse(@url).port
|
37
|
+
end
|
38
|
+
|
33
39
|
def localhost?
|
34
40
|
@url && ['127.0.0.1', 'localhost'].include?(URI.parse(@url).host)
|
35
41
|
end
|
42
|
+
|
43
|
+
attr_reader :skippy_envs
|
44
|
+
def skippy=(envs)
|
45
|
+
@skippy_envs = Array(envs).map(&:to_s)
|
46
|
+
end
|
47
|
+
|
48
|
+
def config(&block)
|
49
|
+
block.call(DockTest)
|
50
|
+
end
|
36
51
|
end
|
37
52
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
{
|
2
|
+
"type":"object",
|
3
|
+
"$schema": "http://json-schema.org/draft-03/schema",
|
4
|
+
"required":true,
|
5
|
+
"properties":{
|
6
|
+
"body": {
|
7
|
+
"type":"string",
|
8
|
+
"required":true
|
9
|
+
},
|
10
|
+
"headers": {
|
11
|
+
"type":"object",
|
12
|
+
"required":true,
|
13
|
+
"properties":{
|
14
|
+
"ACCEPT": {
|
15
|
+
"type":"string",
|
16
|
+
"required":true
|
17
|
+
},
|
18
|
+
"CONTENT_TYPE": {
|
19
|
+
"type":"string",
|
20
|
+
"required":true
|
21
|
+
},
|
22
|
+
"HOST": {
|
23
|
+
"type":"string",
|
24
|
+
"required":true
|
25
|
+
},
|
26
|
+
"USER_AGENT": {
|
27
|
+
"type":"string",
|
28
|
+
"required":true
|
29
|
+
},
|
30
|
+
"VERSION": {
|
31
|
+
"type":"string",
|
32
|
+
"required":true
|
33
|
+
}
|
34
|
+
}
|
35
|
+
},
|
36
|
+
"protcol": {
|
37
|
+
"type":"string",
|
38
|
+
"required":true
|
39
|
+
},
|
40
|
+
"uri": {
|
41
|
+
"type":"string",
|
42
|
+
"required":true
|
43
|
+
},
|
44
|
+
"verb": {
|
45
|
+
"type":"string",
|
46
|
+
"required":true
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestAssertions < Minitest::Test
|
4
|
+
|
5
|
+
include DockTest::Methods
|
6
|
+
|
7
|
+
def test_assert_response_status_method
|
8
|
+
get '/path?foo=bar', {a: :b}, {'CONTENT_TYPE' => 'application/json'}
|
9
|
+
assert_response_status 200
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_assert_response_content_type_method
|
13
|
+
get '/path?foo=bar', {a: :b}, {'CONTENT_TYPE' => 'application/json'}
|
14
|
+
assert_response_content_type 'application/json'
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_assert_response_headers_method
|
18
|
+
get '/path?foo=bar', {a: :b}, {'CONTENT_TYPE' => 'application/json'}
|
19
|
+
assert_response_headers({"content-type"=>["application/json"], "content-length"=>["218"], "connection"=>["Keep-Alive"]} , {exclude: ['server', 'date']})
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_assert_response_body_method
|
23
|
+
skip unless ENV['DOCK_ENV'] == 'development'
|
24
|
+
get '/path?foo=bar', {a: :b}, {'CONTENT_TYPE' => 'application/json'}
|
25
|
+
assert_response_body '{"verb":"GET","uri":"http://localhost:9871/path?foo=bar&a=b","body":"","protcol":"HTTP/1.1","headers":{"ACCEPT":"*/*","USER_AGENT":"Ruby","CONTENT_TYPE":"application/json","HOST":"localhost:9871","VERSION":"HTTP/1.1"}}'
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_assert_response_json_schema_method
|
29
|
+
get '/path?foo=bar', {a: :b}, {'CONTENT_TYPE' => 'application/json'}
|
30
|
+
assert_response_json_schema 'schemas/response.schema.json'
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -1,15 +1,13 @@
|
|
1
1
|
require 'test_helper'
|
2
|
-
require 'multi_json'
|
3
2
|
|
4
3
|
class TestMethods < Minitest::Test
|
5
4
|
|
6
5
|
include DockTest::Methods
|
7
|
-
DockTest.url = 'http://localhost:3000'
|
8
6
|
|
9
7
|
def test_get_method_with_hash_body
|
10
8
|
get '/path?foo=bar', {a: :b}, {'CONTENT_TYPE' => 'application/json'}
|
11
9
|
|
12
|
-
assert_equal last_response_json['uri'],
|
10
|
+
assert_equal last_response_json['uri'], "#{DockTest.url}/path?foo=bar&a=b"
|
13
11
|
assert_equal last_response_json['verb'], 'GET'
|
14
12
|
assert_equal last_response_json['body'], ''
|
15
13
|
assert_equal last_response_json['headers']['CONTENT_TYPE'], 'application/json'
|
@@ -18,7 +16,7 @@ class TestMethods < Minitest::Test
|
|
18
16
|
def test_get_method_with_string_body
|
19
17
|
get '/path?foo=bar', 'a=b', {'CONTENT_TYPE' => 'application/json'}
|
20
18
|
|
21
|
-
assert_equal last_response_json['uri'],
|
19
|
+
assert_equal last_response_json['uri'], "#{DockTest.url}/path?foo=bar&a=b"
|
22
20
|
assert_equal last_response_json['verb'], 'GET'
|
23
21
|
assert_equal last_response_json['body'], ''
|
24
22
|
assert_equal last_response_json['headers']['CONTENT_TYPE'], 'application/json'
|
@@ -27,7 +25,7 @@ class TestMethods < Minitest::Test
|
|
27
25
|
def test_get_method_to_root
|
28
26
|
get '/', 'a=b', {'CONTENT_TYPE' => 'application/json'}
|
29
27
|
|
30
|
-
assert_equal last_response_json['uri'],
|
28
|
+
assert_equal last_response_json['uri'], "#{DockTest.url}/?a=b"
|
31
29
|
assert_equal last_response_json['verb'], 'GET'
|
32
30
|
assert_equal last_response_json['body'], ''
|
33
31
|
assert_equal last_response_json['headers']['CONTENT_TYPE'], 'application/json'
|
@@ -36,7 +34,7 @@ class TestMethods < Minitest::Test
|
|
36
34
|
def test_post_method
|
37
35
|
post '/path?foo=bar', MultiJson.dump({guid: '12345'}), {'CONTENT_TYPE' => 'application/json'}
|
38
36
|
|
39
|
-
assert_equal last_response_json['uri'],
|
37
|
+
assert_equal last_response_json['uri'], "#{DockTest.url}/path?foo=bar"
|
40
38
|
assert_equal last_response_json['verb'], 'POST'
|
41
39
|
assert_equal last_response_json['body'], "{\"guid\":\"12345\"}"
|
42
40
|
assert_equal last_response_json['headers']['CONTENT_TYPE'], 'application/json'
|
@@ -45,7 +43,7 @@ class TestMethods < Minitest::Test
|
|
45
43
|
def test_put_method
|
46
44
|
put '/path?foo=bar', MultiJson.dump({guid: '12345'}), {'CONTENT_TYPE' => 'application/json'}
|
47
45
|
|
48
|
-
assert_equal last_response_json['uri'],
|
46
|
+
assert_equal last_response_json['uri'], "#{DockTest.url}/path?foo=bar"
|
49
47
|
assert_equal last_response_json['verb'], 'PUT'
|
50
48
|
assert_equal last_response_json['body'], "{\"guid\":\"12345\"}"
|
51
49
|
assert_equal last_response_json['headers']['CONTENT_TYPE'], 'application/json'
|
@@ -54,7 +52,7 @@ class TestMethods < Minitest::Test
|
|
54
52
|
def test_patch_method
|
55
53
|
patch '/path?foo=bar', MultiJson.dump({guid: '12345'}), {'CONTENT_TYPE' => 'application/json'}
|
56
54
|
|
57
|
-
assert_equal last_response_json['uri'],
|
55
|
+
assert_equal last_response_json['uri'], "#{DockTest.url}/path?foo=bar"
|
58
56
|
assert_equal last_response_json['verb'], 'PATCH'
|
59
57
|
assert_equal last_response_json['body'], "{\"guid\":\"12345\"}"
|
60
58
|
assert_equal last_response_json['headers']['CONTENT_TYPE'], 'application/json'
|
@@ -63,7 +61,7 @@ class TestMethods < Minitest::Test
|
|
63
61
|
def test_delete_method
|
64
62
|
delete '/path?foo=bar', '', {'CONTENT_TYPE' => 'application/json'}
|
65
63
|
|
66
|
-
assert_equal last_response_json['uri'],
|
64
|
+
assert_equal last_response_json['uri'], "#{DockTest.url}/path?foo=bar"
|
67
65
|
assert_equal last_response_json['verb'], 'DELETE'
|
68
66
|
assert_equal last_response_json['body'], ''
|
69
67
|
assert_equal last_response_json['headers']['CONTENT_TYPE'], 'application/json'
|
data/test/test_helper.rb
CHANGED
@@ -1,5 +1,16 @@
|
|
1
|
-
require 'dock_test'
|
2
|
-
|
3
1
|
require 'bundler/setup'
|
4
|
-
Bundler.require(:default, :test)
|
5
2
|
require 'minitest/autorun'
|
3
|
+
Bundler.require(:default, :test)
|
4
|
+
|
5
|
+
require 'dock_test'
|
6
|
+
|
7
|
+
DockTest.config do |c|
|
8
|
+
c.url = case ENV['DOCK_ENV']
|
9
|
+
when 'production'
|
10
|
+
'http://floating-mesa-6194.herokuapp.com'
|
11
|
+
else
|
12
|
+
'http://localhost:9871'
|
13
|
+
end
|
14
|
+
c.skippy = :production
|
15
|
+
end
|
16
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dock_test
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jack Xu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
version: '0'
|
39
39
|
prerelease: false
|
40
40
|
type: :runtime
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: json-schema
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
prerelease: false
|
54
|
+
type: :runtime
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -85,7 +99,9 @@ files:
|
|
85
99
|
- lib/dock_test/assertions.rb
|
86
100
|
- lib/dock_test/methods.rb
|
87
101
|
- lib/dock_test/version.rb
|
88
|
-
-
|
102
|
+
- schemas/response.schema.json
|
103
|
+
- test/dock_test/test_assertions.rb
|
104
|
+
- test/dock_test/test_methods.rb
|
89
105
|
- test/test_helper.rb
|
90
106
|
homepage: https://github.com/jackxxu/dock_test
|
91
107
|
licenses:
|
@@ -112,5 +128,6 @@ signing_key:
|
|
112
128
|
specification_version: 4
|
113
129
|
summary: an outside-in service api test framework.
|
114
130
|
test_files:
|
115
|
-
- test/dock_test/
|
131
|
+
- test/dock_test/test_assertions.rb
|
132
|
+
- test/dock_test/test_methods.rb
|
116
133
|
- test/test_helper.rb
|