def test_etag_set_etag_in_response(self, app, schemas, paginate): blp = Blueprint('test', __name__) etag_schema = schemas.DocEtagSchema item = {'item_id': 1, 'db_field': 0} if paginate: extra_data = (('X-Pagination', 'Dummy pagination header'),) else: extra_data = tuple() etag = blp._generate_etag(item, extra_data=extra_data) etag_with_schema = blp._generate_etag( item, etag_schema, extra_data=extra_data) with app.test_request_context('/'): resp = Response() if extra_data: resp.headers['X-Pagination'] = 'Dummy pagination header' get_appcontext()['result_dump'] = item blp._set_etag_in_response(resp, None) assert resp.get_etag() == (etag, False) with app.test_request_context('/'): resp = Response() if extra_data: resp.headers['X-Pagination'] = 'Dummy pagination header' get_appcontext()['result_raw'] = item blp._set_etag_in_response(resp, etag_schema) assert resp.get_etag() == (etag_with_schema, False)
def test_etag_duplicate_header(self, app): """ Check duplicate header results in a different ETag. """ class CustomBlueprint(Blueprint): ETAG_INCLUDE_HEADERS = Blueprint.ETAG_INCLUDE_HEADERS + ['X-test'] blp = CustomBlueprint('test', __name__, url_prefix='/test') with app.test_request_context('/'): resp = Response() resp.headers.add('X-test', 'Test') get_appcontext()['result_dump'] = {} blp._set_etag_in_response(resp, None) etag_1 = resp.get_etag() with app.test_request_context('/'): resp = Response() resp.headers.add('X-test', 'Test') resp.headers.add('X-test', 'Test') get_appcontext()['result_dump'] = {} blp._set_etag_in_response(resp, None) etag_2 = resp.get_etag() assert etag_1 != etag_2
def test_etag_set_etag_in_response(self, app, schemas, paginate): blp = Blueprint("test", __name__) etag_schema = schemas.DocEtagSchema item = {"item_id": 1, "db_field": 0} if paginate: extra_data = (("X-Pagination", "Dummy pagination header"), ) else: extra_data = tuple() etag = blp._generate_etag(item, extra_data=extra_data) etag_with_schema = blp._generate_etag(item, etag_schema, extra_data=extra_data) with app.test_request_context("/"): resp = Response() if extra_data: resp.headers["X-Pagination"] = "Dummy pagination header" get_appcontext()["result_dump"] = item blp._set_etag_in_response(resp, None) assert resp.get_etag() == (etag, False) with app.test_request_context("/"): resp = Response() if extra_data: resp.headers["X-Pagination"] = "Dummy pagination header" get_appcontext()["result_raw"] = item blp._set_etag_in_response(resp, etag_schema) assert resp.get_etag() == (etag_with_schema, False)
def etag_match(inputs, rsp): headers = inputs.get("headers", None) etag = headers.get("Etag", None) etags_match = True if etag is not None: tmp = Response(json.dumps(rsp), status=400, content_type="application/json") tmp.add_etag() etags_match = werkzeug.http.unquote_etag(etag) == tmp.get_etag() return etags_match
def test_etag_set_etag_in_response(self, app, schemas, paginate): etag_schema = schemas.DocEtagSchema item = {'item_id': 1, 'db_field': 0} extra_data = ('Dummy pagination header', ) if paginate else tuple() etag = _generate_etag(item, extra_data=extra_data) etag_with_schema = _generate_etag(item, etag_schema, extra_data=extra_data) with app.test_request_context('/'): resp = Response() if extra_data: resp.headers['X-Pagination'] = 'Dummy pagination header' if is_etag_enabled(app): set_etag_in_response(resp, item, None) assert resp.get_etag() == (etag, False) set_etag_in_response(resp, item, etag_schema) assert resp.get_etag() == (etag_with_schema, False) else: set_etag_in_response(resp, item, None) assert resp.get_etag() == (None, None) set_etag_in_response(resp, item, etag_schema) assert resp.get_etag() == (None, None) disable_etag_for_request() resp = Response() set_etag_in_response(resp, item, None) assert resp.get_etag() == (None, None) set_etag_in_response(resp, item, etag_schema) assert resp.get_etag() == (None, None)
def test_etag_duplicate_header(self, app): """Check duplicate header results in a different ETag""" class CustomBlueprint(Blueprint): ETAG_INCLUDE_HEADERS = Blueprint.ETAG_INCLUDE_HEADERS + ["X-test"] blp = CustomBlueprint("test", __name__, url_prefix="/test") with app.test_request_context("/"): resp = Response() resp.headers.add("X-test", "Test") get_appcontext()["result_dump"] = {} blp._set_etag_in_response(resp, None) etag_1 = resp.get_etag() with app.test_request_context("/"): resp = Response() resp.headers.add("X-test", "Test") resp.headers.add("X-test", "Test") get_appcontext()["result_dump"] = {} blp._set_etag_in_response(resp, None) etag_2 = resp.get_etag() assert etag_1 != etag_2