diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2025-12-09 23:21:28 -0500 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2025-12-17 15:48:20 -0500 |
| commit | 522c1533a0af7af7d96bb4d6850ce0b2c8762e89 (patch) | |
| tree | b5bacf95cd302ce86cc6dce12dd59c6739e81642 /src/test/webpush.rs | |
| parent | 3c697f5fb1b8dbad46eac8fa299ed7cebfb36159 (diff) | |
Now that testing push-generating endpoints is more feasible, implement the missing test cases for `ping`.
Diffstat (limited to 'src/test/webpush.rs')
| -rw-r--r-- | src/test/webpush.rs | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/test/webpush.rs b/src/test/webpush.rs index f33f03c..96fa843 100644 --- a/src/test/webpush.rs +++ b/src/test/webpush.rs @@ -1,5 +1,6 @@ use std::{ any::Any, + collections::{HashMap, HashSet}, mem, sync::{Arc, Mutex}, }; @@ -11,12 +12,14 @@ use crate::{error::failed::Failed, push::Publish}; #[derive(Clone)] pub struct Client { sent: Arc<Mutex<Vec<Publication>>>, + failures: Arc<Mutex<HashMap<SubscriptionInfo, WebPushError>>>, } impl Client { pub fn new() -> Self { Self { sent: Arc::default(), + failures: Arc::default(), } } @@ -26,6 +29,11 @@ impl Client { let mut sent = self.sent.lock().unwrap(); mem::take(&mut sent) } + + pub fn fail_next(&self, subscription_info: &SubscriptionInfo, err: WebPushError) { + let mut failures = self.failures.lock().unwrap(); + failures.insert(subscription_info.clone(), err); + } } impl Publish for Client { @@ -40,19 +48,30 @@ impl Publish for Client { { let message: Box<dyn Any + Send> = Box::new(message); let subscriptions = subscriptions.into_iter().collect(); + + let mut failures = Vec::new(); + + let mut planned_failures = self.failures.lock().unwrap(); + for subscription in &subscriptions { + if let Some(err) = planned_failures.remove(subscription) { + failures.push((subscription.clone(), err)); + } + } + let publication = Publication { message, subscriptions, }; self.sent.lock().unwrap().push(publication); - Ok(Vec::new()) + Ok(failures) } } +#[derive(Debug)] pub struct Publication { pub message: Box<dyn Any + Send>, - pub subscriptions: Vec<SubscriptionInfo>, + pub subscriptions: HashSet<SubscriptionInfo>, } impl Publication { |
