def METHOD_NAME(event_loop, aiohttp_client: Callable, faker: Faker) -> TestClient:
    """
    Some app that:
    - creates app and request context
    - has a handler that parses request params, query and body
    """
    async def _handler(request: web.Request) -> web.Response:
        # --------- UNDER TEST -------
        # NOTE: app context does NOT need to be validated everytime!
        context = MyRequestContext.parse_obj({**dict(request.app), **dict(request)})
        path_params = parse_request_path_parameters_as(
            MyRequestPathParams, request, use_enveloped_error_v1=False
        )
        query_params = parse_request_query_parameters_as(
            MyRequestQueryParams, request, use_enveloped_error_v1=False
        )
        body = await parse_request_body_as(
            MyBody, request, use_enveloped_error_v1=False
        )
        # ---------------------------
        return web.json_response(
            {
                "parameters": path_params.dict(),
                "queries": query_params.dict(),
                "body": body.dict(),
                "context": context.dict(),
            },
            dumps=json_dumps,
        )
    # ---
    @web.middleware
    async def _middleware(request: web.Request, handler):
        # request context
        request[RQT_USERID_KEY] = 42
        request["RQT_IGNORE_CONTEXT"] = "not interesting"
        resp = await handler(request)
        return resp
    app = web.Application(
        middlewares=[
            _middleware,
        ]
    )
    # app context
    app[APP_SECRET_KEY] = faker.password()
    app["APP_IGNORE_CONTEXT"] = "not interesting"
    # adds handler
    app.add_routes([web.get("/projects/{project_uuid}", _handler)])
    return event_loop.run_until_complete(aiohttp_client(app))