krz/octosentry

macOS menu bar app to monitor GitHub security alerts

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

1.1: octosentryTests/SeverityMappingTests.swift · raw

 1//
 2//  SeverityMappingTests.swift
 3//  octosentryTests
 4//
 5
 6import Testing
 7@testable import octosentry
 8
 9struct SeverityMappingTests {
10
11    @Test func dependabotMapsGitHubVocabulary() {
12        #expect(SeverityMapping.dependabot("critical") == .critical)
13        #expect(SeverityMapping.dependabot("high") == .high)
14        #expect(SeverityMapping.dependabot("moderate") == .medium)
15        #expect(SeverityMapping.dependabot("medium") == .medium)
16        #expect(SeverityMapping.dependabot("low") == .low)
17    }
18
19    @Test func dependabotIsCaseInsensitive() {
20        #expect(SeverityMapping.dependabot("CRITICAL") == .critical)
21        #expect(SeverityMapping.dependabot("Moderate") == .medium)
22    }
23
24    @Test func dependabotFallsBackToMediumOnUnknownSeverity() {
25        #expect(SeverityMapping.dependabot("") == .medium)
26        #expect(SeverityMapping.dependabot("catastrophic") == .medium)
27    }
28
29    @Test func codeScanningPrefersSecuritySeverityLevel() {
30        // security_severity_level wins even when rule.severity disagrees.
31        #expect(SeverityMapping.codeScanning(securitySeverityLevel: "critical", ruleSeverity: "note") == .critical)
32        #expect(SeverityMapping.codeScanning(securitySeverityLevel: "high", ruleSeverity: "note") == .high)
33        #expect(SeverityMapping.codeScanning(securitySeverityLevel: "medium", ruleSeverity: "error") == .medium)
34        #expect(SeverityMapping.codeScanning(securitySeverityLevel: "low", ruleSeverity: "error") == .low)
35    }
36
37    @Test func codeScanningFallsBackToRuleSeverity() {
38        #expect(SeverityMapping.codeScanning(securitySeverityLevel: nil, ruleSeverity: "error") == .high)
39        #expect(SeverityMapping.codeScanning(securitySeverityLevel: nil, ruleSeverity: "warning") == .medium)
40        #expect(SeverityMapping.codeScanning(securitySeverityLevel: nil, ruleSeverity: "note") == .low)
41    }
42
43    @Test func codeScanningFallsBackToRuleSeverityWhenLevelIsUnrecognized() {
44        #expect(SeverityMapping.codeScanning(securitySeverityLevel: "unknown", ruleSeverity: "error") == .high)
45    }
46
47    @Test func codeScanningDefaultsToMediumWithNothingUsable() {
48        #expect(SeverityMapping.codeScanning(securitySeverityLevel: nil, ruleSeverity: nil) == .medium)
49        #expect(SeverityMapping.codeScanning(securitySeverityLevel: "unknown", ruleSeverity: "unknown") == .medium)
50    }
51
52    @Test func secretScanningTreatsActiveSecretsAsCritical() {
53        #expect(SeverityMapping.secretScanning(validity: "active") == .critical)
54        #expect(SeverityMapping.secretScanning(validity: "ACTIVE") == .critical)
55    }
56
57    @Test func secretScanningTreatsEverythingElseAsHigh() {
58        #expect(SeverityMapping.secretScanning(validity: nil) == .high)
59        #expect(SeverityMapping.secretScanning(validity: "inactive") == .high)
60        #expect(SeverityMapping.secretScanning(validity: "unknown") == .high)
61    }
62}