From ac3b71ba65bb52b2d85f1ab9f6c00316a1a885ab Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Tue, 23 Dec 2025 15:20:00 +0000 Subject: test: prepare OwnerStateDataPushed fixture for purgatory This is the model for how to prepare all push tests for purgatory --- grasp-audit/src/client.rs | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'grasp-audit/src/client.rs') diff --git a/grasp-audit/src/client.rs b/grasp-audit/src/client.rs index 259a317..5995483 100644 --- a/grasp-audit/src/client.rs +++ b/grasp-audit/src/client.rs @@ -2,7 +2,7 @@ use crate::audit::{AuditConfig, AuditEventBuilder, AuditMode}; use crate::fixtures::FixtureKind; -use anyhow::{anyhow, Result}; +use anyhow::{anyhow, Context, Result}; use nostr_sdk::prelude::*; use std::collections::HashMap; use std::sync::{Arc, Mutex}; @@ -181,6 +181,49 @@ impl AuditClient { Ok(event_id) } + /// Send an event (with audit tags automatically added) and expect OK, success, 'purgatory:', verify not served - TODO the msg verificaiton is not implemented + pub async fn send_event_expect_purgatory_not_served(&self, event: Event) -> Result { + if self.config.read_only { + return Err(anyhow!("Client is in read-only mode")); + } + + let output = self.client.send_event(&event).await?; + let event_id = *output.id(); + + // Check if any relay rejected the event and return the error message + if !output.failed.is_empty() { + // Get the first failed relay error message + let (relay_url, error) = output.failed.iter().next().unwrap(); + return Err(anyhow!("Relay {} rejected event: {}", relay_url, error)); + } + + // Wait a bit for event to propagate + tokio::time::sleep(Duration::from_millis(300)).await; + + // ------------------------------------------------------ + // TODO Magically enable purgatory by uncommenting this: + // ------------------------------------------------------ + // ------------------------------------------------------ + // if !self.is_event_on_relay(event.id).await? { + // return Err(anyhow!( + // "event sent to relay was served instead of being put in purgatory" + // )); + // } + // ------------------------------------------------------ + + Ok(event_id) + } + + /// check if an event is on the relay + pub async fn is_event_on_relay(&self, id: EventId) -> Result { + Ok(!self + .client + .fetch_events(vec![Filter::new().id(id)], Duration::from_secs(1)) + .await + .context("error trying to query relay for event")? + .is_empty()) + } + /// Create an event builder that automatically includes audit tags /// /// All events built through this method will automatically have audit tags appended -- cgit v1.2.3