zipper 0.1.4 → 0.1.5
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/lib/generators/zipper_generator.rb +6 -10
- data/lib/zipper.rb +99 -58
- metadata +14 -3
@@ -2,16 +2,12 @@ class ZipperGenerator < Rails::Generators::Base
|
|
2
2
|
def create_files
|
3
3
|
create_file "config/initializers/zipper_initializer.rb", "Zipper.files = []"
|
4
4
|
rakefile("zipper.rake") do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
end
|
14
|
-
}
|
5
|
+
%Q{namespace :zipper do
|
6
|
+
desc "Zipper API Testing"
|
7
|
+
task :test => :environment do
|
8
|
+
Zipper.run
|
9
|
+
end
|
10
|
+
end}
|
15
11
|
end
|
16
12
|
end
|
17
13
|
end
|
data/lib/zipper.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'pocket'
|
2
|
+
require 'json'
|
2
3
|
|
3
4
|
module Zipper
|
4
5
|
DEFAULT_PORT = 3001
|
@@ -29,7 +30,7 @@ module Zipper
|
|
29
30
|
|
30
31
|
|
31
32
|
def run
|
32
|
-
system "rails s --environment=test --port=#{self.
|
33
|
+
system "rails s --environment=test --port=#{self.port} -d"
|
33
34
|
system "rake db:test:purge"
|
34
35
|
system "rake db:test:load"
|
35
36
|
pid = File.read("tmp/pids/server.pid")
|
@@ -37,14 +38,16 @@ module Zipper
|
|
37
38
|
self.files.each do |file|
|
38
39
|
system "ruby test/zipper/#{file}.rb"
|
39
40
|
end
|
40
|
-
|
41
|
+
|
41
42
|
system "kill -s 9 " + pid
|
43
|
+
|
44
|
+
File.open( "docs/zipper.json" , 'a' ) {|f| f.write( @docs.to_json ) }
|
42
45
|
end
|
43
46
|
|
44
|
-
|
45
47
|
|
46
48
|
def test(url = "", options = {})
|
47
49
|
|
50
|
+
url = url || ""
|
48
51
|
|
49
52
|
# inferences
|
50
53
|
_URI = URI.parse(url)
|
@@ -63,7 +66,7 @@ module Zipper
|
|
63
66
|
:key => _key,
|
64
67
|
:method => :get,
|
65
68
|
:data => nil,
|
66
|
-
:status
|
69
|
+
:assertions => { :status => 200 },
|
67
70
|
:username => nil,
|
68
71
|
:password => nil,
|
69
72
|
:use_ssl => false
|
@@ -73,6 +76,7 @@ module Zipper
|
|
73
76
|
# merge passed in options with default options
|
74
77
|
_options = _options.merge(options)
|
75
78
|
|
79
|
+
# infer user
|
76
80
|
if _options[:user]
|
77
81
|
uid = _options[:user]
|
78
82
|
user = (self.users)[uid]
|
@@ -80,8 +84,11 @@ module Zipper
|
|
80
84
|
_un = user[:username]
|
81
85
|
_pw = user[:password]
|
82
86
|
end
|
87
|
+
|
88
|
+
# print test title
|
89
|
+
p "TESTING: " + _options[:title]
|
83
90
|
|
84
|
-
|
91
|
+
# make request
|
85
92
|
_result = Pocket.make_request(_URL, {
|
86
93
|
:method => _options[:method],
|
87
94
|
:username => _un || _options[:username],
|
@@ -90,66 +97,100 @@ module Zipper
|
|
90
97
|
:data => _options[:data]
|
91
98
|
})
|
92
99
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
100
|
+
|
101
|
+
|
102
|
+
# test assertions
|
103
|
+
_assertions = _options[:assertions]
|
104
|
+
|
105
|
+
if _assertions[:status] && _result.code.to_i != _assertions[:status]
|
106
|
+
self.fail "Status should have been #{_assertions[:status]} but was #{_result.code}"
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
if _assertions[:body]
|
112
|
+
b = _assertions[:body]
|
113
|
+
if b.is_a?(TrueClass)
|
114
|
+
if _result.body.length < 1
|
115
|
+
self.fail "Body should have contained content but didn't"
|
116
|
+
end
|
117
|
+
elsif b.is_a?(FalseClass)
|
118
|
+
if _result.body.length > 0
|
119
|
+
self.fail "Body should have been blank but wasn't"
|
120
|
+
end
|
121
|
+
elsif b != _result.body
|
122
|
+
self.fail "Body should have been #{b} but wasn't"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
|
+
|
128
|
+
if _assertions[:attributes]
|
129
|
+
|
130
|
+
if _result.body.length < 1
|
131
|
+
self.fail "Attempted to check for an attribute but the response body was blank"
|
132
|
+
return
|
133
|
+
end
|
134
|
+
|
135
|
+
attrs = _assertions[:attributes]
|
136
|
+
object = JSON.parse _result.body
|
137
|
+
attrs.each do |a|
|
138
|
+
if !object[a.to_s]
|
139
|
+
self.fail "The response object should have contained the attribute #{a} but didn't"
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
|
146
|
+
|
98
147
|
# create example
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
148
|
+
_curl_string = []
|
149
|
+
_curl_string << "curl"
|
150
|
+
|
151
|
+
if _options[:username] && _options[:password]
|
152
|
+
_curl_string << "#{_options[:username]}:#{_options[:password]}"
|
153
|
+
end
|
154
|
+
|
155
|
+
_curl_string << '-H "Accept: application/json" -H "Content-Type: application/json"'
|
156
|
+
|
157
|
+
if _options[:data]
|
158
|
+
_curl_string << "-d '#{_options[:data]}'"
|
159
|
+
end
|
160
|
+
|
161
|
+
if _options[:method] && _options[:method] != "GET"
|
162
|
+
_curl_string << "-X $method"
|
163
|
+
end
|
164
|
+
|
165
|
+
_curl_string << "$docs_base_url/$api_url";
|
166
|
+
_curl_string << "\n"
|
167
|
+
|
168
|
+
|
122
169
|
# create doc json
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
# # write to docs file
|
136
|
-
# file_path = Rails.root.join("docs/zipper_api.json")
|
137
|
-
# current_json_string = File.open( file_path , "rb" ).read
|
138
|
-
#
|
139
|
-
# docs_json = []
|
140
|
-
# begin
|
141
|
-
# docs_json = JSON.parse current_json_string
|
142
|
-
# rescue
|
143
|
-
# docs_json = []
|
144
|
-
# end
|
145
|
-
#
|
146
|
-
# docs_json << doc_json
|
147
|
-
# File.open( file_path , 'a' ) {|f| f.write( docs_json ) }
|
170
|
+
@docs ||= []
|
171
|
+
@docs << {
|
172
|
+
:resource => _options[:resource],
|
173
|
+
:title => _options[:title],
|
174
|
+
:key => _options[:key],
|
175
|
+
:method => _options[:method],
|
176
|
+
:url => _options[:url],
|
177
|
+
:request_body => _options[:data],
|
178
|
+
:status => _options[:status],
|
179
|
+
:response_body => _result.to_json,
|
180
|
+
:example => _curl_string.join(" ")
|
181
|
+
}
|
148
182
|
|
149
183
|
_result
|
150
184
|
|
151
185
|
end
|
152
186
|
|
187
|
+
|
188
|
+
def fail(message)
|
189
|
+
p "*********************FAILED*********************"
|
190
|
+
p message
|
191
|
+
p "************************************************"
|
192
|
+
end
|
193
|
+
|
153
194
|
end
|
154
195
|
|
155
196
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zipper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -15,7 +15,7 @@ date: 2011-11-24 00:00:00.000000000Z
|
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: pocket
|
18
|
-
requirement: &
|
18
|
+
requirement: &70286691586260 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,7 +23,18 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *70286691586260
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: &70286691585700 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: *70286691585700
|
27
38
|
description: API Testing Done Right
|
28
39
|
email: atomkirk@gmail.com
|
29
40
|
executables: []
|