use super::*;
mod aspnet_resolver_extract {
use super::*;
#[test]
fn extracts_route_from_http_get_attribute() {
let src = r#"
[HttpGet("/users")]
public IActionResult ListUsers()
{
return Ok();
}
"#;
let result = ASPNET_RESOLVER.extract("UserController.cs", src);
assert_eq!(result.nodes[0].name, "GET /users");
assert_eq!(result.references[0].reference_name, "ListUsers");
}
#[test]
fn utf8_window_extracts_route_when_csharp_limit_splits_a_character() {
let mut src = "[HttpGet(\"/users\")]\npublic IActionResult ListUsers() {}".to_string();
let window_end = "[HttpGet(\"/users\")]".len() + 600;
src.push_str(&"a".repeat(window_end - src.len() - 1));
src.push_str("ä¸tail");
let result = ASPNET_RESOLVER.extract("UserController.cs", &src);
assert_eq!(result.nodes[0].name, "GET /users");
assert_eq!(result.references[0].reference_name, "ListUsers");
}
}
mod vapor_resolver_extract {
use super::*;
#[test]
fn extracts_route_from_app_get_with_use() {
let result = VAPOR_RESOLVER.extract("routes.swift", "app.get(\"users\", use: listUsers)\n");
assert_eq!(result.nodes[0].name, "GET /users");
assert_eq!(result.references[0].reference_name, "listUsers");
}
#[test]
fn extracts_grouped_route_collection_routes_with_group_prefix_and_no_path_arg() {
let src = r#"
func boot(routes: RoutesBuilder) throws {
let todos = routes.grouped("todos")
todos.get(use: index)
todos.post(use: create)
todos.group(":todoID") { todo in
todo.delete(use: delete)
}
}
"#;
let result = VAPOR_RESOLVER.extract("TodoController.swift", src);
assert_eq!(
sorted(names(&result.nodes)),
vec!["DELETE /todos/:todoID", "GET /todos", "POST /todos"]
);
assert_eq!(
sorted(reference_names(&result.references)),
vec!["create", "delete", "index"]
);
}
#[test]
fn handles_use_self_handler_and_non_string_path_segments() {
let result = VAPOR_RESOLVER.extract(
"UserController.swift",
"router.get(\"users\", User.parameter, \"edit\", use: self.editUserHandler)\n",
);
assert_eq!(result.nodes[0].name, "GET /users/edit");
assert_eq!(result.references[0].reference_name, "editUserHandler");
}
#[test]
fn ignores_non_route_get_calls_that_lack_use() {
let result = VAPOR_RESOLVER.extract(
"configure.swift",
"let host = Environment.get(\"DATABASE_HOST\") ?? \"localhost\"\n",
);
assert!(result.nodes.is_empty());
}
}