Implement get route details. Closes #12
This commit is contained in:
+20
-2
@@ -285,6 +285,23 @@ def get_routes(app):
|
|||||||
return _get_routes
|
return _get_routes
|
||||||
|
|
||||||
|
|
||||||
|
def get_route(app):
|
||||||
|
async def _get_route(request):
|
||||||
|
"""Return requested registered route."""
|
||||||
|
id = request.match_info["id"]
|
||||||
|
for idx, r in enumerate(app["user_routes"]):
|
||||||
|
if r.id == id:
|
||||||
|
return web.json_response({"index": idx,
|
||||||
|
"method": r.method,
|
||||||
|
"id": r.id,
|
||||||
|
"url_pattern": r.path,
|
||||||
|
"entrypoint": r.entrypoint,
|
||||||
|
"command": r.command})
|
||||||
|
else:
|
||||||
|
return web.Response(status=404, reason="Not Found")
|
||||||
|
return _get_route
|
||||||
|
|
||||||
|
|
||||||
def insert_route(app):
|
def insert_route(app):
|
||||||
async def _insert_route(request):
|
async def _insert_route(request):
|
||||||
"""Insert a new Kapow! route."""
|
"""Insert a new Kapow! route."""
|
||||||
@@ -468,8 +485,9 @@ async def start_kapow_server(bind, scripts, certfile=None, interactive=False, ke
|
|||||||
control_app.add_routes([
|
control_app.add_routes([
|
||||||
# Control API
|
# Control API
|
||||||
web.get('/routes', get_routes(user_app)),
|
web.get('/routes', get_routes(user_app)),
|
||||||
web.post('/routes', append_route(user_app)), # TODO: return route info
|
web.get('/routes/{id}', get_route(user_app)),
|
||||||
web.put('/routes', insert_route(user_app)), # TODO: return route info
|
web.post('/routes', append_route(user_app)),
|
||||||
|
web.put('/routes', insert_route(user_app)),
|
||||||
web.delete('/routes/{id}', delete_route(user_app)),
|
web.delete('/routes/{id}', delete_route(user_app)),
|
||||||
|
|
||||||
# Data API
|
# Data API
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
Feature: Fail to retrieve a route info in Kapow! server.
|
Feature: Fail to retrieve route details in Kapow! server.
|
||||||
When trying to get a route info in the server, if it
|
When trying to get route details for a route that
|
||||||
does no exists the server respons with an error.
|
does no exist the server responds with an error.
|
||||||
|
|
||||||
Scenario: Try to get info for a non-existing route.
|
Scenario: Try to get details for a nonexistent route.
|
||||||
A request of retrieving a non-existing route info
|
A request for retrieving details for a nonexistent
|
||||||
will trigger a not found error.
|
route will trigger a not found error.
|
||||||
|
|
||||||
Given I have a just started Kapow! server
|
Given I have a just started Kapow! server
|
||||||
When I get the info for route with id "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
|
When I get the route with id "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
|
||||||
Then I get 404 as response code
|
Then I get 404 as response code
|
||||||
And I get "Not Found" as response reason phrase
|
And I get "Not Found" as response reason phrase
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
Feature: Retrieve route info in Kapow! server.
|
Feature: Retrieve route details in Kapow! server.
|
||||||
Users can retrieve route info from the server by
|
Users can retrieve route details from the server
|
||||||
specifying its id.
|
by specifying its id.
|
||||||
|
|
||||||
Scenario: Retrieve route info.
|
Scenario: Retrieve route details.
|
||||||
Get route info by spscifying its id.
|
Get route details by id.
|
||||||
|
|
||||||
Given I have a Kapow! server whith the following routes:
|
Given I have a Kapow! server with the following routes:
|
||||||
| method | url_pattern | entrypoint | command |
|
| method | url_pattern | entrypoint | command |
|
||||||
| GET | /listRootDir | /bin/sh -c | ls -la / \| response /body |
|
| GET | /listRootDir | /bin/sh -c | ls -la / \| response /body |
|
||||||
| GET | /listDir/{dirname} | /bin/sh -c | ls -la /request/params/dirname \| response /body |
|
| GET | /listDir/{dirname} | /bin/sh -c | ls -la /request/params/dirname \| response /body |
|
||||||
When I get the first route info
|
When I get the first route
|
||||||
Then I get 200 as response code
|
Then I get 200 as response code
|
||||||
And I get "OK" as response reason phrase
|
And I get "OK" as response reason phrase
|
||||||
And I get the following response body:
|
And I get the following response body:
|
||||||
|
|||||||
@@ -12,6 +12,10 @@ import jsonexample
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
WORD2POS = {"first": 0, "second": 1, "last": -1}
|
||||||
|
|
||||||
|
|
||||||
class Env(EnvironConfig):
|
class Env(EnvironConfig):
|
||||||
#: How to run Kapow! server
|
#: How to run Kapow! server
|
||||||
KAPOW_SERVER_CMD = StringVar(default="kapow server")
|
KAPOW_SERVER_CMD = StringVar(default="kapow server")
|
||||||
@@ -137,7 +141,7 @@ def step_impl(context):
|
|||||||
|
|
||||||
@when('I delete the {order} route')
|
@when('I delete the {order} route')
|
||||||
def step_impl(context, order):
|
def step_impl(context, order):
|
||||||
idx = {"first": 0, "second": 1, "last": -1}.get(order)
|
idx = WORD2POS.get(order)
|
||||||
routes = requests.get(f"{Env.KAPOW_CONTROLAPI_URL}/routes")
|
routes = requests.get(f"{Env.KAPOW_CONTROLAPI_URL}/routes")
|
||||||
id = routes.json()[idx]["id"]
|
id = routes.json()[idx]["id"]
|
||||||
context.response = requests.delete(f"{Env.KAPOW_CONTROLAPI_URL}/routes/{id}")
|
context.response = requests.delete(f"{Env.KAPOW_CONTROLAPI_URL}/routes/{id}")
|
||||||
@@ -149,3 +153,15 @@ def step_impl(context):
|
|||||||
f"{Env.KAPOW_CONTROLAPI_URL}/routes",
|
f"{Env.KAPOW_CONTROLAPI_URL}/routes",
|
||||||
headers={"Content-Type": "application/json"},
|
headers={"Content-Type": "application/json"},
|
||||||
data=context.text)
|
data=context.text)
|
||||||
|
|
||||||
|
@when('I get the route with id "{id}"')
|
||||||
|
def step_impl(context, id):
|
||||||
|
context.response = requests.get(f"{Env.KAPOW_CONTROLAPI_URL}/routes/{id}")
|
||||||
|
|
||||||
|
|
||||||
|
@when('I get the {order} route')
|
||||||
|
def step_impl(context, order):
|
||||||
|
idx = WORD2POS.get(order)
|
||||||
|
routes = requests.get(f"{Env.KAPOW_CONTROLAPI_URL}/routes")
|
||||||
|
id = routes.json()[idx]["id"]
|
||||||
|
context.response = requests.get(f"{Env.KAPOW_CONTROLAPI_URL}/routes/{id}")
|
||||||
|
|||||||
Reference in New Issue
Block a user