From ea71f33ff819bed84c1731c8cb4d5e417f2d5588 Mon Sep 17 00:00:00 2001 From: martinmitrevski Date: Thu, 7 Dec 2023 11:00:12 +0100 Subject: [PATCH] Added tests --- .../ChatChannelViewModel_Tests.swift | 14 ++++++++++++++ .../ChatChannel/MessageActions_Tests.swift | 2 +- .../ChatChannel/MessageListView_Tests.swift | 17 ++++++++++++++++- ...st_messageListView_jumpToUnreadButton.1.png | Bin 0 -> 67460 bytes 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageListView_Tests/test_messageListView_jumpToUnreadButton.1.png diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelViewModel_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelViewModel_Tests.swift index ac57ae3d..e4e43f18 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelViewModel_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelViewModel_Tests.swift @@ -455,6 +455,20 @@ class ChatChannelViewModel_Tests: StreamChatTestCase { // Then XCTAssert(shouldJump == false) } + + func test_chatChannelVM_jumpToUnknownMessage() { + // Given + let message1 = ChatMessage.mock() + let message2 = ChatMessage.mock() + let channelController = makeChannelController(messages: [message1, message2]) + let viewModel = ChatChannelViewModel(channelController: channelController) + + // When + let shouldJump = viewModel.jumpToMessage(messageId: .unknownMessageId) + + // Then + XCTAssert(shouldJump == false) + } // MARK: - private diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift index a2bd714a..d7634021 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift @@ -68,7 +68,7 @@ class MessageActions_Tests: StreamChatTestCase { XCTAssert(messageActions[1].title == "Thread Reply") XCTAssert(messageActions[2].title == "Pin to conversation") XCTAssert(messageActions[3].title == "Copy Message") - XCTAssert(messageActions[4].title == "Mark Unread") + XCTAssert(messageActions[4].title == "Mark Unread") XCTAssert(messageActions[5].title == "Flag Message") XCTAssert(messageActions[6].title == "Mute User") } diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageListView_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageListView_Tests.swift index 10616fd5..24defddb 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageListView_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageListView_Tests.swift @@ -75,17 +75,32 @@ class MessageListView_Tests: StreamChatTestCase { // Then assertSnapshot(matching: view, as: .image(perceptualPrecision: precision)) } + + func test_messageListView_jumpToUnreadButton() { + // Given + let channelConfig = ChannelConfig(reactionsEnabled: true) + let view = makeMessageListView( + channelConfig: channelConfig, + unreadCount: .mock(messages: 3) + ) + .applyDefaultSize() + + // Then + assertSnapshot(matching: view, as: .image(perceptualPrecision: precision)) + } // MARK: - private func makeMessageListView( channelConfig: ChannelConfig, + unreadCount: ChannelUnreadCount = .noUnread, currentlyTypingUsers: Set = [] ) -> MessageListView { let reactions = [MessageReactionType(rawValue: "like"): 2] let channel = ChatChannel.mockDMChannel( config: channelConfig, - currentlyTypingUsers: currentlyTypingUsers + currentlyTypingUsers: currentlyTypingUsers, + unreadCount: unreadCount ) let temp = [ChatMessage.mock( id: .unique, diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageListView_Tests/test_messageListView_jumpToUnreadButton.1.png b/StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageListView_Tests/test_messageListView_jumpToUnreadButton.1.png new file mode 100644 index 0000000000000000000000000000000000000000..44f3f7b1a4846ba94706e1ad18e81535de2874a1 GIT binary patch literal 67460 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