Sorry Change name to Fchaty

This commit is contained in:
diyaa
2026-07-27 12:09:51 +02:00
parent 2e1d40caad
commit b32911dfb2
32 changed files with 172 additions and 142 deletions
@@ -0,0 +1,11 @@
import XCTest
@testable import FchatyApp
final class AppTabTests: XCTestCase {
func testTabsMatchTheAppShell() {
XCTAssertEqual(AppTab.allCases, [.chat, .pairing, .settings])
XCTAssertEqual(AppTab.chat.icon, "message")
XCTAssertEqual(AppTab.pairing.icon, "link")
XCTAssertEqual(AppTab.settings.icon, "gearshape")
}
}
@@ -0,0 +1,19 @@
import XCTest
@testable import FchatyApp
final class ChatMessageBubbleTests: XCTestCase {
func testMessageKeepsMarkdownBodyForRendering() {
let message = ChatMessage(
id: "message-id",
from: "peer-id",
fromName: "Alex",
body: "Hello, **world**",
sentAt: Date(),
attachment: nil,
isRead: false
)
XCTAssertEqual(message.body, "Hello, **world**")
XCTAssertNotNil(try? AttributedString(markdown: message.body))
}
}
@@ -0,0 +1,27 @@
import XCTest
@testable import FchatyApp
final class MessageStoreModelTests: XCTestCase {
func testMessageRoundTripPreservesAttachmentAndReadStatus() throws {
let message = ChatMessage(
id: "message-id",
from: "peer-id",
fromName: "Alex",
body: "Shared a file: photo.jpg",
sentAt: Date(timeIntervalSince1970: 1_721_995_200),
attachment: AttachmentInfo(fileID: "file-id", name: "photo.jpg", size: 128),
isRead: false
)
let encoder = JSONEncoder()
encoder.dateEncodingStrategy = .iso8601
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let encodedMessage = try encoder.encode(message)
let decodedMessage = try decoder.decode(ChatMessage.self, from: encodedMessage)
XCTAssertEqual(decodedMessage.id, message.id)
XCTAssertEqual(decodedMessage.attachment, message.attachment)
XCTAssertEqual(decodedMessage.isRead, message.isRead)
}
}
@@ -0,0 +1,10 @@
import XCTest
@testable import FchatyApp
final class PairingViewModelTests: XCTestCase {
func testPairingCodeIsUppercasedAndPrefixed() {
XCTAssertEqual(PairingViewModel.normalizedCode(from: "ab3k7q"), "FCHT-AB3K7Q")
XCTAssertEqual(PairingViewModel.normalizedCode(from: "fcht-ab3k7q"), "FCHT-AB3K7Q")
XCTAssertEqual(PairingViewModel.normalizedCode(from: " FCHT-ab3k7q "), "FCHT-AB3K7Q")
}
}
@@ -0,0 +1,36 @@
import XCTest
@testable import FchatyApp
final class RelayAPIResponseTests: XCTestCase {
func testPairingCreateResponseDecodesServerPayload() throws {
let data = Data(
"""
{"code":"FCHT-AB3K7Q","token":"creator-token","peerID":"creator-id","expiresAt":"2026-07-26T12:00:00Z"}
""".utf8
)
let response = try JSONDecoder().decode(PairingCreateResponse.self, from: data)
XCTAssertEqual(response.code, "FCHT-AB3K7Q")
XCTAssertEqual(response.peerID, "creator-id")
}
func testPairingJoinAndFileUploadResponsesDecodeServerPayloads() throws {
let pairingData = Data(
"""
{"token":"joiner-token","peerID":"joiner-id","peer":{"id":"creator-id","displayName":"Alex"}}
""".utf8
)
let fileData = Data(
"""
{"id":"file-id","name":"photo.jpg","size":128}
""".utf8
)
let pairingResponse = try JSONDecoder().decode(PairingJoinResponse.self, from: pairingData)
let fileResponse = try JSONDecoder().decode(FileUploadResponse.self, from: fileData)
XCTAssertEqual(pairingResponse.peer, PeerInfo(id: "creator-id", displayName: "Alex"))
XCTAssertEqual(fileResponse, FileUploadResponse(id: "file-id", name: "photo.jpg", size: 128))
}
}
@@ -0,0 +1,22 @@
import XCTest
@testable import FchatyApp
final class WSMessageTests: XCTestCase {
func testMessageRoundTripPreservesServerFields() throws {
let message = WSMessage(
type: "chat.message",
id: "message-id",
body: "Hello",
from: "peer-id",
fromName: "Alex",
sentAt: "2026-07-26T18:12:00.123Z"
)
let decodedMessage = try JSONDecoder().decode(
WSMessage.self,
from: JSONEncoder().encode(message)
)
XCTAssertEqual(decodedMessage, message)
}
}