From a0ed11a3c4ddb2f532fa70884dc2829a23a5eec8 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Fri, 7 Aug 2026 01:44:17 -0500 Subject: Let users clear recent activity on Home (#11) Add a Clear button in the Home Recent section header to drop all entries, plus swipe-to-delete on each row to forget a single item (gated on the existing swipe-actions setting). Back it with RecentActivityStore.clear and remove(id:), with unit tests. --- HutchTests/RecentActivityStoreTests.swift | 38 +++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 HutchTests/RecentActivityStoreTests.swift (limited to 'HutchTests/RecentActivityStoreTests.swift') diff --git a/HutchTests/RecentActivityStoreTests.swift b/HutchTests/RecentActivityStoreTests.swift new file mode 100644 index 0000000..e6fcc04 --- /dev/null +++ b/HutchTests/RecentActivityStoreTests.swift @@ -0,0 +1,38 @@ +import Foundation +import Testing +@testable import Hutch + +struct RecentActivityStoreTests { + @Test + func removeDropsMatchingEntryKeepingOthers() { + let defaults = UserDefaults(suiteName: #function)! + defaults.removePersistentDomain(forName: #function) + + RecentActivityStore.recordBuild(jobId: 1, title: "Build 1", defaults: defaults) + RecentActivityStore.recordBuild(jobId: 2, title: "Build 2", defaults: defaults) + + RecentActivityStore.remove(id: "build:1", defaults: defaults) + + let remaining = RecentActivityStore.load(defaults: defaults) + #expect(remaining.map(\.id) == ["build:2"]) + } + + @Test + func clearRemovesAllEntries() { + let defaults = UserDefaults(suiteName: #function)! + defaults.removePersistentDomain(forName: #function) + + RecentActivityStore.recordBuild(jobId: 1, title: "Build 1", defaults: defaults) + RecentActivityStore.recordTicket( + ownerUsername: "~alice", + trackerName: "hutch", + ticketId: 42, + title: "A ticket", + defaults: defaults + ) + + RecentActivityStore.clear(defaults: defaults) + + #expect(RecentActivityStore.load(defaults: defaults).isEmpty) + } +} -- cgit v1.2.3