summaryrefslogtreecommitdiff
path: root/HutchTests
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-01 22:03:14 -0500
committerChristian Cleberg <[email protected]>2026-04-01 22:03:14 -0500
commit902055d5eaa7f5512b76e22f57df3939f956181f (patch)
tree08b7bb220b980adc9eaa9c195dc26e846707b311 /HutchTests
parent209155dc431cf70d9c8dba20625bab7e3b1a5085 (diff)
downloadhutch-2.7.0.tar.gz
hutch-2.7.0.tar.bz2
hutch-2.7.0.zip
Add tracker management (delete/update, ACLs, labels)v2.7.0
- Add swipe actions (delete/edit) to tracker list - Add tracker settings menu on detail screen - Implement updateTracker and deleteTracker mutations - Implement ACL management (updateUserACL, updateTrackerACL, deleteACL) - Implement label management (createLabel, updateLabel, deleteLabel) - Add dedicated UI flows for ACLs and labels - Ensure state refresh after mutations - Handle loading, errors, and destructive confirmations Implements: https://todo.sr.ht/~ccleberg/Hutch/12
Diffstat (limited to 'HutchTests')
-rw-r--r--HutchTests/TrackerManagementViewModelTests.swift36
1 files changed, 36 insertions, 0 deletions
diff --git a/HutchTests/TrackerManagementViewModelTests.swift b/HutchTests/TrackerManagementViewModelTests.swift
new file mode 100644
index 0000000..78edfc9
--- /dev/null
+++ b/HutchTests/TrackerManagementViewModelTests.swift
@@ -0,0 +1,36 @@
+import Testing
+@testable import Hutch
+
+struct TrackerManagementViewModelTests {
+
+ @Test
+ func normalizedUsernameStripsLeadingTildeAndWhitespace() {
+ #expect(TrackerManagementViewModel.normalizedUsername(" ~alice ") == "alice")
+ #expect(TrackerManagementViewModel.normalizedUsername("bob") == "bob")
+ }
+
+ @Test
+ func hexColorValidationRequiresPoundAndSixHexDigits() {
+ #expect(TrackerManagementViewModel.isValidHexColor("#a1B2c3"))
+ #expect(!TrackerManagementViewModel.isValidHexColor("a1B2c3"))
+ #expect(!TrackerManagementViewModel.isValidHexColor("#12345"))
+ #expect(!TrackerManagementViewModel.isValidHexColor("#12GG45"))
+ }
+
+ @Test
+ func trackerACLPermissionsExposeBooleanFlags() {
+ let permissions = TrackerACLPermissions(
+ browse: true,
+ submit: false,
+ comment: true,
+ edit: false,
+ triage: true
+ )
+
+ #expect(permissions.browse)
+ #expect(!permissions.submit)
+ #expect(permissions.comment)
+ #expect(!permissions.edit)
+ #expect(permissions.triage)
+ }
+}