70 lines
2.3 KiB
Swift
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)
|
|
}
|
|
}
|