use crate::{ app::App, clock::RequestedAt, name::Name, test::fixtures, token::{ self, extract::{Identity, IdentityCookie}, }, user::Password, }; pub async fn create(app: &App, created_at: &RequestedAt) -> Identity { let credentials = fixtures::login::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 { let secret = cookie.secret().expect("identity token has a secret"); let (token, login) = app .tokens() .validate(&secret, validated_at) .await .expect("always validates newly-issued secret"); Identity { token, user: login } } pub async fn logged_in( app: &App, credentials: &(Name, Password), issued_at: &RequestedAt, ) -> Identity { let secret = fixtures::cookie::logged_in(app, credentials, issued_at).await; from_cookie(app, &secret, issued_at).await } pub fn fictitious() -> Identity { let token = token::Id::generate(); let login = fixtures::login::fictitious(); Identity { token, user: login } }