async 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) async 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) async 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)
async 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') async with app.test_request_context('/'): resp = Response("Test") resp.headers.add('X-test', 'Test') get_appcontext()['result_dump'] = {} blp._set_etag_in_response(resp, None) etag_1 = resp.get_etag() async with app.test_request_context('/'): resp = Response("Test") 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