diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2024-10-25 00:33:16 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2024-10-25 00:56:48 -0400 |
| commit | 5423ec3937a4e28f3958a71b3db7498a4c427dc1 (patch) | |
| tree | 8fc8531086c1691b0a9fc0a5ddb615d913dc6448 /src/event/routes/test/message.rs | |
| parent | eae0edb57e9ade7c73affb78baf2ae267b6290b8 (diff) | |
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<T>`).
Diffstat (limited to 'src/event/routes/test/message.rs')
| -rw-r--r-- | src/event/routes/test/message.rs | 77 |
1 files changed, 55 insertions, 22 deletions
diff --git a/src/event/routes/test/message.rs b/src/event/routes/test/message.rs index df42a89..63a3f43 100644 --- a/src/event/routes/test/message.rs +++ b/src/event/routes/test/message.rs @@ -7,7 +7,7 @@ use futures::{ use crate::{ event::routes::get, - test::fixtures::{self, future::Immediately as _}, + test::fixtures::{self, future::Expect as _}, }; #[tokio::test] @@ -46,9 +46,8 @@ async fn sending() { .filter_map(fixtures::event::message::sent) .filter(|event| future::ready(event.message == message)) .next() - .immediately() - .await - .expect("delivered message sent event"); + .expect_some("delivered message sent event") + .await; } #[tokio::test] @@ -87,9 +86,8 @@ async fn previously_sent() { .filter_map(fixtures::event::message::sent) .filter(|event| future::ready(event.message == message)) .next() - .immediately() - .await - .expect("delivered message sent event"); + .expect_some("delivered message sent event") + .await; } #[tokio::test] @@ -128,7 +126,7 @@ async fn sent_in_multiple_channels() { .filter_map(fixtures::event::message::sent) .take(messages.len()) .collect::<Vec<_>>() - .immediately() + .expect_ready("events ready") .await; for message in &messages { @@ -167,9 +165,8 @@ async fn sent_sequentially() { for message in &messages { let event = events .next() - .immediately() - .await - .expect("undelivered messages remaining"); + .expect_some("undelivered messages remaining") + .await; assert_eq!(message, &event.message); } @@ -205,9 +202,8 @@ async fn expiring() { .filter_map(fixtures::event::message::deleted) .filter(|event| future::ready(event.id == message.id)) .next() - .immediately() - .await - .expect("a deleted message event will be delivered"); + .expect_some("a deleted message event will be delivered") + .await; } #[tokio::test] @@ -240,9 +236,8 @@ async fn previously_expired() { .filter_map(fixtures::event::message::deleted) .filter(|event| future::ready(event.id == message.id)) .next() - .immediately() - .await - .expect("a deleted message event will be delivered"); + .expect_some("a deleted message event will be delivered") + .await; } #[tokio::test] @@ -275,9 +270,8 @@ async fn deleting() { .filter_map(fixtures::event::message::deleted) .filter(|event| future::ready(event.id == message.id)) .next() - .immediately() - .await - .expect("a deleted message event will be delivered"); + .expect_some("a deleted message event will be delivered") + .await; } #[tokio::test] @@ -310,7 +304,46 @@ async fn previously_deleted() { .filter_map(fixtures::event::message::deleted) .filter(|event| future::ready(event.id == message.id)) .next() - .immediately() + .expect_some("a deleted message 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; + let sender = fixtures::login::create(&app, &fixtures::ancient()).await; + let message = fixtures::message::send(&app, &channel, &sender, &fixtures::ancient()).await; + + // Purge the message + + app.messages() + .delete(&message.id, &fixtures::ancient()) + .await + .expect("deleting a valid message succeeds"); + + app.messages() + .purge(&fixtures::now()) .await - .expect("a deleted message event will be delivered"); + .expect("purge 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 delete event + + events + .filter_map(fixtures::event::message) + .filter_map(fixtures::event::message::deleted) + .filter(|event| future::ready(event.id == message.id)) + .next() + .expect_wait("no deleted message will be delivered") + .await; } |
