diff --git a/bitchat/Utils/MessageDeduplicator.swift b/bitchat/Utils/MessageDeduplicator.swift index 215384fa..27909ad4 100644 --- a/bitchat/Utils/MessageDeduplicator.swift +++ b/bitchat/Utils/MessageDeduplicator.swift @@ -61,6 +61,7 @@ final class MessageDeduplicator { let now = Date() entries.append(Entry(id: id, timestamp: now)) lookup[id] = now + trimIfNeeded() } } diff --git a/bitchatTests/MessageDeduplicatorTests.swift b/bitchatTests/MessageDeduplicatorTests.swift new file mode 100644 index 00000000..6016d7a9 --- /dev/null +++ b/bitchatTests/MessageDeduplicatorTests.swift @@ -0,0 +1,28 @@ +// +// MessageDeduplicatorTests.swift +// bitchatTests +// +// Tests for MessageDeduplicator. +// This is free and unencumbered software released into the public domain. +// + +import Foundation +import Testing +@testable import bitchat + +@Suite("Message Deduplicator") +struct MessageDeduplicatorTests { + @Test func markProcessed_enforcesMaximumCount() { + let deduplicator = MessageDeduplicator(maxAge: 300, maxCount: 4) + + for id in ["a", "b", "c", "d", "e"] { + deduplicator.markProcessed(id) + } + + #expect(!deduplicator.contains("a")) + #expect(!deduplicator.contains("b")) + #expect(deduplicator.contains("c")) + #expect(deduplicator.contains("d")) + #expect(deduplicator.contains("e")) + } +}