use axum::extract::FromRef; use crate::{ app::App, clock::RequestedAt, login::app::Logins, name::Name, password::Password, test::fixtures, token::{ Token, app::Tokens, extract::{Identity, IdentityCookie}, }, }; pub async fn create

(app: &App

, created_at: &RequestedAt) -> Identity { let credentials = fixtures::user::create_with_password(app, created_at).await; logged_in(app, &credentials, created_at).await } pub async fn from_cookie( app: &App, cookie: &IdentityCookie, validated_at: &RequestedAt, ) -> Identity where Tokens: FromRef, { let secret = cookie.secret().expect("identity token has a secret"); Tokens::from_ref(app) .validate(&secret, validated_at) .await .expect("always validates newly-issued secret") } pub async fn logged_in( app: &App, credentials: &(Name, Password), issued_at: &RequestedAt, ) -> Identity where Tokens: FromRef, Logins: FromRef, { let secret = fixtures::cookie::logged_in(app, credentials, issued_at).await; from_cookie(app, &secret, issued_at).await } pub fn fictitious() -> Identity { let login = fixtures::login::fictitious(); let (token, _) = Token::generate(&login, &fixtures::now()); Identity { token, login } }