diff --git a/tavern/_core/schema/tests.jsonschema.yaml b/tavern/_core/schema/tests.jsonschema.yaml index 428f62d4..6e426ec8 100644 --- a/tavern/_core/schema/tests.jsonschema.yaml +++ b/tavern/_core/schema/tests.jsonschema.yaml @@ -326,6 +326,10 @@ definitions: description: Expected JSON response $ref: "#/definitions/any_json" + redirect_query_params: + description: Query parameters parsed from the 'location' of a redirect + type: object + verify_response_with: oneOf: - $ref: "#/definitions/verify_block" diff --git a/tests/integration/server.py b/tests/integration/server.py index 03689bfe..02c5b86d 100644 --- a/tests/integration/server.py +++ b/tests/integration/server.py @@ -9,7 +9,7 @@ import uuid from datetime import datetime, timedelta from hashlib import sha512 -from urllib.parse import unquote_plus +from urllib.parse import unquote_plus, urlencode import jwt from flask import Flask, Response, jsonify, make_response, redirect, request, session @@ -332,7 +332,13 @@ def expect_cookie(): @app.route("/redirect/source", methods=["GET"]) def redirect_to_other_endpoint(): - return redirect("/redirect/destination", 302) + query_params = urlencode( + { + "test_value": "lorem ipsum?", + } + ) + + return redirect(f"/redirect/destination?{query_params}", 302) @app.route("/redirect/loop", methods=["GET"]) diff --git a/tests/integration/test_follow_redirects.tavern.yaml b/tests/integration/test_follow_redirects.tavern.yaml index 95261455..ad1b440d 100644 --- a/tests/integration/test_follow_redirects.tavern.yaml +++ b/tests/integration/test_follow_redirects.tavern.yaml @@ -40,3 +40,15 @@ stages: status_code: 200 json: status: successful redirect + +--- +test_name: Checking for redirect_query_params + +stages: + - name: Check for a complex value in redirect query params + request: + url: "{global_host}/redirect/source" + response: + status_code: 302 + redirect_query_params: + test_value: lorem ipsum?