Skip to content

Commit

Permalink
added more tests and some small bugfix
Browse files Browse the repository at this point in the history
  • Loading branch information
MarioRuiz committed Feb 20, 2019
1 parent be4b870 commit 50eeab6
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 7 deletions.
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ source 'https://rubygems.org'
group :test do
gem 'rake'
gem 'rspec'
gem 'coveralls'
gem 'covered'
end

Expand Down
5 changes: 3 additions & 2 deletions lib/nice_http.rb
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,8 @@ def initialize(args = {})
@logger.level = Logger::INFO
self.class.log_files << log_filename if mode == 'w'
rescue Exception => stack
raise InfoMissing, :log
@logger = Logger.new nil
raise InfoMissing, :log
end


Expand Down Expand Up @@ -309,8 +309,9 @@ def close
if conn.object_id == self.object_id
found = true
break
else
pos += 1
end
pos += 1
}
if found
self.class.connections.delete_at(pos)
Expand Down
9 changes: 5 additions & 4 deletions lib/nice_http/manage_request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,11 @@ def manage_request(*arguments)
if data.kind_of?(String)
if arguments[0].include?(:values_for)
arguments[0][:values_for].each { |key, value|
data.gsub!(/(( *|^)"?#{key.to_s()}"? *: *")(.*)(" *, *$)/, '\1' + value + '\4') # "key":"value", or key:"value",
data.gsub!(/(( *|^)"?#{key.to_s()}"? *: *")(.*)(" *$)/, '\1' + value + '\4') # "key":"value" or key:"value"
data.gsub!(/(( *|^)"?#{key.to_s()}"? *: *[^"])([^"].*)([^"] *, *$)/, '\1' + value + '\4') # "key":456, or key:456,
data.gsub!(/(( *|^)"?#{key.to_s()}"? *: *[^"])([^"].*)([^"] * *$)/, '\1' + value + '\4') # "key":456 or key:456
data.gsub!(/"(#{key})":\s*"([^"]*)"/,'"\1": "'+value+'"') # "key":"value"
data.gsub!(/(#{key}):\s*"([^"]*)"/,'\1: "'+value+'"') # key:"value"
data.gsub!(/(#{key}):\s*'([^']*)'/,'\1: \''+value+"'") # key:'value'
data.gsub!(/"(#{key})":\s*(\w+)/,'"\1": '+value) # "key":456
data.gsub!(/(#{key}):\s*(\w+)/,'\1: '+value) # key:456
}
end
elsif data.kind_of?(Hash)
Expand Down
1 change: 0 additions & 1 deletion nice_http.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ Gem::Specification.new do |s|
s.license = 'MIT'
s.add_runtime_dependency 'nice_hash', '~> 1.9', '>= 1.9.0'
s.add_development_dependency 'rspec', '~> 3.8', '>= 3.8.0'
s.add_development_dependency 'coveralls', '~> 0.8', '>= 0.8.22'
s.test_files = s.files.grep(%r{^(test|spec|features)/})
s.require_paths = ["lib"]
s.required_ruby_version = ['>= 2.4']
Expand Down
72 changes: 72 additions & 0 deletions spec/nice_http/nice_http_post_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,78 @@

end

it 'changes data to empty string if data is nil' do
req = {
path: "/api/users",
data: nil
}
resp = @http.post req
expect(NiceHttp.last_request).to match /data=\s*$/
end

it 'accepts values as an alias for values_for' do
request = {
path: "/api/users",
data: { name: "morpheus", job: "leader" }
}

request[:values] = {name: "peter"}
resp = @http.post(request)
expect(resp.code).to eq 201
expect(resp.data.json(:name)).to eq 'peter'
end

it 'change xml value when supplied values_for' do
request = {
path: "/api/users",
headers: {"Content-Type": "text/xml"},
data: "<name>morpheus</name><job>leader</job>"
}

request.values_for = {name: "peter"}
resp = @http.post(request)
expect(NiceHttp.last_request).to match /name>peter/
end

it 'changes json string values when values_for supplied and json is a string' do
request = {
path: "/api/users",
headers: {"Content-Type": "application/json"},
data: '{"name": "morpheus","job": "leader"}'
}
request.values_for = {name: "peter"}
resp = @http.post(request)
expect(NiceHttp.last_request).to match /"name": "peter"/
end

it 'accepts an array as data' do
request = {
path: "/api/users",
headers: {"Content-Type": "application/json"},
data: [
{name: 'morpheus', job: 'leader'},
{name: 'peter', job: 'vicepresident'}
]
}
resp = @http.post(request)
expect(resp.code).to eq 201
expect(resp.data.json(:name)).to eq ['morpheus','peter']
end

it 'changes all values on array request when values_for' do
request = {
path: "/api/users",
headers: {"Content-Type": "application/json"},
data: [
{name: 'morpheus', job: 'leader'},
{name: 'peter', job: 'vicepresident'}
]
}
request.values_for = {job: ['dev','cleaner']}
resp = @http.post(request)
expect(resp.code).to eq 201
expect(resp.data.json(:job)).to eq ['dev','cleaner']
end

#todo: add tests encoding and cookies

Expand Down
26 changes: 26 additions & 0 deletions spec/nice_http/nice_http_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,7 @@
expect(klass.connections.size).to eq 1
expect(klass.connections[0]).to eq http2
end

end

describe 'log files' do
Expand Down Expand Up @@ -347,6 +348,31 @@
files = Dir["./*.log"]
expect(files.size).to eq 0
end

it "raises error if log file not possible to be created" do
Dir.glob('./*.log').each { |file| File.delete(file)}
klass.log = "./"
klass.new("https://example.com") rescue err = $ERROR_INFO
expect(err.class).to eq NiceHttp::InfoMissing
expect(err.attribute).to eq :log
expect(err.message).to match /wrong log/i
end

it "doesn't create any log file when exception on creating" do
klass.log = "./"
klass.new("https://example.com") rescue err = $ERROR_INFO
files = Dir["./*.log"]
expect(files.size).to eq 0
end

it 'cannot close a connection that is already closed' do
http = klass.new("https://example.com")
http.close
http.close
content = File.read('./nice_http.log')
expect(content).to match /It was not possible to close the HTTP connection, already closed/
end

end

describe 'proxys' do
Expand Down

0 comments on commit 50eeab6

Please sign in to comment.