Files
Luma/Tests/MessageCorrectionTests.swift
2026-07-30 20:07:51 +07:00

70 lines
2.3 KiB
Swift

import Foundation
import XCTest
@testable import Luma
final class MessageCorrectionTests: XCTestCase {
func testOnlyDeliveredOrSentOutgoingTextCanBeEdited() {
let editable = ChatMessage(
conversationID: "bob@example.org",
senderJID: "alice@example.org",
body: "До исправления",
direction: .outgoing,
delivery: .sent,
security: .omemo
)
var incoming = editable
incoming.direction = .incoming
var attachment = editable
attachment.kind = .attachment
var failed = editable
failed.delivery = .failed
var retracted = editable
retracted.retractedAt = Date()
XCTAssertTrue(editable.canBeEdited)
XCTAssertFalse(incoming.canBeEdited)
XCTAssertFalse(attachment.canBeEdited)
XCTAssertFalse(failed.canBeEdited)
XCTAssertFalse(retracted.canBeEdited)
}
func testEditedTimestampRoundTrips() throws {
let editedAt = Date(timeIntervalSince1970: 1_700_000_000)
let message = ChatMessage(
conversationID: "bob@example.org",
senderJID: "alice@example.org",
body: "После исправления",
direction: .outgoing,
delivery: .delivered,
security: .plaintext,
editedAt: editedAt
)
let data = try JSONEncoder().encode(message)
let decoded = try JSONDecoder().decode(ChatMessage.self, from: data)
XCTAssertEqual(decoded.editedAt, editedAt)
}
func testLegacyMessageWithoutEditedTimestampStillDecodes() throws {
let message = ChatMessage(
conversationID: "bob@example.org",
senderJID: "alice@example.org",
body: "Старое сообщение",
direction: .incoming,
delivery: .delivered,
security: .omemo
)
let encoded = try JSONEncoder().encode(message)
var object = try XCTUnwrap(JSONSerialization.jsonObject(with: encoded) as? [String: Any])
object.removeValue(forKey: "editedAt")
let decoded = try JSONDecoder().decode(
ChatMessage.self,
from: JSONSerialization.data(withJSONObject: object)
)
XCTAssertNil(decoded.editedAt)
}
}