summaryrefslogtreecommitdiff
path: root/src/test/fixtures/identity.rs
blob: 20929f9c80e9945864401d47b09ddbadf8a6a356 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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: &App,
    cookie: &IdentityCookie,
    validated_at: &RequestedAt,
) -> Identity
where
    Tokens: FromRef<App>,
{
    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: &App,
    credentials: &(Name, Password),
    issued_at: &RequestedAt,
) -> Identity
where
    Tokens: FromRef<App>,
    Logins: FromRef<App>,
{
    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 }
}