@@ -82,4 +82,145 @@ final class LogTableHelperTests: XCTestCase {
82 XCTAssertEqual(levelColor(for: "unknown"), .primary)
82 XCTAssertEqual(levelColor(for: "unknown"), .primary)
83 XCTAssertEqual(levelColor(for: ""), .primary)
83 XCTAssertEqual(levelColor(for: ""), .primary)
86+ // MARK: - parseSeverity
88+ func testParseSeverityFatal() {
89+ XCTAssertEqual(parseSeverity(from: "fatal"), .fatal)
90+ XCTAssertEqual(parseSeverity(from: "CRITICAL"), .fatal)
91+ XCTAssertEqual(parseSeverity(from: "panic"), .fatal)
92+ XCTAssertEqual(parseSeverity(from: "emerg"), .fatal)
93+ XCTAssertEqual(parseSeverity(from: "EMERGENCY"), .fatal)
94+ XCTAssertEqual(parseSeverity(from: "alert"), .fatal)
95+ XCTAssertEqual(parseSeverity(from: "crit"), .fatal)
98+ func testParseSeverityError() {
99+ XCTAssertEqual(parseSeverity(from: "error"), .error)
100+ XCTAssertEqual(parseSeverity(from: "ERROR"), .error)
101+ XCTAssertEqual(parseSeverity(from: "err"), .error)
102+ XCTAssertEqual(parseSeverity(from: "failure"), .error)
103+ XCTAssertEqual(parseSeverity(from: "FAIL"), .error)
104+ XCTAssertEqual(parseSeverity(from: "severe"), .error)
107+ func testParseSeverityWarning() {
108+ XCTAssertEqual(parseSeverity(from: "warn"), .warning)
109+ XCTAssertEqual(parseSeverity(from: "WARNING"), .warning)
110+ XCTAssertEqual(parseSeverity(from: "caution"), .warning)
113+ func testParseSeverityInfo() {
114+ XCTAssertEqual(parseSeverity(from: "info"), .info)
115+ XCTAssertEqual(parseSeverity(from: "INFO"), .info)
116+ XCTAssertEqual(parseSeverity(from: "information"), .info)
117+ XCTAssertEqual(parseSeverity(from: "informational"), .info)
118+ XCTAssertEqual(parseSeverity(from: "notice"), .info)
121+ func testParseSeverityDebug() {
122+ XCTAssertEqual(parseSeverity(from: "debug"), .debug)
123+ XCTAssertEqual(parseSeverity(from: "DEBUG"), .debug)
124+ XCTAssertEqual(parseSeverity(from: "dbg"), .debug)
125+ XCTAssertEqual(parseSeverity(from: "verbose"), .debug)
128+ func testParseSeverityTrace() {
129+ XCTAssertEqual(parseSeverity(from: "trace"), .trace)
130+ XCTAssertEqual(parseSeverity(from: "TRACE"), .trace)
131+ XCTAssertEqual(parseSeverity(from: "finest"), .trace)
132+ XCTAssertEqual(parseSeverity(from: "finer"), .trace)
133+ XCTAssertEqual(parseSeverity(from: "fine"), .trace)
134+ XCTAssertEqual(parseSeverity(from: "all"), .trace)
137+ func testParseSeverityNumericSyslog() {
138+ // RFC 5424 severity codes
139+ XCTAssertEqual(parseSeverity(from: "0"), .fatal) // Emergency
140+ XCTAssertEqual(parseSeverity(from: "1"), .fatal) // Alert
141+ XCTAssertEqual(parseSeverity(from: "2"), .fatal) // Critical
142+ XCTAssertEqual(parseSeverity(from: "3"), .error) // Error
143+ XCTAssertEqual(parseSeverity(from: "4"), .warning) // Warning
144+ XCTAssertEqual(parseSeverity(from: "5"), .info) // Notice
145+ XCTAssertEqual(parseSeverity(from: "6"), .info) // Informational
146+ XCTAssertEqual(parseSeverity(from: "7"), .debug) // Debug
149+ func testParseSeverityUnknown() {
150+ XCTAssertEqual(parseSeverity(from: ""), .unknown)
151+ XCTAssertEqual(parseSeverity(from: "something"), .unknown)
152+ XCTAssertEqual(parseSeverity(from: "99"), .unknown)
155+ func testParseSeverityWhitespace() {
156+ XCTAssertEqual(parseSeverity(from: " error "), .error)
157+ XCTAssertEqual(parseSeverity(from: " WARN "), .warning)
160+ // MARK: - extractSeverity
162+ func testExtractSeverityFromLevelColumn() {
163+ let record: LogRecord = ["level": .string("error"), "message": .string("boom")]
164+ XCTAssertEqual(extractSeverity(from: record), .error)
167+ func testExtractSeverityFromSeverityColumn() {
168+ let record: LogRecord = ["severity": .string("warning"), "msg": .string("watch out")]
169+ XCTAssertEqual(extractSeverity(from: record), .warning)
172+ func testExtractSeverityFromSeverityTextColumn() {
173+ let record: LogRecord = ["severity_text": .string("FATAL")]
174+ XCTAssertEqual(extractSeverity(from: record), .fatal)
177+ func testExtractSeverityFromLogLevelColumn() {
178+ let record: LogRecord = ["log_level": .string("info")]
179+ XCTAssertEqual(extractSeverity(from: record), .info)
182+ func testExtractSeverityFromNumericValue() {
183+ let record: LogRecord = ["priority": .int(3)]
184+ XCTAssertEqual(extractSeverity(from: record), .error)
187+ func testExtractSeverityNoSeverityColumn() {
188+ let record: LogRecord = ["message": .string("hello"), "timestamp": .string("now")]
189+ XCTAssertEqual(extractSeverity(from: record), .unknown)
192+ func testExtractSeverityUnrecognizedValue() {
193+ let record: LogRecord = ["level": .string("custom_level")]
194+ XCTAssertEqual(extractSeverity(from: record), .unknown)
197+ // MARK: - severityRowTint
199+ func testSeverityRowTintFatalReturnsColor() {
200+ XCTAssertNotNil(severityRowTint(for: .fatal))
203+ func testSeverityRowTintErrorReturnsColor() {
204+ XCTAssertNotNil(severityRowTint(for: .error))
207+ func testSeverityRowTintWarningReturnsColor() {
208+ XCTAssertNotNil(severityRowTint(for: .warning))
211+ func testSeverityRowTintInfoReturnsNil() {
212+ XCTAssertNil(severityRowTint(for: .info))
215+ func testSeverityRowTintDebugReturnsNil() {
216+ XCTAssertNil(severityRowTint(for: .debug))
219+ func testSeverityRowTintTraceReturnsNil() {
220+ XCTAssertNil(severityRowTint(for: .trace))
223+ func testSeverityRowTintUnknownReturnsNil() {
224+ XCTAssertNil(severityRowTint(for: .unknown))