From ef43fc320292bd942489ccaea4f5600d4125ed5d Mon Sep 17 00:00:00 2001 From: michaelboulton Date: Sat, 13 Apr 2024 18:38:59 +0100 Subject: [PATCH] Fix missing schema check for redirect query params (#928) --- tavern/_core/schema/tests.jsonschema.yaml | 4 ++++ tests/integration/server.py | 10 ++++++++-- tests/integration/test_follow_redirects.tavern.yaml | 12 ++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/tavern/_core/schema/tests.jsonschema.yaml b/tavern/_core/schema/tests.jsonschema.yaml index 428f62d46..6e426ec8e 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 03689bfe8..02c5b86d9 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 95261455e..ad1b440de 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?