2023-09-29 15:40:31 +02:00
|
|
|
//
|
2024-09-06 16:34:30 +03:00
|
|
|
// Copyright 2023, 2024 New Vector Ltd.
|
2023-09-29 15:40:31 +02:00
|
|
|
//
|
2024-09-06 16:34:30 +03:00
|
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
// Please see LICENSE in the repository root for full details.
|
2023-09-29 15:40:31 +02:00
|
|
|
//
|
|
|
|
|
|
|
|
import Combine
|
|
|
|
import XCTest
|
|
|
|
|
|
|
|
@testable import ElementX
|
|
|
|
|
|
|
|
@MainActor
|
|
|
|
class PillContextTests: XCTestCase {
|
|
|
|
func testUser() async throws {
|
|
|
|
let id = "@test:matrix.org"
|
2024-08-20 16:13:27 +03:00
|
|
|
let proxyMock = JoinedRoomProxyMock(.init(name: "Test"))
|
2023-09-29 15:40:31 +02:00
|
|
|
let subject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
|
2024-02-28 13:21:54 +02:00
|
|
|
proxyMock.membersPublisher = subject.asCurrentValuePublisher()
|
2024-08-13 13:36:40 +02:00
|
|
|
let mock = TimelineViewModel(roomProxy: proxyMock,
|
|
|
|
timelineController: MockRoomTimelineController(),
|
|
|
|
mediaProvider: MockMediaProvider(),
|
|
|
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
|
|
|
voiceMessageMediaManager: VoiceMessageMediaManagerMock(),
|
|
|
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
|
|
|
appMediator: AppMediatorMock.default,
|
|
|
|
appSettings: ServiceLocator.shared.settings,
|
|
|
|
analyticsService: ServiceLocator.shared.analytics)
|
|
|
|
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .user(userID: id), font: .preferredFont(forTextStyle: .body)))
|
2023-09-29 15:40:31 +02:00
|
|
|
|
|
|
|
XCTAssertFalse(context.viewState.isOwnMention)
|
|
|
|
XCTAssertEqual(context.viewState.displayText, id)
|
|
|
|
|
|
|
|
let name = "Mr. Test"
|
|
|
|
let avatarURL = URL(string: "https://test.jpg")
|
|
|
|
subject.send([RoomMemberProxyMock(with: .init(userID: id, displayName: name, avatarURL: avatarURL, membership: .join))])
|
|
|
|
await Task.yield()
|
|
|
|
|
|
|
|
XCTAssertFalse(context.viewState.isOwnMention)
|
2023-10-27 09:29:20 +02:00
|
|
|
XCTAssertEqual(context.viewState.displayText, "@\(name)")
|
2023-09-29 15:40:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func testOwnUser() async throws {
|
|
|
|
let id = "@test:matrix.org"
|
2024-08-20 16:13:27 +03:00
|
|
|
let proxyMock = JoinedRoomProxyMock(.init(name: "Test", ownUserID: id))
|
2023-09-29 15:40:31 +02:00
|
|
|
let subject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
|
2024-02-28 13:21:54 +02:00
|
|
|
proxyMock.membersPublisher = subject.asCurrentValuePublisher()
|
2024-08-13 13:36:40 +02:00
|
|
|
let mock = TimelineViewModel(roomProxy: proxyMock,
|
|
|
|
timelineController: MockRoomTimelineController(),
|
|
|
|
mediaProvider: MockMediaProvider(),
|
|
|
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
|
|
|
voiceMessageMediaManager: VoiceMessageMediaManagerMock(),
|
|
|
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
|
|
|
appMediator: AppMediatorMock.default,
|
|
|
|
appSettings: ServiceLocator.shared.settings,
|
|
|
|
analyticsService: ServiceLocator.shared.analytics)
|
|
|
|
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .user(userID: id), font: .preferredFont(forTextStyle: .body)))
|
2023-09-29 15:40:31 +02:00
|
|
|
|
|
|
|
XCTAssertTrue(context.viewState.isOwnMention)
|
|
|
|
}
|
|
|
|
|
|
|
|
func testAllUsers() async throws {
|
|
|
|
let avatarURL = URL(string: "https://matrix.jpg")
|
|
|
|
let id = "test_room"
|
|
|
|
let displayName = "Test"
|
2024-08-20 16:13:27 +03:00
|
|
|
let proxyMock = JoinedRoomProxyMock(.init(id: id, name: displayName, avatarURL: avatarURL))
|
2023-09-29 15:40:31 +02:00
|
|
|
let mockController = MockRoomTimelineController()
|
|
|
|
mockController.roomProxy = proxyMock
|
2024-08-13 13:36:40 +02:00
|
|
|
let mock = TimelineViewModel(roomProxy: proxyMock,
|
|
|
|
timelineController: mockController,
|
|
|
|
mediaProvider: MockMediaProvider(),
|
|
|
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
|
|
|
voiceMessageMediaManager: VoiceMessageMediaManagerMock(),
|
|
|
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
|
|
|
appMediator: AppMediatorMock.default,
|
|
|
|
appSettings: ServiceLocator.shared.settings,
|
|
|
|
analyticsService: ServiceLocator.shared.analytics)
|
|
|
|
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .allUsers, font: .preferredFont(forTextStyle: .body)))
|
2023-09-29 15:40:31 +02:00
|
|
|
|
|
|
|
XCTAssertTrue(context.viewState.isOwnMention)
|
2023-10-27 09:29:20 +02:00
|
|
|
XCTAssertEqual(context.viewState.displayText, PillConstants.atRoom)
|
2023-09-29 15:40:31 +02:00
|
|
|
}
|
|
|
|
}
|