mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
5.4 KiB
Swift
134 lines
5.4 KiB
Swift
// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
import Combine
|
|
import GRDB
|
|
import Quick
|
|
import Nimble
|
|
import SessionSnodeKit
|
|
import SessionUtilitiesKit
|
|
import SessionMessagingKit
|
|
import SessionUIKit
|
|
|
|
@testable import Session
|
|
|
|
class MessageReceiverDisappearingMessagesSpec: QuickSpec {
|
|
// MARK: - Spec
|
|
|
|
override func spec() {
|
|
var mockStorage: Storage!
|
|
var mockProto: SNProtoContent!
|
|
var mockMessage: VisibleMessage!
|
|
|
|
describe("a MessageReceiver") {
|
|
|
|
// MARK: - Configuration
|
|
|
|
beforeEach {
|
|
mockStorage = SynchronousStorage(
|
|
customWriter: try! DatabaseQueue(),
|
|
customMigrationTargets: [
|
|
SNUtilitiesKit.self,
|
|
SNSnodeKit.self,
|
|
SNMessagingKit.self,
|
|
SNUIKit.self
|
|
]
|
|
)
|
|
|
|
let proto = SNProtoContent.builder()
|
|
let dataMessage = SNProtoDataMessage.builder()
|
|
proto.setExpirationType(.deleteAfterRead)
|
|
proto.setExpirationTimer(UInt32(DisappearingMessagesConfiguration.DefaultDuration.disappearAfterRead.seconds))
|
|
proto.setLastDisappearingMessageChangeTimestamp((1234567890 - (60 * 10)) * 1000)
|
|
dataMessage.setBody("Test")
|
|
proto.setDataMessage(try! dataMessage.build())
|
|
mockProto = try? proto.build()
|
|
|
|
mockMessage = VisibleMessage(
|
|
sender: "TestId",
|
|
sentTimestamp: ((1234567890 - (60 * 10)) * 1000),
|
|
recipient: "05\(TestConstants.publicKey)",
|
|
text: "Test"
|
|
)
|
|
mockMessage.receivedTimestamp = (1234567890 * 1000)
|
|
|
|
mockStorage.write { db in
|
|
try SessionThread.fetchOrCreate(
|
|
db,
|
|
id: "TestId",
|
|
variant: .contact,
|
|
shouldBeVisible: true
|
|
)
|
|
}
|
|
}
|
|
|
|
afterEach {
|
|
mockStorage = nil
|
|
mockProto = nil
|
|
}
|
|
|
|
// MARK: - when receiving an outdated disappearing message config update
|
|
context("when receiving an outdated disappearing message config update") {
|
|
// MARK: -- does NOT update local config
|
|
it("does NOT update local config") {
|
|
let config: DisappearingMessagesConfiguration = DisappearingMessagesConfiguration
|
|
.defaultWith("TestId")
|
|
.with(
|
|
isEnabled: false,
|
|
durationSeconds: 0,
|
|
type: .unknown,
|
|
lastChangeTimestampMs: (1234567890 * 1000)
|
|
)
|
|
|
|
mockStorage.write { db in
|
|
try config.save(db)
|
|
|
|
try MessageReceiver.handle(
|
|
db,
|
|
threadId: "TestId",
|
|
threadVariant: .contact,
|
|
message: mockMessage,
|
|
serverExpirationTimestamp: nil,
|
|
associatedWithProto: mockProto
|
|
)
|
|
}
|
|
|
|
let updatedConfig: DisappearingMessagesConfiguration? = mockStorage.read { db in
|
|
try DisappearingMessagesConfiguration.fetchOne(db, id: "TestId")
|
|
}
|
|
|
|
expect(updatedConfig?.isEnabled).to(beFalse())
|
|
expect(updatedConfig?.durationSeconds).to(equal(0))
|
|
expect(updatedConfig?.type).to(equal(.unknown))
|
|
}
|
|
}
|
|
|
|
// MARK: - when receiving a newer disappearing message config update
|
|
context("when receiving a newer disappearing message config update") {
|
|
// MARK: -- updates the local config properly
|
|
it("updates the local config properly") {
|
|
mockStorage.write { db in
|
|
try MessageReceiver.updateDisappearingMessagesConfigurationIfNeeded(
|
|
db,
|
|
threadId: "TestId",
|
|
threadVariant: .contact,
|
|
message: mockMessage,
|
|
proto: mockProto
|
|
)
|
|
}
|
|
|
|
let updatedConfig: DisappearingMessagesConfiguration? = mockStorage.read { db in
|
|
try DisappearingMessagesConfiguration.fetchOne(db, id: "TestId")
|
|
}
|
|
|
|
expect(updatedConfig?.isEnabled).to(beFalse())
|
|
|
|
// expect(updatedConfig?.isEnabled).to(beTrue())
|
|
// expect(updatedConfig?.durationSeconds)
|
|
// .to(equal(DisappearingMessagesConfiguration.DefaultDuration.disappearAfterRead.seconds))
|
|
// expect(updatedConfig?.type).to(equal(.disappearAfterRead))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|