krz/rune

an ios client for njalla

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

v1.2.0: RuneTests/RuneTests.swift · raw

 1//
 2//  RuneTests.swift
 3//  RuneTests
 4//
 5//  Created by cmc on 2026-03-23.
 6//
 7
 8import Testing
 9@testable import Rune
10
11@MainActor
12struct RuneTests {
13
14    @Test func domainUpdateRequestIncludesOnlyChangedFields() async throws {
15        let request = DomainUpdateRequest(
16            autorenew: true,
17            mailforwarding: nil,
18            dnssec: nil,
19            lock: false,
20            nameservers: nil
21        )
22
23        #expect(request.hasChanges)
24        #expect(request.params["autorenew"] as? Bool == true)
25        #expect(request.params["lock"] as? Bool == false)
26        #expect(request.params["dnssec"] == nil)
27        #expect(request.params["mailforwarding"] == nil)
28        #expect(request.params["nameservers"] == nil)
29    }
30
31    @Test func changingLockDoesNotAlterDNSSEC() async throws {
32        let request = DomainUpdateRequest(
33            autorenew: nil,
34            mailforwarding: nil,
35            dnssec: nil,
36            lock: true,
37            nameservers: nil
38        )
39
40        #expect(request.hasChanges)
41        #expect(request.params.count == 1)
42        #expect(request.params["lock"] as? Bool == true)
43        #expect(request.params["dnssec"] == nil)
44    }
45
46    @Test func dnssecOnlyChangeSendsOnlyDNSSEC() async throws {
47        let request = DomainUpdateRequest(
48            autorenew: nil,
49            mailforwarding: nil,
50            dnssec: false,
51            lock: nil,
52            nameservers: nil
53        )
54
55        #expect(request.hasChanges)
56        #expect(request.params.count == 1)
57        #expect(request.params["dnssec"] as? Bool == false)
58        #expect(request.params["lock"] == nil)
59        #expect(request.params["autorenew"] == nil)
60        #expect(request.params["mailforwarding"] == nil)
61    }
62
63    @Test func ttlPresetUsesPresetSeconds() async throws {
64        var draft = DNSRecordDraft()
65        draft.type = .a
66        draft.name = "www"
67        draft.ttlSeconds = TTLPreset.fifteenMinutes.rawValue
68
69        let params = draft.params(domain: "example.com")
70
71        #expect(params["ttl"] as? Int == 900)
72    }
73
74    @Test func ttlOptionsIncludeExistingCustomValue() async throws {
75        let record = DNSRecord(
76            id: "1",
77            domain: "example.com",
78            type: "A",
79            name: "www",
80            content: "1.2.3.4",
81            ttl: 42,
82            prio: nil,
83            weight: nil,
84            port: nil,
85            target: nil,
86            sshAlgorithm: nil,
87            sshType: nil
88        )
89
90        let draft = DNSRecordDraft(record: record)
91
92        #expect(draft.ttlSeconds == 42)
93        #expect(draft.ttlOptions.contains(where: { $0.seconds == 42 && $0.isCustom }))
94    }
95}