diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2024-09-29 02:02:41 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2024-09-29 02:04:01 -0400 |
| commit | 6c054c5b8d43a818ccfa9087960dc19b286e6bb7 (patch) | |
| tree | c1eff6f13a1ac3ba102fcfa22de9f25ed30546d0 /src/events/routes | |
| parent | 0b1cb80dd0b0f90c4892de7e7a2d18a076ecbdf2 (diff) | |
Reimplement the logout machinery in terms of token IDs, not token secrets.
This (a) reduces the amount of passing secrets around that's needed, and (b) allows tests to log out in a more straightforwards manner.
Ish. The fixtures are a mess, but so is the nomenclature. Fix the latter and the former will probably follow.
Diffstat (limited to 'src/events/routes')
| -rw-r--r-- | src/events/routes/test.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/events/routes/test.rs b/src/events/routes/test.rs index 0b62b5b..820192d 100644 --- a/src/events/routes/test.rs +++ b/src/events/routes/test.rs @@ -355,6 +355,7 @@ async fn terminates_on_token_expiry() { let subscriber_creds = fixtures::login::create_with_password(&app).await; let subscriber = fixtures::identity::identity(&app, &subscriber_creds, &fixtures::ancient()).await; + let routes::Events(events) = routes::events(State(app.clone()), subscriber, None) .await .expect("subscribe never fails"); @@ -380,3 +381,45 @@ async fn terminates_on_token_expiry() { .await .is_none()); } + +#[tokio::test] +async fn terminates_on_logout() { + // Set up the environment + + let app = fixtures::scratch_app().await; + let channel = fixtures::channel::create(&app, &fixtures::now()).await; + let sender = fixtures::login::create(&app).await; + + // Subscribe via the endpoint + + let subscriber_creds = fixtures::login::create_with_password(&app).await; + let subscriber_token = + fixtures::identity::logged_in(&app, &subscriber_creds, &fixtures::now()).await; + let subscriber = + fixtures::identity::from_token(&app, &subscriber_token, &fixtures::now()).await; + + let routes::Events(events) = routes::events(State(app.clone()), subscriber.clone(), None) + .await + .expect("subscribe never fails"); + + // Verify the resulting stream's behaviour + + app.logins() + .logout(&subscriber.token) + .await + .expect("expiring tokens succeeds"); + + // These should not be delivered. + let messages = [ + fixtures::message::send(&app, &sender, &channel, &fixtures::now()).await, + fixtures::message::send(&app, &sender, &channel, &fixtures::now()).await, + fixtures::message::send(&app, &sender, &channel, &fixtures::now()).await, + ]; + + assert!(events + .filter(|types::ResumableEvent(_, event)| future::ready(messages.contains(event))) + .next() + .immediately() + .await + .is_none()); +} |
