From 5423ec3937a4e28f3958a71b3db7498a4c427dc1 Mon Sep 17 00:00:00 2001 From: Owen Jacobson Date: Fri, 25 Oct 2024 00:33:16 -0400 Subject: Tests for purged channels and messages. This required a re-think of the `.immediately()` combinator, to generalize it to cases where a message is _not_ expected. That (more or less immediately) suggested some mixed combinators, particularly for stream futures (futures of `Option`). --- src/event/routes/test/channel.rs | 69 +++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 19 deletions(-) (limited to 'src/event/routes/test/channel.rs') diff --git a/src/event/routes/test/channel.rs b/src/event/routes/test/channel.rs index 0ab28c4..6a0a803 100644 --- a/src/event/routes/test/channel.rs +++ b/src/event/routes/test/channel.rs @@ -4,7 +4,7 @@ use futures::{future, stream::StreamExt as _}; use crate::{ event::routes::get, - test::fixtures::{self, future::Immediately as _}, + test::fixtures::{self, future::Expect as _}, }; #[tokio::test] @@ -32,14 +32,13 @@ async fn creating() { // Verify channel created event - let _ = events + events .filter_map(fixtures::event::channel) .filter_map(fixtures::event::channel::created) .filter(|event| future::ready(event.channel == channel)) .next() - .immediately() - .await - .expect("channel created event is delivered"); + .expect_some("channel created event is delivered") + .await; } #[tokio::test] @@ -72,9 +71,8 @@ async fn previously_created() { .filter_map(fixtures::event::channel::created) .filter(|event| future::ready(event.channel == channel)) .next() - .immediately() - .await - .expect("channel created event is delivered"); + .expect_some("channel created event is delivered") + .await; } #[tokio::test] @@ -105,9 +103,8 @@ async fn expiring() { .filter_map(fixtures::event::channel::deleted) .filter(|event| future::ready(event.id == channel.id)) .next() - .immediately() - .await - .expect("a deleted channel event will be delivered"); + .expect_some("a deleted channel event will be delivered") + .await; } #[tokio::test] @@ -138,9 +135,8 @@ async fn previously_expired() { .filter_map(fixtures::event::channel::deleted) .filter(|event| future::ready(event.id == channel.id)) .next() - .immediately() - .await - .expect("a deleted channel event will be delivered"); + .expect_some("a deleted channel event will be delivered") + .await; } #[tokio::test] @@ -171,9 +167,8 @@ async fn deleting() { .filter_map(fixtures::event::channel::deleted) .filter(|event| future::ready(event.id == channel.id)) .next() - .immediately() - .await - .expect("a deleted channel event will be delivered"); + .expect_some("a deleted channel event will be delivered") + .await; } #[tokio::test] @@ -204,7 +199,43 @@ async fn previously_deleted() { .filter_map(fixtures::event::channel::deleted) .filter(|event| future::ready(event.id == channel.id)) .next() - .immediately() + .expect_some("a deleted channel event will be delivered") + .await; +} + +#[tokio::test] +async fn previously_purged() { + // Set up the environment + + let app = fixtures::scratch_app().await; + let channel = fixtures::channel::create(&app, &fixtures::ancient()).await; + + // Delete and purge the channel + + app.channels() + .delete(&channel.id, &fixtures::ancient()) + .await + .expect("deleting a valid channel succeeds"); + + app.channels() + .purge(&fixtures::now()) .await - .expect("a deleted channel event will be delivered"); + .expect("purging channels always 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"); + + // Check for expiry event + events + .filter_map(fixtures::event::channel) + .filter_map(fixtures::event::channel::deleted) + .filter(|event| future::ready(event.id == channel.id)) + .next() + .expect_wait("deleted channel events not delivered") + .await; } -- cgit v1.2.3