kimun 0.31.2

Code metrics tool — health score, complexity, duplication, hotspots, ownership
use super::*;

fn route(path: &str, module: &str) -> Route {
    Route {
        path: path.to_string(),
        module: module.to_string(),
    }
}

const ROUTER: &str = r#"
defmodule ShopWeb.Router do
  use ShopWeb, :router

  scope "/", ShopWeb do
    pipe_through :browser

    get "/", PageController, :home
    # get "/old", OldController, :index

    live_session :default do
      live "/orders", OrdersLive.Index, :index
      live "/orders/:id", OrdersLive.Show, :show
    end

    scope "/admin", Admin do
      live "/", DashboardLive
      resources "/users", UserController
    end
  end

  scope "/api" do
    post "/orders", ShopWeb.Api.OrderController, :create
  end

  get "/health", ShopWeb.HealthController, :check
end
"#;

#[test]
fn a_scope_adds_its_path_and_its_alias_to_what_is_inside() {
    assert_eq!(
        routes(ROUTER),
        [
            route("/", "ShopWeb.PageController"),
            route("/orders", "ShopWeb.OrdersLive.Index"),
            route("/orders/:id", "ShopWeb.OrdersLive.Show"),
            route("/admin", "ShopWeb.Admin.DashboardLive"),
            route("/admin/users", "ShopWeb.Admin.UserController"),
            route("/admin/users/new", "ShopWeb.Admin.UserController"),
            route("/admin/users/:id", "ShopWeb.Admin.UserController"),
            route("/admin/users/:id/edit", "ShopWeb.Admin.UserController"),
            route("/api/orders", "ShopWeb.Api.OrderController"),
            route("/health", "ShopWeb.HealthController"),
        ]
    );
}

#[test]
fn a_file_that_is_no_router_has_no_routes() {
    assert!(routes("defmodule Shop.Orders do\n  def get(id), do: id\nend\n").is_empty());
}

#[test]
fn a_test_requests_the_first_path_of_each_request() {
    let test = r#"
test "lists", %{conn: conn} do
  {:ok, view, _} = live(conn, ~p"/orders")
  conn = get(conn, "/orders/#{order.id}?tab=items")
  assert redirected_to(post(conn, ~p"/api/orders", %{})) == "/done"
  conn |> visit("/admin")
  assert_redirect(view, "/elsewhere")
  budget("/not/a/request")
end
"#;
    assert_eq!(
        requests(test),
        ["/admin", "/api/orders", "/orders", "/orders/:_?tab=items"]
    );
}

#[test]
fn a_request_without_a_path_literal_asks_for_nothing_known() {
    assert!(requests("live(conn, path)\nget(conn, Routes.page_path(conn, :home))\n").is_empty());
}

#[test]
fn a_route_serves_the_requests_that_match_it_segment_by_segment() {
    assert!(serves("/orders", "/orders"));
    assert!(serves("/orders", "/orders/?page=2"));
    assert!(serves("/orders/:id", "/orders/42"));
    assert!(serves("/orders/:id", "/orders/:_"));
    assert!(serves("/", "/"));
    assert!(serves("/files/*path", "/files/a/b"));

    assert!(!serves("/orders", "/orders/42"));
    assert!(!serves("/orders/new", "/orders/:_"));
    assert!(!serves("/orders", "/:_"));
    assert!(!serves("/orders/:id", "/orders"));
    assert!(!serves("/orders/:id", "/users/42"));
    assert!(!serves("/", "/orders"));
    assert!(!serves("/files/*path", "/other/a"));
}

#[test]
fn a_request_is_read_from_a_line_with_text_beyond_ascii() {
    let test = "assert html =~ \"Sesión\" and get(conn, \"/orders\")\nrevisión(conn)\n";
    assert_eq!(requests(test), ["/orders"]);
}