module ImportPostman::Parsers::RestClient
Constants
- IP_TEST_FRAMEWORK
can be test-unit or minitest
Public Instance Methods
parse_postman_test(js, num_test, test_name, method_to_call)
click to toggle source
# File lib/import_postman/parsers/rest_client.rb, line 38 def parse_postman_test(js, num_test, test_name, method_to_call) rcode_lines=Array.new rcode_txt="\tdef test_#{num_test.to_s.rjust(3, "0")}_#{test_name}\n" res=method_to_call.scan(/(\w+)\((.+)\)/) met=res[0][0] req=res[0][1] if met=='post' or met=='put' method_to_call="#{met} req[:data].to_json, req.headers" else method_to_call="#{met} req.headers" end rcode_txt+="\t\treq=#{req}\n" rcode_txt+="\t\tbegin\n" rcode_txt+="\t\t\tresponse=@http[req.path].#{method_to_call}\n" rcode_txt+="\t\trescue RestClient::ExceptionWithResponse => res\n" rcode_txt+="\t\t\tresponse=res.response\n" rcode_txt+="\t\tend\n" var_data="" blocks=Array.new blocks_add=Array.new js.split(/$/).each {|line| line_orig=line.dup rcode="" line.gsub!("===", "==") line.gsub!(/;$/, "") line.gsub!('\"','"') line.gsub!("responseCode.code", "response.code") line.gsub!(" : ", ": ") #pm.environment.set("coupon_id_dgrd", jsonData.coupons[0].primaryCouponId) if line.scan(/pm\.environment\.set\(\"(\w+)\",\s*(.+)\)/).size>0 rcode=line.gsub!(/pm\.environment\.set\(\"(\w+)\",\s*(.+)\)/, '$\1 = \2') end line.gsub!(/environment\["(\w+)"\]/, '$\1') line.gsub!(/environment\./, '$') line.gsub!(/postman.getEnvironmentVariable\(['"](\w+)['"]\)/, '$\1') #postman.getResponseHeader('WWW-Authenticate') line.gsub!(/postman\.getResponseHeader\(['"]([\w-]+)['"]\)/, 'response.headers["\1"]') line.gsub!(/parseInt\(([\w\$\-]+)\)/, '\1.to_i') line.gsub!(".indexOf", ".include?") line.gsub!(/\.include\?\((\w+)\)==\s*-1\s*/, '.include?(\1)==false') line.gsub!(/\.include\?\((\w+)\)\s*==\s*0/, '.include?(\1)==true') line.gsub!("responseBody", "response.body") line.gsub!(".has(", ".include?(") line.gsub!(/(['"\w\s]+) in (\w+)/, '\1.include?(\2)') if line.scan(/for\s*\(/).size==0 #typeof jsonData.guaranteedPrizeData[0].gpData== "string" if line.scan(/typeof (.+)\s*==\s*"(\w+)"/).size>0 res=line.scan(/typeof (.+)\s*==\s*"(\w+)"/) var=res[0][0] type=res[0][1].capitalize line.gsub!(/typeof (.+)\s*==\s*"(\w+)"/, "#{var}.kind_of?(#{type})") end if blocks[-1]==:if_one_line and line.strip.scan(/\s*{/).size>0 #'if' is a block not a line blocks[-1]=:if_block end if line.strip=="" or (line.strip=="{" and (blocks[-1]==:if_one_line or blocks[-1]==:if_block or blocks[-1]==:for)) next elsif blocks[-1]==:if_one_line and line.scan(/^\s*if\s+/).size==0 #we are in the next line after if rcode="#{line.strip}\n\t\tend" blocks.pop elsif line.scan(/\s*\/\//).size>0 rcode="# #{line.scan(/\s*\/\/(.+)/).join}" elsif blocks[-1]==:comment rcode="# #{line.lstrip}" if line.scan(/\s*\*\//).size>0 blocks.pop end elsif line.scan(/\s*\/\*/).size>0 rcode="# #{line.scan(/\s*\/\*(.+)/).join}" unless line.scan(/\s*\*\//).size>0 blocks<<:comment end elsif line.scan(/^\s*try\s*{/).size>0 blocks<<:try rcode="begin" elsif line.strip.scan("}").size>0 and blocks[-1]==:try blocks.pop rcode="" elsif line.scan(/^\s*catch\s*\((\w+)\)\s*{/).size>0 rcode="rescue Exception =>#{line.scan(/^\s*catch\s*\((\w+)\)\s*{/).join}" if line.scan(/}\s*$/).size>0 #ends in one line rcode+="\n\t\tend\n" end blocks<<:catch elsif line.strip.scan("}").size>0 and blocks[-1]==:try blocks.pop rcode="" elsif line.strip.scan(/else if\s*/).size>0 and rcode_lines.size>0 and rcode_lines[-1].strip=="end" rcode_lines.pop rcode=line.gsub("else if","elsif").strip.gsub(/\s*\{$/, '') blocks<<:if_block elsif line.strip.scan(/else\s*\{/).size>0 and rcode_lines.size>0 and rcode_lines[-1].strip=="end" rcode_lines.pop rcode="else" blocks<<:if_block elsif line.scan(/^\s*\w+\.push/).size>0 #arrayOfValuesFromhighestNumber4Comparing.push(highestNumber4Comparing[j][key]) rcode=line.strip.gsub(/;\s*$/, "") elsif line.scan(/^\s*if\s*/).size>0 #if ( key === numberCount && numberCount4Comparing[k][key] != jsonData.games[i].properties.numberCount)\n" if line.scan(/{\s*$/).size==0 #only one like for the if on next line, not a block blocks<<:if_one_line else blocks<<:if_block end rcode=line.strip.gsub(/\s*\{$/, '') elsif line.strip=="}" if blocks[-1]==:for rcode="#{blocks_add[blocks.size-1]}\t\tend" blocks_add[blocks.size-1]="" blocks.pop else rcode="end" blocks_add[blocks.size-1]="" blocks.pop end elsif line.scan(/for\s*\(var (\w+)\s+in/).size>0 #for(var key in highestNumber4Comparing[j]) var=line.scan(/for\s*\(var (\w+)\s+in\s+([^\)]+)\)/) variab=var[0][0] compar=var[0][1] #for i in 0..jsonData.games.length-1 rcode="for #{variab} in #{compar}" blocks<<:for elsif line.scan(/for\s*\(var (\w+\s*=\s*\d+);([^;]+)/).size>0 #for(var i=0;i<jsonData.games.length;i++){ var=line.scan(/for\s*\(var (\w+\s*=\s*\d+);([^;]+)/) variab=var[0][0] compar=var[0][1] rcode="#{variab}\n\t\twhile #{compar}\n" blocks<<:for blocks_add[blocks.size-1]="\t\t#{variab.scan(/(\w+)\s*=/).join}+=1\n" elsif line.scan(/\w\s*;\s*\w/).size>0 #any line with more than one instruction rcode="#Line not added: #{line.lstrip}" elsif var_data=="" and line.scan(/var\s(\w+)\s*=\s*JSON\.parse\(response.body\)/).size>0 var_data = line.scan(/var\s(\w+)\s*=\s*JSON\.parse\(response.body\)/).join rcode="#{var_data} = response.body.json" elsif line.scan(/postman\.setEnvironmentVariable\(/).size>0 vart=line.scan(/postman\.setEnvironmentVariable\("(\w+)"/).join valt=line.scan(/postman\.setEnvironmentVariable\("\w+",\s*(.+)\)$/).join rcode="$#{vart} = #{valt}" elsif line.scan(/var \w+\s*=/).size>0 vart=line.scan(/var\s+(\w+)\s*/).join valt=line.scan(/var\s+\w+\s*=\s*(.+)$/).join valt[-1]="" if valt[-1]=="," #multiple assigment rcode="#{vart} = #{valt}" elsif line.scan(/^\s*\w+\s*=\s*/).size>0 vart=line.scan(/^\s*(\w+)\s*/).join valt=line.scan(/^\s*\w+\s*=\s*(.+)$/).join valt[-1]="" if valt[-1]=="," #multiple assigment rcode="#{vart} = #{valt}" elsif line.scan(/tests\[/).size>0 msg=line.scan(/tests\["([^=]*)"\]/).join val=line.scan(/tests\["[^=]*"\]\s*=\s*(.+)/).join if msg=="" msg=line.scan(/tests\[(.*)\]\s=\s/).join val=line.scan(/tests\[.*\]\s=\s(.+)/).join else msg="\"#{msg}\"" end rcode="assert(#{val}, #{msg})" elsif rcode=="" rcode="#Line not added: #{line_orig.lstrip}" end rcode_lines.push("\t\t#{rcode.to_s.lstrip}\n") unless rcode=="" } rcode_txt+=rcode_lines.join rcode_txt+="\tend\n\n" return rcode_txt end
parse_postman_test_headers(module_main_name)
click to toggle source
# File lib/import_postman/parsers/rest_client.rb, line 8 def parse_postman_test_headers(module_main_name) headers="require 'test-unit'\n" if IP_TEST_FRAMEWORK=='test-unit' headers="require 'minitest/autorun'\n" if IP_TEST_FRAMEWORK=='minitest' headers+="require 'json'\n" headers+="require 'nice_hash'\n" headers+="require 'rest-client'\n\n" headers+=" class String def json(*keys) require 'json' return JSON.parse(self, {symbolize_names: true}) end def ==(par) if par.kind_of?(Integer) or par.nil? or par.kind_of?(Float) then super(par.to_s()) else super(par) end end end\n\n" headers+="class Test#{module_main_name} < Test::Unit::TestCase\n\n" if IP_TEST_FRAMEWORK=='test-unit' headers+="class Test#{module_main_name} < Minitest::Test\n\n" if IP_TEST_FRAMEWORK=='minitest' headers+="i_suck_and_my_tests_are_order_dependent!\n\n" if IP_TEST_FRAMEWORK=='minitest' headers+="\tdef setup\n\t\t" headers+='@http=RestClient::Resource.new("http://#{$host}")' headers+="\n\tend\n" return headers end