crossmate

A collaborative crossword app for iOS
Log | Files | Refs | LICENSE

LogScrubberTests.swift (3477B)


      1 import Foundation
      2 import Testing
      3 
      4 @testable import Crossmate
      5 
      6 @Suite("Log scrubber")
      7 @MainActor
      8 struct LogScrubberTests {
      9     @Test("UUIDs truncate to an eight-character prefix")
     10     func uuids() {
     11         let scrubbed = LogScrubber.scrub(
     12             "engagement: reconnect backstop cancelled for 0A5207B4-CB66-45A5-A054-27861594B612"
     13         )
     14         #expect(scrubbed == "engagement: reconnect backstop cancelled for 0A5207B4…")
     15     }
     16 
     17     @Test("Ping record names keep their structure but lose full IDs")
     18     func pingRecordNames() {
     19         let scrubbed = LogScrubber.scrub(
     20             "ping(invite): already-handled record "
     21                 + "ping-C05349C4-FEAE-49F7-86F7-03F34656B302"
     22                 + "-_f838827eeca157aeafb6901073c18676"
     23                 + "-02b1f8d0a782450ea5e4f4ca20ae7a48-1781217475858"
     24         )
     25         #expect(
     26             scrubbed
     27                 == "ping(invite): already-handled record ping-C05349C4…-_f838827e…-02b1f8d0…-1781217475858"
     28         )
     29     }
     30 
     31     @Test("User record names keep underscore plus eight hex; sentinels pass through")
     32     func userRecordNames() {
     33         let scrubbed = LogScrubber.scrub(
     34             #"share=["_1960c4811a7e1a7210c2031998319301", "__defaultOwner__"]"#
     35         )
     36         #expect(scrubbed == #"share=["_1960c481…", "__defaultOwner__"]"#)
     37     }
     38 
     39     @Test("Share URL tokens truncate while the link stays recognisable")
     40     func shareURLs() {
     41         let scrubbed = LogScrubber.scrub(
     42             "share link created for 0A5207B4-CB66-45A5-A054-27861594B612: "
     43                 + "https://www.icloud.com/share/0aBcDeFgHiJkLmNoPqRs#Monday_Puzzle"
     44         )
     45         #expect(
     46             scrubbed
     47                 == "share link created for 0A5207B4…: https://www.icloud.com/share/0aBcDeFg…#Monday_Puzzle"
     48         )
     49     }
     50 
     51     @Test("Full-length hex tokens collapse to a single stub")
     52     func longHexTokens() {
     53         let token = String(repeating: "c769792fd840", count: 6)  // 72 hex chars
     54         let scrubbed = LogScrubber.scrub("token=\(token)")
     55         #expect(scrubbed == "token=c769792f…")
     56     }
     57 
     58     @Test("Prose, subscription IDs, and decimal timestamps pass through")
     59     func passthrough() {
     60         let messages = [
     61             "private subscription already present (crossmate-private-db-subscription)",
     62             "shared zone discovery: nothing new (server=23, known=23)",
     63             "freshen game list foreground: private skipped (cooldown, last 7s ago)",
     64         ]
     65         for message in messages {
     66             #expect(LogScrubber.scrub(message) == message)
     67         }
     68     }
     69 
     70     @Test("EventLog scrubs at append time")
     71     func eventLogAppliesScrubbing() {
     72         let log = EventLog()
     73         log.note("engagement: ending for 0A5207B4-CB66-45A5-A054-27861594B612")
     74         #expect(log.entries.last?.message == "engagement: ending for 0A5207B4…")
     75     }
     76 
     77     @Test("SyncMonitor scrubs the stored error description")
     78     func syncMonitorScrubsErrorDescription() {
     79         let monitor = SyncMonitor(log: EventLog())
     80         monitor.recordError(
     81             "shared game/moves catch-up",
     82             NSError(
     83                 domain: "CKErrorDomain",
     84                 code: 26,
     85                 userInfo: [
     86                     NSLocalizedDescriptionKey:
     87                         "Zone game-0A5207B4-CB66-45A5-A054-27861594B612 does not exist"
     88                 ]
     89             )
     90         )
     91         #expect(monitor.lastErrorDescription == "Zone game-0A5207B4… does not exist")
     92     }
     93 }