krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
main: HutchTests/ProjectPinStoreTests.swift · raw
1import Foundation
2import Testing
3@testable import Hutch
4
5@MainActor
6struct ProjectPinStoreTests {
7 @Test
8 func storesPinnedProjectsPerUser() {
9 let defaults = UserDefaults(suiteName: #function)!
10 defaults.removePersistentDomain(forName: #function)
11
12 ProjectPinStore.togglePin(projectID: "project-1", for: "~alice", defaults: defaults)
13 ProjectPinStore.togglePin(projectID: "project-2", for: "~bob", defaults: defaults)
14
15 #expect(ProjectPinStore.loadPinnedProjectIDs(for: "~alice", defaults: defaults) == ["project-1"])
16 #expect(ProjectPinStore.loadPinnedProjectIDs(for: "~bob", defaults: defaults) == ["project-2"])
17 }
18
19 @Test
20 func toggleRemovesExistingPin() {
21 let defaults = UserDefaults(suiteName: #function)!
22 defaults.removePersistentDomain(forName: #function)
23
24 ProjectPinStore.togglePin(projectID: "project-1", for: "~alice", defaults: defaults)
25 ProjectPinStore.togglePin(projectID: "project-1", for: "~alice", defaults: defaults)
26
27 #expect(ProjectPinStore.loadPinnedProjectIDs(for: "~alice", defaults: defaults).isEmpty)
28 }
29
30 @Test
31 func loadPinnedProjectsNormalizesWhitespaceAndDuplicates() throws {
32 let defaults = UserDefaults(suiteName: #function)!
33 defaults.removePersistentDomain(forName: #function)
34
35 let encoded = try JSONEncoder().encode([
36 "~alice": [" project-1 ", "", "project-1", "project-2"]
37 ])
38 defaults.set(encoded, forKey: AppStorageKeys.pinnedHomeProjects)
39
40 #expect(ProjectPinStore.loadPinnedProjectIDs(for: "~alice", defaults: defaults) == ["project-1", "project-2"])
41 }
42}