summaryrefslogtreecommitdiff
path: root/src/test/fixtures/identity.rs
blob: bdd788177884ab43aaa49b39490b184107142a3e (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
use uuid::Uuid;

use crate::{
    app::App,
    clock::RequestedAt,
    login::extract::{Identity, IdentitySecret, IdentityToken},
    password::Password,
};

pub fn not_logged_in() -> IdentityToken {
    IdentityToken::new()
}

pub async fn logged_in(app: &App, login: &(String, Password), now: &RequestedAt) -> IdentityToken {
    let (name, password) = login;
    let token = app
        .logins()
        .login(name, password, now)
        .await
        .expect("should succeed given known-valid credentials");

    IdentityToken::new().set(token)
}

pub async fn identity(app: &App, login: &(String, Password), issued_at: &RequestedAt) -> Identity {
    let secret = logged_in(app, login, issued_at)
        .await
        .secret()
        .expect("successful login generates a secret");
    let (token, login) = app
        .logins()
        .validate(&secret, issued_at)
        .await
        .expect("always validates newly-issued secret");

    Identity { token, login }
}

pub fn secret(identity: &IdentityToken) -> IdentitySecret {
    identity.secret().expect("identity contained a secret")
}

pub fn fictitious() -> IdentityToken {
    let token = Uuid::new_v4().to_string();
    IdentityToken::new().set(token)
}