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