krz/rune
an ios client for njalla
clone: git clone https://gitbay.org/krz/rune.git
main: 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}