Skip to content

Commit

Permalink
Fixed #6
Browse files Browse the repository at this point in the history
  • Loading branch information
codeasashu committed Jun 15, 2021
1 parent 975ccfb commit 296b787
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 36 deletions.
41 changes: 21 additions & 20 deletions openman/parser/folder.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,42 @@
from ..utils import is_folder, is_request
from .requestitem import RequestItem


class Folder(object):

def __init__(self, folder=None):
if (folder is None) \
or (not isinstance(folder, dict) \
or (not is_folder(folder))):
raise FolderParserException('Not a valid folder')
if (folder is None) or (
not isinstance(folder, dict) or (not is_folder(folder))
):
raise FolderParserException("Not a valid folder")
self.folder = folder

@classmethod
def parse(cls, folder=None):
return cls(folder)

@property
def summary(self):
return self.get_summary()

@property
def description(self):
return self.get_description()

def get_summary(self):
return self.folder.get('name')
return self.folder.get("name")

def get_description(self):
return self.folder.get('description')
return self.folder.get("description")

def get_requestitems(self, folder=None):
request_items = []
folder = folder or self.folder['item']
folder = folder or self.folder["item"]
for item in folder:
if is_folder(item):
request_items.extend(self.get_requestitems(item.get('item')))
try:
request_items.append(RequestItem(item))
except RequestParserException:
continue
return request_items
request_items.extend(self.get_requestitems(item.get("item")))
else:
try:
request_items.append(RequestItem(item))
except RequestParserException:
continue
return request_items
32 changes: 17 additions & 15 deletions openman/parser/requestitem.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,38 @@
from .request import Request
from .response import Response


class RequestItem(object):
def __init__(self, requestitem=None):
if (requestitem is None) \
or (not isinstance(requestitem, dict) \
or (not is_requestitem(requestitem))):
raise RequestItemParserException('Not a valid request')
if (requestitem is None) or (
not isinstance(requestitem, dict)
or (not is_requestitem(requestitem))
):
raise RequestItemParserException("Not a valid request")
self.requestitem = requestitem
self.request = Request(requestitem['request'])
self.responses = [Response(item) for item in requestitem['response']]
self.request = Request(requestitem["request"])
self.responses = [Response(item) for item in requestitem["response"]]

@classmethod
def parse(cls, requestitem=None):
return cls(requestitem)

@property
def summary(self):
return self.get_summary()

@property
def description(self):
return self.get_description()

def get_summary(self):
return self.requestitem.get('name')
return self.requestitem.get("name")

def get_description(self):
return self.request.description

def get_request(self):
return self.request

def get_responses(self):
return self.responses
return self.responses
9 changes: 9 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@
def postman_file():
return os.path.abspath("tests/fixtures/postman-echo.json")

@pytest.fixture
def mock_json():
def get_json_from_file(filename):
filepath = os.path.abspath(f"tests/fixtures/{filename}")
with open(filepath) as f:
content = json.load(f)
return content
return get_json_from_file


@pytest.fixture
def postman_json():
Expand Down
58 changes: 58 additions & 0 deletions tests/fixtures/nested_folder.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
{
"info": {
"_postman_id": "0c0c56e1-438e-40c2-9037-f618cb009935",
"name": "Test mock api",
"description": "",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "folder1",
"item": [
{
"name": "nested_folder_1",
"item": [
{
"name": "Request 1",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-KEY",
"value": "{{X-API-KEY}}"
}
],
"url": {
"raw": "/api/location",
"host": ["{{protocol}}{{host}}"],
"path": [],
"query": []
}
},
"response": []
}
]
},
{
"name": "nested_folder_2",
"item": [
{
"name": "Request 2",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "/api/customer",
"host": [""],
"path": [],
"query": []
}
},
"response": []
}
]
}
]
}
]
}
12 changes: 11 additions & 1 deletion tests/parser/folder_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,15 @@
import openman
from openman.parser import FolderParser


def test_folder_nested_request(mock_json):
nested_folder_json = mock_json("nested_folder.json")
print("a", nested_folder_json)
folder = FolderParser(nested_folder_json)
items = folder.get_requestitems()
assert len(items) == 2


class TestFolderParser(unittest.TestCase):
def setUp(self):
self.openman = openman
Expand Down Expand Up @@ -59,4 +68,5 @@ def test_requests(self):
'POST Raw Text'
]).issubset(set([request.summary for request in requests])))
self.assertEqual(set(['get', 'post', 'put', 'delete', 'patch']),
set([request.get_request().method for request in requests]))
set([request.get_request().method for request in requests]))

0 comments on commit 296b787

Please # to comment.