notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

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:
Mcrates/enostr/src/relay/mod.rs | 87+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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" + ); + } +}