summaryrefslogtreecommitdiff
path: root/src/event/routes/test/channel.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-10-25 00:33:16 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-10-25 00:56:48 -0400
commit5423ec3937a4e28f3958a71b3db7498a4c427dc1 (patch)
tree8fc8531086c1691b0a9fc0a5ddb615d913dc6448 /src/event/routes/test/channel.rs
parenteae0edb57e9ade7c73affb78baf2ae267b6290b8 (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/channel.rs')
-rw-r--r--src/event/routes/test/channel.rs69
1 files changed, 50 insertions, 19 deletions
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;
}