api-swift / Tests / IrdAPITests / Gate / GateRulesTests.swift
129 words
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import Foundation
import Testing
@testable import IrdAPI

@Suite struct GateRulesTests {
    @Test func normalizeLowercasesTrimsAndStripsTrailingDots() {
        #expect(normalizeDomain("  Example.RO.. ") == "example.ro")
        #expect(normalizeDomain("") == nil)
        #expect(normalizeDomain("   ") == nil)
        #expect(normalizeDomain(nil) == nil)
        #expect(normalizeDomain(".") == nil)
    }

    @Test func wildcardMatchesTheBareSuffixAndEverythingUnderIt() {
        #expect(patternMatches("*.example.ro", "example.ro"))
        #expect(patternMatches("*.example.ro", "a.b.example.ro"))
        #expect(!patternMatches("*.example.ro", "notexample.ro"))
        #expect(patternMatches("Example.RO.", "example.ro"))
        #expect(!patternMatches("example.ro", "a.example.ro"))
        #expect(!patternMatches("  ", "example.ro"))
    }

    @Test func denyWinsOverAllow() {
        let rules = GateRules(deniedDomains: ["*.ro"], allowedDomains: ["x.ro"])
        #expect(rules.decide("x.ro") == GateDenial(domain: "x.ro", pattern: "*.ro"))
    }

    @Test func allowListMissDeniesWithoutAPattern() {
        let rules = GateRules(allowedDomains: ["x.ro"])
        #expect(rules.decide("y.ro") == GateDenial(domain: "y.ro", pattern: nil))
        #expect(rules.decide("X.RO.") == nil)
    }

    @Test func emptyAllowListDeniesEverythingWhileNilAllowsAll() {
        #expect(GateRules(allowedDomains: []).decide("x.ro") == GateDenial(domain: "x.ro", pattern: nil))
        #expect(GateRules().decide("x.ro") == nil)
    }

    @Test func unknownDomainPassesUnderDenyListAndFailsClosedUnderAllowList() {
        #expect(GateRules(deniedDomains: ["x.ro"]).decide(nil) == nil)
        #expect(GateRules(allowedDomains: ["x.ro"]).decide(nil) == GateDenial(domain: nil, pattern: nil))
        #expect(GateRules(allowedDomains: ["x.ro"]).decide("  ") == GateDenial(domain: nil, pattern: nil))
    }
}

static mirror of HEAD · about · clone: git clone https://ird.cod-sursa.ro/api-swift.git