summaryrefslogtreecommitdiff
path: root/src/login/routes/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/login/routes/test')
-rw-r--r--src/login/routes/test/login.rs128
-rw-r--r--src/login/routes/test/logout.rs97
-rw-r--r--src/login/routes/test/mod.rs2
3 files changed, 0 insertions, 227 deletions
diff --git a/src/login/routes/test/login.rs b/src/login/routes/test/login.rs
deleted file mode 100644
index 68c92de..0000000
--- a/src/login/routes/test/login.rs
+++ /dev/null
@@ -1,128 +0,0 @@
-use axum::{
- extract::{Json, State},
- http::StatusCode,
-};
-
-use crate::{login::routes, test::fixtures, token::app};
-
-#[tokio::test]
-async fn correct_credentials() {
- // Set up the environment
-
- let app = fixtures::scratch_app().await;
- let (name, password) = fixtures::login::create_with_password(&app, &fixtures::now()).await;
-
- // Call the endpoint
-
- let identity = fixtures::identity::not_logged_in();
- let logged_in_at = fixtures::now();
- let request = routes::LoginRequest {
- name: name.clone(),
- password,
- };
- let (identity, status) =
- routes::on_login(State(app.clone()), logged_in_at, identity, Json(request))
- .await
- .expect("logged in with valid credentials");
-
- // Verify the return value's basic structure
-
- assert_eq!(StatusCode::NO_CONTENT, status);
- let secret = identity.secret().expect("logged in with valid credentials");
-
- // Verify the semantics
-
- let validated_at = fixtures::now();
- let (_, validated_login) = app
- .tokens()
- .validate(&secret, &validated_at)
- .await
- .expect("identity secret is valid");
-
- assert_eq!(name, validated_login.name);
-}
-
-#[tokio::test]
-async fn invalid_name() {
- // Set up the environment
-
- let app = fixtures::scratch_app().await;
-
- // Call the endpoint
-
- let identity = fixtures::identity::not_logged_in();
- let logged_in_at = fixtures::now();
- let (name, password) = fixtures::login::propose();
- let request = routes::LoginRequest {
- name: name.clone(),
- password,
- };
- let routes::LoginError(error) =
- routes::on_login(State(app.clone()), logged_in_at, identity, Json(request))
- .await
- .expect_err("logged in with an incorrect password");
-
- // Verify the return value's basic structure
-
- assert!(matches!(error, app::LoginError::Rejected));
-}
-
-#[tokio::test]
-async fn incorrect_password() {
- // Set up the environment
-
- let app = fixtures::scratch_app().await;
- let login = fixtures::login::create(&app, &fixtures::now()).await;
-
- // Call the endpoint
-
- let logged_in_at = fixtures::now();
- let identity = fixtures::identity::not_logged_in();
- let request = routes::LoginRequest {
- name: login.name,
- password: fixtures::login::propose_password(),
- };
- let routes::LoginError(error) =
- routes::on_login(State(app.clone()), logged_in_at, identity, Json(request))
- .await
- .expect_err("logged in with an incorrect password");
-
- // Verify the return value's basic structure
-
- assert!(matches!(error, app::LoginError::Rejected));
-}
-
-#[tokio::test]
-async fn token_expires() {
- // Set up the environment
-
- let app = fixtures::scratch_app().await;
- let (name, password) = fixtures::login::create_with_password(&app, &fixtures::now()).await;
-
- // Call the endpoint
-
- let logged_in_at = fixtures::ancient();
- let identity = fixtures::identity::not_logged_in();
- let request = routes::LoginRequest { name, password };
- let (identity, _) = routes::on_login(State(app.clone()), logged_in_at, identity, Json(request))
- .await
- .expect("logged in with valid credentials");
- let secret = identity.secret().expect("logged in with valid credentials");
-
- // Verify the semantics
-
- let expired_at = fixtures::now();
- app.tokens()
- .expire(&expired_at)
- .await
- .expect("expiring tokens never fails");
-
- let verified_at = fixtures::now();
- let error = app
- .tokens()
- .validate(&secret, &verified_at)
- .await
- .expect_err("validating an expired token");
-
- assert!(matches!(error, app::ValidateError::InvalidToken));
-}
diff --git a/src/login/routes/test/logout.rs b/src/login/routes/test/logout.rs
deleted file mode 100644
index 611829e..0000000
--- a/src/login/routes/test/logout.rs
+++ /dev/null
@@ -1,97 +0,0 @@
-use axum::{
- extract::{Json, State},
- http::StatusCode,
-};
-
-use crate::{login::routes, test::fixtures, token::app};
-
-#[tokio::test]
-async fn successful() {
- // Set up the environment
-
- let app = fixtures::scratch_app().await;
- let now = fixtures::now();
- let login = fixtures::login::create_with_password(&app, &fixtures::now()).await;
- let identity = fixtures::identity::logged_in(&app, &login, &now).await;
- let secret = fixtures::identity::secret(&identity);
-
- // Call the endpoint
-
- let (response_identity, response_status) = routes::on_logout(
- State(app.clone()),
- fixtures::now(),
- identity.clone(),
- Json(routes::LogoutRequest {}),
- )
- .await
- .expect("logged out with a valid token");
-
- // Verify the return value's basic structure
-
- assert!(response_identity.secret().is_none());
- assert_eq!(StatusCode::NO_CONTENT, response_status);
-
- // Verify the semantics
-
- let error = app
- .tokens()
- .validate(&secret, &now)
- .await
- .expect_err("secret is invalid");
- match error {
- app::ValidateError::InvalidToken => (), // should be invalid
- other @ app::ValidateError::DatabaseError(_) => {
- panic!("expected ValidateError::InvalidToken, got {other:#}")
- }
- }
-}
-
-#[tokio::test]
-async fn no_identity() {
- // Set up the environment
-
- let app = fixtures::scratch_app().await;
-
- // Call the endpoint
-
- let identity = fixtures::identity::not_logged_in();
- let (identity, status) = routes::on_logout(
- State(app),
- fixtures::now(),
- identity,
- Json(routes::LogoutRequest {}),
- )
- .await
- .expect("logged out with no token");
-
- // Verify the return value's basic structure
-
- assert!(identity.secret().is_none());
- assert_eq!(StatusCode::NO_CONTENT, status);
-}
-
-#[tokio::test]
-async fn invalid_token() {
- // Set up the environment
-
- let app = fixtures::scratch_app().await;
-
- // Call the endpoint
-
- let identity = fixtures::identity::fictitious();
- let error = routes::on_logout(
- State(app),
- fixtures::now(),
- identity,
- Json(routes::LogoutRequest {}),
- )
- .await
- .expect_err("logged out with an invalid token");
-
- // Verify the return value's basic structure
-
- assert!(matches!(
- error,
- routes::LogoutError::ValidateError(app::ValidateError::InvalidToken)
- ));
-}
diff --git a/src/login/routes/test/mod.rs b/src/login/routes/test/mod.rs
deleted file mode 100644
index 90522c4..0000000
--- a/src/login/routes/test/mod.rs
+++ /dev/null
@@ -1,2 +0,0 @@
-mod login;
-mod logout;