commit c4f728252930890191bc68406188d6f7e49db462
parent 0c6b4bac322e7279c5eff68650c60abfac02f671
Author: kernelkind <kernelkind@gmail.com>
Date: Thu, 5 Feb 2026 15:51:54 -0500
test(outbox): misc types
Signed-off-by: kernelkind <kernelkind@gmail.com>
Diffstat:
1 file changed, 87 insertions(+), 0 deletions(-)
diff --git a/crates/enostr/src/relay/mod.rs b/crates/enostr/src/relay/mod.rs
@@ -130,3 +130,90 @@ impl<'a> Iterator for MetadataFiltersIterMut<'a> {
Some((self.filters.next()?, self.meta.next()?))
}
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ fn filter_has_since(filter: &Filter, expected: u64) -> bool {
+ let json = filter.json().expect("filter json");
+ json.contains(&format!("\"since\":{}", expected))
+ }
+
+ #[test]
+ fn since_optimize_applies_last_seen_to_filter() {
+ let filter = Filter::new().kinds(vec![1]).build();
+ let mut metadata_filters = MetadataFilters::new(vec![filter]);
+
+ // Initially no since
+ let json_before = metadata_filters.get_filters()[0]
+ .json()
+ .expect("filter json");
+ assert!(
+ !json_before.contains("\"since\""),
+ "filter should not have since initially"
+ );
+
+ // Set last_seen on metadata
+ metadata_filters.meta[0].last_seen = Some(12345);
+
+ // Call since_optimize
+ metadata_filters.since_optimize();
+
+ // Now filter should have since
+ assert!(
+ filter_has_since(&metadata_filters.get_filters()[0], 12345),
+ "filter should have since:12345 after optimization"
+ );
+ }
+
+ #[test]
+ fn since_optimize_skips_filters_without_last_seen() {
+ let filter1 = Filter::new().kinds(vec![1]).build();
+ let filter2 = Filter::new().kinds(vec![2]).build();
+ let mut metadata_filters = MetadataFilters::new(vec![filter1, filter2]);
+
+ // Only set last_seen on first filter
+ metadata_filters.meta[0].last_seen = Some(99999);
+
+ metadata_filters.since_optimize();
+
+ // First filter should have since
+ assert!(
+ filter_has_since(&metadata_filters.get_filters()[0], 99999),
+ "first filter should have since"
+ );
+
+ // Second filter should NOT have since
+ let json_second = metadata_filters.get_filters()[1]
+ .json()
+ .expect("filter json");
+ assert!(
+ !json_second.contains("\"since\""),
+ "second filter should not have since"
+ );
+ }
+
+ #[test]
+ fn since_optimize_overwrites_existing_since() {
+ // Create filter with initial since value
+ let filter = Filter::new().kinds(vec![1]).since(100).build();
+ let mut metadata_filters = MetadataFilters::new(vec![filter]);
+
+ // Verify initial since
+ assert!(
+ filter_has_since(&metadata_filters.get_filters()[0], 100),
+ "filter should have initial since:100"
+ );
+
+ // Set different last_seen
+ metadata_filters.meta[0].last_seen = Some(200);
+ metadata_filters.since_optimize();
+
+ // Since should be updated to new value
+ assert!(
+ filter_has_since(&metadata_filters.get_filters()[0], 200),
+ "filter should have updated since:200"
+ );
+ }
+}