Implementing poc spec behavior in append route.

This commit is contained in:
Roberto Abdelkader Martínez Pérez
2019-08-20 10:59:26 +02:00
parent b86454179a
commit c07638601b
4 changed files with 62 additions and 21 deletions
+39 -11
View File
@@ -1,12 +1,14 @@
import subprocess
from contextlib import suppress
from time import sleep
import json
import shlex
import socket
from contextlib import suppress
import subprocess
import requests
from environconfig import EnvironConfig, StringVar, IntVar
from environconfig import EnvironConfig, StringVar, IntVar, BooleanVar
import logging
class Env(EnvironConfig):
#: How to run Kapow! server
@@ -20,6 +22,30 @@ class Env(EnvironConfig):
KAPOW_BOOT_TIMEOUT = IntVar(default=10)
KAPOW_DEBUG_TESTS = BooleanVar(default=True)
if Env.KAPOW_DEBUG_TESTS:
# These two lines enable debugging at httplib level
# (requests->urllib3->http.client) You will see the REQUEST,
# including HEADERS and DATA, and RESPONSE with HEADERS but without
# DATA. The only thing missing will be the response.body which is
# not logged.
try:
import http.client as http_client
except ImportError:
# Python 2
import httplib as http_client
http_client.HTTPConnection.debuglevel = 1
# You must initialize logging, otherwise you'll not see debug output.
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
@given('I have a just started Kapow! server')
@given('I have a running Kapow! server')
def step_impl(context):
@@ -97,30 +123,32 @@ def step_impl(context):
if not hasattr(context, 'table'):
raise RuntimeError("A table must be set for this step.")
for row in context.table:
response = requests.post(f"{Env.KAPOW_CONTROLAPI_URL}/routes",
json={h: row[h] for h in row.headings})
response.raise_for_status()
row = context.table[0]
context.response = requests.post(f"{Env.KAPOW_CONTROLAPI_URL}/routes",
json={h: row[h] for h in row.headings})
@then('I get {code} as response code')
def step_impl(context, code):
raise NotImplementedError('STEP: Then I get unprocessable entity as response code')
assert context.response.status_code == int(code), f"Got {context.response.status_code} instead"
@then('I get "{reason}" as response reason phrase')
def step_impl(context, reason):
raise NotImplementedError('STEP: Then I get "Missing Mandatory Field" as response phrase')
assert context.response.reason == reason, f"Got {context.response.reason} instead"
@then('I get the following entity as response body')
def step_impl(context):
raise NotImplementedError('STEP: Then I get the following entity as response body')
for row in context.table:
for name, value in row.items():
assert name in context.response.json(), f"Field {name} not present in {context.response.json()}"
assert set(json.loads(value)) == set(context.response.json()[name])
@then('I get an empty response body')
def step_impl(context):
raise NotImplementedError('STEP: Then I get an empty response body')
assert context.response.content == b'', f"Response body is not empty. Got {context.response.content} instead."
@when('I delete the route with id "{id}"')