actix / actix/actix-web

Add support to be able to test the route tree using `match_pattern` and `match_name`.

Ouverte
#3,286 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Rust
Étoiles
24.8k
Forks
1.9k
Merge moyen
23 h 10 min
PR mergées (30 j)
26

Description

So currently the test requests does not seem to implement the match functions - `match_pattern`/`match_name`.
Consider the below app having two services:
```rust
#[get("/hello/{name}", name = "greet")]
async fn greet(name: web::Path) -> impl Responder {
format!("Hello {name}!")
}

#[get("/hello/me", name = "greet_me")]
async fn greet_me() -> impl Responder {
format!("Hi Developer!")
}
```
And a test like this:
```rust
#[actix_web::test]
async fn test_index_get() {
let _app = test::init_service(App::new().service(greet).service(greet_me)).await;
let req = test::TestRequest::get()
.uri("/hello/john")
.insert_header(ContentType::plaintext())
.to_srv_request();

println!("{:?}", req.match_pattern());
println!("{:?}", req.match_name());
assert!(true);
}
```

## Expected Behavior

`match_pattern` should print the matching route url/path, in this case: "/hello/{name}"
`match_name` should print the given name to the service, in this case: "greet"

## Current Behavior

Both `match_pattern` and `match_name` returns None.

## Context

We can use these functions to test if the user has registered the services in the correct order as he/she intended and the user requests are in fact routing to correct handlers.

Currently, if user had registered the `greet` service before `greet_me` service and a user sends the request to `/hello/me` it will send `"Hello me!`` whereas it should have returned `"Hi Developer!".
That's what we wanted to test, Additional Context: https://github.com/qdrant/qdrant/issues/3547.

## Your Environment

- Rust Version: rustc 1.75.0 (82e1608df 2023-12-21)
- Actix Web Version: 4

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.