class ApiMiniTester::Import::Postman

Attributes

collection[R]

Public Class Methods

new(json_collection) click to toggle source
# File lib/api_mini_tester/import/postman.rb, line 9
def initialize(json_collection)
  @collection = JSON.parse json_collection
end

Public Instance Methods

baseurl(items) click to toggle source
# File lib/api_mini_tester/import/postman.rb, line 47
def baseurl(items)
  base = ''
  items.each do |item|
    if item['item']
      item_url = baseurl(item['item'])
    elsif item['request']
      item_url = item['request']['url']['raw']
    end
    base = max_common_url(base, item_url)
  end
  base
end
max_common_url(url1, url2) click to toggle source
# File lib/api_mini_tester/import/postman.rb, line 39
def max_common_url(url1, url2)
  return "" unless url1 && url2
  index = 0
  index += 1 while url1[index] && url2[index] && url1[index] == url2[index]
  return "" if index.zero?
  url1[0..(index - 1)][0..(url1.rindex('/') - 1)]
end
name() click to toggle source
# File lib/api_mini_tester/import/postman.rb, line 35
def name
  collection['info']['name']
end
step(item) click to toggle source
# File lib/api_mini_tester/import/postman.rb, line 90
def step(item)
  res = {
    'step' => item['name'],
    'name' => item['name'],
    'method' => item['request']['method'],
    'uri' => step_uri(item['request']['url']['raw']),
    'input' => {
      'header' => step_header(item['request']['header']),
      'body' => step_body(item['request']['body']['raw'])
    },
    'output' => {
      'header' => {},
      'body' => {}
    }
  }
  res
end
step_body(body) click to toggle source
# File lib/api_mini_tester/import/postman.rb, line 84
def step_body(body)
  body ? JSON.parse(body) : {}
rescue JSON::ParserError
  {}
end
step_header(header) click to toggle source
# File lib/api_mini_tester/import/postman.rb, line 76
def step_header(header)
  res = {}
  header.each do |h|
    res[h['key']] = h['value']
  end
  res
end
step_uri(uri) click to toggle source
# File lib/api_mini_tester/import/postman.rb, line 72
def step_uri(uri)
  uri.gsub("#{@base}/", "")
end
steps(items) click to toggle source
# File lib/api_mini_tester/import/postman.rb, line 60
def steps(items)
  res = []
  items.each do |item|
    if item['item']
      res << steps(item['item'])
    elsif item['request']
      res << step(item)
    end
  end
  res
end
suite_base() click to toggle source
# File lib/api_mini_tester/import/postman.rb, line 19
def suite_base
  @suite_base ||= {
    'name' => name,
    'desc' => "Imported from postman collection: #{name}",
    'settings' => {
      'baseurl' => baseurl(collection['item'])
    },
    'tests' => [
      {
        'name' => "Test scenario based on postman collection #{name}",
        'steps' => []
      }
    ]
  }
end
to_yaml() click to toggle source
# File lib/api_mini_tester/import/postman.rb, line 13
def to_yaml
  suite = suite_base
  suite['tests'][0]['steps'] = steps(collection['item'])
  suite.to_yaml
end