Home / Class/ TestRoutes Class — flask Architecture

TestRoutes Class — flask Architecture

Architecture documentation for the TestRoutes class in test_cli.py from the flask codebase.

Entity Profile

Dependency Diagram

graph TD
  87d8059b_b546_2f64_06d3_da6459a325ff["TestRoutes"]
  62c63da0_a9c3_ab0a_4c48_a9413eac90e3["test_cli.py"]
  87d8059b_b546_2f64_06d3_da6459a325ff -->|defined in| 62c63da0_a9c3_ab0a_4c48_a9413eac90e3
  107feeec_8921_f812_5ff2_d6141cc2d571["app()"]
  87d8059b_b546_2f64_06d3_da6459a325ff -->|method| 107feeec_8921_f812_5ff2_d6141cc2d571
  cfcc1ba6_ce20_a6d4_f8cd_998cddafcbac["invoke()"]
  87d8059b_b546_2f64_06d3_da6459a325ff -->|method| cfcc1ba6_ce20_a6d4_f8cd_998cddafcbac
  ff594b6c_d119_915e_507d_d4a50cb7e11e["expect_order()"]
  87d8059b_b546_2f64_06d3_da6459a325ff -->|method| ff594b6c_d119_915e_507d_d4a50cb7e11e
  1c2463dc_53b4_7b60_5549_5a16cce48390["test_simple()"]
  87d8059b_b546_2f64_06d3_da6459a325ff -->|method| 1c2463dc_53b4_7b60_5549_5a16cce48390
  02d6c36b_d894_2580_16f5_743c55150675["test_sort()"]
  87d8059b_b546_2f64_06d3_da6459a325ff -->|method| 02d6c36b_d894_2580_16f5_743c55150675
  5d659455_1606_5d60_8717_db37f5b8ebfb["test_all_methods()"]
  87d8059b_b546_2f64_06d3_da6459a325ff -->|method| 5d659455_1606_5d60_8717_db37f5b8ebfb
  ba76b4db_0e62_e6f9_a6ed_ed45f11a6658["test_no_routes()"]
  87d8059b_b546_2f64_06d3_da6459a325ff -->|method| ba76b4db_0e62_e6f9_a6ed_ed45f11a6658
  1703d04d_dcc6_a574_2487_2a39233b8f95["test_subdomain()"]
  87d8059b_b546_2f64_06d3_da6459a325ff -->|method| 1703d04d_dcc6_a574_2487_2a39233b8f95
  8222d8c0_6967_636b_520a_02e5f4863438["test_host()"]
  87d8059b_b546_2f64_06d3_da6459a325ff -->|method| 8222d8c0_6967_636b_520a_02e5f4863438

Relationship Graph

Source Code

tests/test_cli.py lines 446–518

class TestRoutes:
    @pytest.fixture
    def app(self):
        app = Flask(__name__)
        app.add_url_rule(
            "/get_post/<int:x>/<int:y>",
            methods=["GET", "POST"],
            endpoint="yyy_get_post",
        )
        app.add_url_rule("/zzz_post", methods=["POST"], endpoint="aaa_post")
        return app

    @pytest.fixture
    def invoke(self, app, runner):
        cli = FlaskGroup(create_app=lambda: app)
        return partial(runner.invoke, cli)

    def expect_order(self, order, output):
        # skip the header and match the start of each row
        for expect, line in zip(order, output.splitlines()[2:], strict=False):
            # do this instead of startswith for nicer pytest output
            assert line[: len(expect)] == expect

    def test_simple(self, invoke):
        result = invoke(["routes"])
        assert result.exit_code == 0
        self.expect_order(["aaa_post", "static", "yyy_get_post"], result.output)

    def test_sort(self, app, invoke):
        default_output = invoke(["routes"]).output
        endpoint_output = invoke(["routes", "-s", "endpoint"]).output
        assert default_output == endpoint_output
        self.expect_order(
            ["static", "yyy_get_post", "aaa_post"],
            invoke(["routes", "-s", "methods"]).output,
        )
        self.expect_order(
            ["yyy_get_post", "static", "aaa_post"],
            invoke(["routes", "-s", "rule"]).output,
        )
        match_order = [r.endpoint for r in app.url_map.iter_rules()]
        self.expect_order(match_order, invoke(["routes", "-s", "match"]).output)

    def test_all_methods(self, invoke):
        output = invoke(["routes"]).output
        assert "GET, HEAD, OPTIONS, POST" not in output
        output = invoke(["routes", "--all-methods"]).output
        assert "GET, HEAD, OPTIONS, POST" in output

    def test_no_routes(self, runner):
        app = Flask(__name__, static_folder=None)
        cli = FlaskGroup(create_app=lambda: app)
        result = runner.invoke(cli, ["routes"])
        assert result.exit_code == 0
        assert "No routes were registered." in result.output

    def test_subdomain(self, runner):
        app = Flask(__name__, static_folder=None)
        app.add_url_rule("/a", subdomain="a", endpoint="a")
        app.add_url_rule("/b", subdomain="b", endpoint="b")
        cli = FlaskGroup(create_app=lambda: app)
        result = runner.invoke(cli, ["routes"])
        assert result.exit_code == 0
        assert "Subdomain" in result.output

    def test_host(self, runner):
        app = Flask(__name__, static_folder=None, host_matching=True)
        app.add_url_rule("/a", host="a", endpoint="a")
        app.add_url_rule("/b", host="b", endpoint="b")
        cli = FlaskGroup(create_app=lambda: app)
        result = runner.invoke(cli, ["routes"])
        assert result.exit_code == 0
        assert "Host" in result.output

Defined In

Frequently Asked Questions

What is the TestRoutes class?
TestRoutes is a class in the flask codebase, defined in tests/test_cli.py.
Where is TestRoutes defined?
TestRoutes is defined in tests/test_cli.py at line 446.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free