Compare commits
2 Commits
10551a9bc9
...
c0a056cf13
| Author | SHA1 | Date |
|---|---|---|
|
|
c0a056cf13 | |
|
|
bffcdbe452 |
|
|
@ -29,3 +29,4 @@ tracing-subscriber = { version = "0.3", default_features = false, features = ["s
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
scraper = "0.18"
|
scraper = "0.18"
|
||||||
|
percent-encoding = "2.3"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1 @@
|
||||||
certifi==2024.2.2
|
|
||||||
charset-normalizer==3.3.2
|
|
||||||
docker==7.0.0
|
docker==7.0.0
|
||||||
idna==3.6
|
|
||||||
packaging==23.2
|
|
||||||
requests==2.31.0
|
|
||||||
urllib3==2.2.1
|
|
||||||
|
|
|
||||||
|
|
@ -83,3 +83,80 @@ async fn create_new_user<D: Database>(
|
||||||
NewUserTemplate {},
|
NewUserTemplate {},
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use crate::{
|
||||||
|
app::AppState,
|
||||||
|
authentication::{authenticate_user_with_jwt, ParsedJwt},
|
||||||
|
db::fake::FakeDatabase,
|
||||||
|
};
|
||||||
|
use {
|
||||||
|
axum::{
|
||||||
|
body::Body,
|
||||||
|
http::{header::CONTENT_TYPE, Request, StatusCode},
|
||||||
|
routing::RouterIntoService,
|
||||||
|
},
|
||||||
|
percent_encoding::percent_decode_str,
|
||||||
|
tower::{Service, ServiceExt},
|
||||||
|
};
|
||||||
|
|
||||||
|
fn create_test_app() -> (RouterIntoService<Body>, FakeDatabase) {
|
||||||
|
let db = FakeDatabase::new_empty();
|
||||||
|
(
|
||||||
|
routes()
|
||||||
|
.with_state(AppState { db: db.clone() })
|
||||||
|
.into_service(),
|
||||||
|
db,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn create_new_user_adds_user_to_database_and_sets_jwt_cookie() {
|
||||||
|
let (mut app, db) = create_test_app();
|
||||||
|
|
||||||
|
let request = Request::post("/create_new_user")
|
||||||
|
.header(CONTENT_TYPE, "application/x-www-form-urlencoded")
|
||||||
|
.body(Body::from(
|
||||||
|
"real_name=Joe%20User&email=joe%40user.com&password=abc123",
|
||||||
|
))
|
||||||
|
.unwrap();
|
||||||
|
let response = ServiceExt::<Request<Body>>::ready(&mut app)
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.call(request)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
let set_cookie = response
|
||||||
|
.headers()
|
||||||
|
.get("set-cookie")
|
||||||
|
.unwrap()
|
||||||
|
.to_str()
|
||||||
|
.unwrap();
|
||||||
|
let cookie_parts: Vec<_> = set_cookie.split(';').map(|s| s.trim()).collect();
|
||||||
|
assert_eq!(2, cookie_parts.len());
|
||||||
|
assert_eq!("SameSite=Strict", cookie_parts[1]);
|
||||||
|
let jwt_parts: Vec<_> = cookie_parts[0].split('=').collect();
|
||||||
|
assert_eq!(2, jwt_parts.len());
|
||||||
|
assert_eq!("jwt", jwt_parts[0]);
|
||||||
|
let jwt = percent_decode_str(jwt_parts[1]).decode_utf8().unwrap();
|
||||||
|
|
||||||
|
match authenticate_user_with_jwt(&db, dbg!(&jwt)).await.unwrap() {
|
||||||
|
ParsedJwt::Valid(user) => {
|
||||||
|
assert_eq!("Joe User", user.real_name);
|
||||||
|
assert_eq!(
|
||||||
|
"Joe User",
|
||||||
|
db.get_user_with_id(user.get_id())
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.unwrap()
|
||||||
|
.real_name
|
||||||
|
);
|
||||||
|
}
|
||||||
|
_ => assert!(false),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue