krz/hutch

an ios client for sourcehut

clone: git clone https://gitbay.org/krz/hutch.git

v3.1.7: 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}