Files
ghostgram/submodules/TelegramCore/Tests/WebpageUpdateEventsTests.swift
ichmagmaus111andClaude Opus 5.5 0622057a4f Ghostgram: open-source release
Ghostgram for iOS, rebuilt from scratch on Telegram iOS 13.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 17:57:09 +01:00

72 lines
3.3 KiB
Swift

import XCTest
import Postbox
@testable import TelegramCore
/// The web-page events a replayed state produces, which `AccountStateManager.updatedWebpage`
/// delivers. A composer showing a pending link preview waits on exactly one of them, so a
/// resolution that never reaches the events leaves the preview on "Loading…".
final class WebpageUpdateEventsTests: XCTestCase {
private let webpageId = MediaId(namespace: Namespaces.Media.CloudWebpage, id: 1)
private let otherWebpageId = MediaId(namespace: Namespaces.Media.CloudWebpage, id: 2)
/// A key holding nil: the page was resolved to `webPageEmpty`.
private let removal: TelegramMediaWebpage?? = .some(nil)
private func pendingWebpage(_ id: MediaId) -> TelegramMediaWebpage {
return TelegramMediaWebpage(webpageId: id, content: .Pending(0, "https://okinawaguide.org/"))
}
private func update(_ webpage: TelegramMediaWebpage) -> TelegramMediaWebpage?? {
return .some(.some(webpage))
}
func testAWebpageUpdateIsRecordedWithItsContent() {
var updatedWebpages: [MediaId: TelegramMediaWebpage?] = [:]
recordUpdatedWebpage(self.webpageId, media: self.pendingWebpage(self.webpageId), into: &updatedWebpages)
XCTAssertEqual(updatedWebpages[self.webpageId], self.update(self.pendingWebpage(self.webpageId)))
}
/// `updateWebPage(webPageEmpty)` replays as a nil media update: no preview exists.
func testAWebpageResolvedToEmptyIsRecordedAsARemoval() {
var updatedWebpages: [MediaId: TelegramMediaWebpage?] = [:]
recordUpdatedWebpage(self.webpageId, media: nil, into: &updatedWebpages)
XCTAssertTrue(updatedWebpages.keys.contains(self.webpageId))
XCTAssertEqual(updatedWebpages[self.webpageId], self.removal)
}
func testANilUpdateOfOtherMediaIsNotRecordedAsAWebpage() {
var updatedWebpages: [MediaId: TelegramMediaWebpage?] = [:]
recordUpdatedWebpage(MediaId(namespace: Namespaces.Media.CloudFile, id: 1), media: nil, into: &updatedWebpages)
XCTAssertTrue(updatedWebpages.isEmpty)
}
/// `pollDifference` starts from empty events and unions each difference slice in, so the
/// right-hand side is where every webpage update from getDifference arrives.
func testMergingEventsKeepsTheWebpageUpdatesOfBothSides() {
let earlier = AccountFinalStateEvents(updatedWebpages: [self.webpageId: self.pendingWebpage(self.webpageId)])
// A nil value in a literal keeps its key; only assigning nil through the subscript drops it.
let later = AccountFinalStateEvents(updatedWebpages: [self.otherWebpageId: nil])
let merged = AccountFinalStateEvents().union(with: earlier).union(with: later)
XCTAssertEqual(merged.updatedWebpages.count, 2)
XCTAssertEqual(merged.updatedWebpages[self.webpageId], self.update(self.pendingWebpage(self.webpageId)))
XCTAssertEqual(merged.updatedWebpages[self.otherWebpageId], self.removal)
}
func testMergingEventsKeepsTheLaterStateOfTheSameWebpage() {
let earlier = AccountFinalStateEvents(updatedWebpages: [self.webpageId: self.pendingWebpage(self.webpageId)])
let later = AccountFinalStateEvents(updatedWebpages: [self.webpageId: nil])
let merged = earlier.union(with: later)
XCTAssertEqual(merged.updatedWebpages[self.webpageId], self.removal)
}
}