# Scenario step implementations ## Start and stop Muck IMPLEMENTS GIVEN a running Muck start_muck() IMPLEMENTS WHEN Muck is restarted stop_muck() start_muck() IMPLEMENTS FINALLY Muck is stopped stop_muck() ## Create users IMPLEMENTS GIVEN a user (\S+) with superuser access user = get_next_match() users = V['superusers'] or [] V['superusers'] = users + [user] ## HTTP requests IMPLEMENTS WHEN user (\S+) makes request POST /res with body (.*) user = get_expanded_match() body = get_expanded_match() POST(user, '/res', {}, json.loads(body)) IMPLEMENTS WHEN user (\S+) makes request POST /res with header "(\S+): (.+)" and body (.*) user = get_expanded_match() header = get_expanded_match() value = get_expanded_match() body = get_expanded_match() POST(user, '/res', {header:value}, json.loads(body)) IMPLEMENTS WHEN user (\S+) makes request GET /res with header "(\S+): (.+)" user = get_expanded_match() header = get_expanded_match() value = get_expanded_match() GET(user, '/res', {header:value}) IMPLEMENTS WHEN user (\S+) makes request GET /status user = get_expanded_match() GET(user, '/status', {}) IMPLEMENTS WHEN user (\S+) makes request GET /search with body (.+) user = get_expanded_match() body = json.loads(get_expanded_match()) GET(user, '/search', {}, body=body) IMPLEMENTS WHEN user (\S+) makes request PUT /res with header "(\S+): (.+)" and header "(\S+): (.+)" and body (.+) user = get_expanded_match() header1 = get_expanded_match() value1 = get_expanded_match() header2 = get_expanded_match() value2 = get_expanded_match() body = get_expanded_match() headers = { header1: value1, header2: value2, } PUT(user, '/res', headers, json.loads(body)) IMPLEMENTS WHEN user (\S+) makes request DELETE /res with header "(\S+): (.+)" user = get_expanded_match() header = get_expanded_match() value = get_expanded_match() DELETE(user, '/res', {header:value}) ## Checking HTTP responses IMPLEMENTS THEN status code is (\d+) expected = int(get_expanded_match()) assertEqual(V['status_code'], expected) IMPLEMENTS THEN remember resource id as (\S+) name = get_next_match() save_header('Muck-Id', name) IMPLEMENTS THEN remember resource revision as (\S+) name = get_next_match() save_header('Muck-Revision', name) IMPLEMENTS THEN response has header "(\S+): (.+)" name = get_next_match() expected = get_expanded_match() actual = get_header(name) print 'header:', name print 'actual:', repr(actual) print 'expected:', repr(expected) print 'response headers:', V['response_headers'] assertEqual(actual, expected) IMPLEMENTS THEN response body is (.+) expected = get_expanded_match() print 'expected:', expected assertEqual(get_json_body(), json.loads(expected))