Compare commits
No commits in common. "c0a056cf137707a944d2c0e2278f44d30d104865" and "10551a9bc9b23de10a20ed0a8cf1f5296746253b" have entirely different histories.
c0a056cf13
...
10551a9bc9
|
|
@ -29,4 +29,3 @@ tracing-subscriber = { version = "0.3", default_features = false, features = ["s
|
|||
|
||||
[dev-dependencies]
|
||||
scraper = "0.18"
|
||||
percent-encoding = "2.3"
|
||||
|
|
|
|||
|
|
@ -1 +1,7 @@
|
|||
certifi==2024.2.2
|
||||
charset-normalizer==3.3.2
|
||||
docker==7.0.0
|
||||
idna==3.6
|
||||
packaging==23.2
|
||||
requests==2.31.0
|
||||
urllib3==2.2.1
|
||||
|
|
|
|||
|
|
@ -83,80 +83,3 @@ async fn create_new_user<D: Database>(
|
|||
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