use axum::extract::State; use axum_extra::extract::Query; use futures::StreamExt as _; use crate::test::{fixtures, fixtures::future::Expect as _}; #[tokio::test] async fn live_vapid_key_changes() { // Set up the context let app = fixtures::scratch_app().await; let resume_point = fixtures::boot::resume_point(&app).await; // Subscribe to events let subscriber = fixtures::identity::create(&app, &fixtures::now()).await; let super::Response(events) = super::handler( State(app.clone()), subscriber, None, Query(super::QueryParams { resume_point }), ) .await .expect("subscribe never fails"); // Rotate the VAPID key app.vapid() .refresh_key(&fixtures::now()) .await .expect("refreshing the vapid key always succeeds"); // Verify that there's a key rotation event events .filter_map(fixtures::event::stream::vapid) .filter_map(fixtures::event::stream::vapid::changed) .next() .expect_some("a vapid key change event is sent") .await; } #[tokio::test] async fn stored_vapid_key_changes() { // Set up the context let app = fixtures::scratch_app().await; let resume_point = fixtures::boot::resume_point(&app).await; // Rotate the VAPID key app.vapid() .refresh_key(&fixtures::now()) .await .expect("refreshing the vapid key always succeeds"); // Subscribe to events let subscriber = fixtures::identity::create(&app, &fixtures::now()).await; let super::Response(events) = super::handler( State(app.clone()), subscriber, None, Query(super::QueryParams { resume_point }), ) .await .expect("subscribe never fails"); // Verify that there's a key rotation event events .filter_map(fixtures::event::stream::vapid) .filter_map(fixtures::event::stream::vapid::changed) .next() .expect_some("a vapid key change event is sent") .await; } #[tokio::test] async fn no_past_vapid_key_changes() { // Set up the context let app = fixtures::scratch_app().await; // Rotate the VAPID key app.vapid() .refresh_key(&fixtures::now()) .await .expect("refreshing the vapid key always succeeds"); // Subscribe to events let resume_point = fixtures::boot::resume_point(&app).await; let subscriber = fixtures::identity::create(&app, &fixtures::now()).await; let super::Response(events) = super::handler( State(app.clone()), subscriber, None, Query(super::QueryParams { resume_point }), ) .await .expect("subscribe never fails"); // Verify that there's a key rotation event events .filter_map(fixtures::event::stream::vapid) .filter_map(fixtures::event::stream::vapid::changed) .next() .expect_wait("a vapid key change event is not sent") .await; }