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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
use axum::extract::State;
use axum_extra::extract::Query;
use futures::{future, stream::StreamExt as _};
use crate::{
event::routes::get,
test::fixtures::{self, future::Expect as _},
};
#[tokio::test]
async fn accepting_invite() {
// Set up the environment
let app = fixtures::scratch_app().await;
let issuer = fixtures::login::create(&app, &fixtures::now()).await;
let invite = fixtures::invite::issue(&app, &issuer, &fixtures::now()).await;
// Subscribe
let subscriber = fixtures::identity::create(&app, &fixtures::now()).await;
let get::Response(events) =
get::handler(State(app.clone()), subscriber, None, Query::default())
.await
.expect("subscribe never fails");
// Accept the invite
let (name, password) = fixtures::login::propose();
let (joiner, _) = app
.invites()
.accept(&invite.id, &name, &password, &fixtures::now())
.await
.expect("accepting an invite succeeds");
// Expect a login created event
let _ = events
.filter_map(fixtures::event::login)
.filter_map(fixtures::event::login::created)
.filter(|event| future::ready(event.login == joiner))
.next()
.expect_some("a login created event is sent")
.await;
}
#[tokio::test]
async fn previously_accepted_invite() {
// Set up the environment
let app = fixtures::scratch_app().await;
let issuer = fixtures::login::create(&app, &fixtures::now()).await;
let invite = fixtures::invite::issue(&app, &issuer, &fixtures::now()).await;
// Accept the invite
let (name, password) = fixtures::login::propose();
let (joiner, _) = app
.invites()
.accept(&invite.id, &name, &password, &fixtures::now())
.await
.expect("accepting an invite succeeds");
// Subscribe
let subscriber = fixtures::identity::create(&app, &fixtures::now()).await;
let get::Response(events) =
get::handler(State(app.clone()), subscriber, None, Query::default())
.await
.expect("subscribe never fails");
// Expect a login created event
let _ = events
.filter_map(fixtures::event::login)
.filter_map(fixtures::event::login::created)
.filter(|event| future::ready(event.login == joiner))
.next()
.expect_some("a login created event is sent")
.await;
}
|