83 lines
2.1 KiB
Swift
83 lines
2.1 KiB
Swift
//
|
|
// KontakteTests.swift
|
|
// KontakteTests
|
|
//
|
|
// Created by Felix Förtsch on 09.02.26.
|
|
//
|
|
|
|
import Foundation
|
|
import Testing
|
|
@testable import Kontakte
|
|
|
|
struct KontakteTests {
|
|
@Test func parseEmptyNoteReturnsDefaultMetadata() {
|
|
let metadata = ContactMetadataDSL.parse(note: "")
|
|
#expect(metadata.isFavorite == false)
|
|
#expect(metadata.isMyCard == false)
|
|
}
|
|
|
|
@Test func parseMetadataBlockDetectsFlags() {
|
|
let note = """
|
|
private note
|
|
|
|
[[kontakte]]
|
|
favorite=1
|
|
my_card=1
|
|
[[/kontakte]]
|
|
"""
|
|
|
|
let metadata = ContactMetadataDSL.parse(note: note)
|
|
#expect(metadata.isFavorite == true)
|
|
#expect(metadata.isMyCard == true)
|
|
}
|
|
|
|
@Test func updatingAddsMetadataBlockAndKeepsExistingNote() {
|
|
let updated = ContactMetadataDSL.updating(
|
|
note: "Hello",
|
|
metadata: ContactMetadata(isFavorite: true, isMyCard: false)
|
|
)
|
|
|
|
#expect(updated.contains("Hello"))
|
|
#expect(updated.contains("[[kontakte]]"))
|
|
#expect(updated.contains("favorite=1"))
|
|
#expect(updated.contains("[[/kontakte]]"))
|
|
}
|
|
|
|
@Test func updatingReplacesExistingMetadataBlock() {
|
|
let original = """
|
|
Hello
|
|
|
|
[[kontakte]]
|
|
favorite=1
|
|
[[/kontakte]]
|
|
"""
|
|
|
|
let updated = ContactMetadataDSL.updating(
|
|
note: original,
|
|
metadata: ContactMetadata(isFavorite: false, isMyCard: true)
|
|
)
|
|
|
|
#expect(updated.contains("my_card=1"))
|
|
#expect(updated.contains("favorite=1") == false)
|
|
#expect(updated.components(separatedBy: "[[kontakte]]").count == 2)
|
|
}
|
|
|
|
@Test func updatingRemovesMetadataBlockWhenNoFlagsAreSet() {
|
|
let original = """
|
|
Hello
|
|
|
|
[[kontakte]]
|
|
favorite=1
|
|
[[/kontakte]]
|
|
"""
|
|
|
|
let updated = ContactMetadataDSL.updating(
|
|
note: original,
|
|
metadata: ContactMetadata(isFavorite: false, isMyCard: false)
|
|
)
|
|
|
|
#expect(updated == "Hello")
|
|
#expect(updated.contains("[[kontakte]]") == false)
|
|
}
|
|
}
|