Skip to content

Commit 272724a

Browse files
added tests for ChannelHeaderLoader
1 parent 9c577d3 commit 272724a

File tree

3 files changed

+160
-0
lines changed

3 files changed

+160
-0
lines changed

StreamChatSwiftUI.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@
221221
84C94D60275A45D2007FE2B9 /* ViewFactory_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C94D5F275A45D2007FE2B9 /* ViewFactory_Tests.swift */; };
222222
84C94D62275A5BB7007FE2B9 /* ChatChannelNamer_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C94D61275A5BB7007FE2B9 /* ChatChannelNamer_Tests.swift */; };
223223
84C94D66275A660B007FE2B9 /* MessageActionsViewModel_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C94D65275A660B007FE2B9 /* MessageActionsViewModel_Tests.swift */; };
224+
84C94D68275A6AFD007FE2B9 /* ChannelHeaderLoader_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C94D67275A6AFD007FE2B9 /* ChannelHeaderLoader_Tests.swift */; };
224225
84EDBC37274FE5CD0057218D /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84EDBC36274FE5CD0057218D /* Localizable.strings */; };
225226
/* End PBXBuildFile section */
226227

@@ -472,6 +473,7 @@
472473
84C94D5F275A45D2007FE2B9 /* ViewFactory_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewFactory_Tests.swift; sourceTree = "<group>"; };
473474
84C94D61275A5BB7007FE2B9 /* ChatChannelNamer_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatChannelNamer_Tests.swift; sourceTree = "<group>"; };
474475
84C94D65275A660B007FE2B9 /* MessageActionsViewModel_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageActionsViewModel_Tests.swift; sourceTree = "<group>"; };
476+
84C94D67275A6AFD007FE2B9 /* ChannelHeaderLoader_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelHeaderLoader_Tests.swift; sourceTree = "<group>"; };
475477
84EDBC36274FE5CD0057218D /* Localizable.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = "<group>"; };
476478
/* End PBXFileReference section */
477479

@@ -813,6 +815,7 @@
813815
children = (
814816
84C94C7F27567D3F007FE2B9 /* ChatChannelListViewModel_Tests.swift */,
815817
84C94D432757C704007FE2B9 /* MoreChannelActionsViewModel_Tests.swift */,
818+
84C94D67275A6AFD007FE2B9 /* ChannelHeaderLoader_Tests.swift */,
816819
84C94D412757C16D007FE2B9 /* ChatChannelListTestHelpers.swift */,
817820
);
818821
path = ChatChannelList;
@@ -1307,6 +1310,7 @@
13071310
84C94D5127591DE2007FE2B9 /* ChatMessageIDs_Tests.swift in Sources */,
13081311
84C94CD727578B92007FE2B9 /* ChatMessageLinkAttachment_Mock.swift in Sources */,
13091312
84C94D0527578BF2007FE2B9 /* TestRunnerEnvironment.swift in Sources */,
1313+
84C94D68275A6AFD007FE2B9 /* ChannelHeaderLoader_Tests.swift in Sources */,
13101314
84C94D1A27579273007FE2B9 /* TestRequest.swift in Sources */,
13111315
84C94D0927578BF2007FE2B9 /* TestManagedObject.swift in Sources */,
13121316
84C94D3A27579BB0007FE2B9 /* AssertJSONEqual.swift in Sources */,

StreamChatSwiftUITests/Infrastructure/Mocks/ImageLoader_Mock.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,18 @@ class ImageLoader_Mock: ImageLoading {
2020
completion(.success(Self.defaultLoadedImage))
2121
}
2222

23+
func loadImages(
24+
from urls: [URL],
25+
placeholders: [UIImage],
26+
loadThumbnails: Bool,
27+
thumbnailSize: CGSize,
28+
imageCDN: ImageCDN,
29+
completion: @escaping (([UIImage]) -> Void)
30+
) {
31+
let result = urls.map { _ in
32+
Self.defaultLoadedImage
33+
}
34+
completion(result)
35+
}
36+
2337
}
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
//
2+
// Copyright © 2021 Stream.io Inc. All rights reserved.
3+
//
4+
5+
import XCTest
6+
@testable import StreamChatSwiftUI
7+
@testable import StreamChat
8+
9+
class ChannelHeaderLoader_Tests: XCTestCase {
10+
11+
@Injected(\.images) var images
12+
13+
private let testURL = URL(string: "https://example.com")!
14+
15+
private var chatClient: ChatClient = {
16+
let client = ChatClient.mock()
17+
client.currentUserId = .unique
18+
return client
19+
}()
20+
21+
private var streamChat: StreamChat?
22+
23+
override func setUp() {
24+
super.setUp()
25+
let imageLoader = ImageLoader_Mock()
26+
let utils = Utils(imageLoader: imageLoader)
27+
streamChat = StreamChat(chatClient: chatClient, utils: utils)
28+
}
29+
30+
func test_channelHeaderLoader_channelImageURL() {
31+
// Given
32+
let channel = ChatChannel.mockDMChannel(imageURL: testURL)
33+
34+
// Then
35+
loadImagesAndAssert(
36+
for: channel,
37+
expectedInitialImage: images.userAvatarPlaceholder4,
38+
expectedLoadedImage: ImageLoader_Mock.defaultLoadedImage
39+
)
40+
}
41+
42+
func test_channelHeaderLoader_directMessageChannel_otherMember() {
43+
// Given
44+
let channel = ChatChannel.mockDMChannel(
45+
lastActiveMembers: [.mock(id: .unique, imageURL: testURL)]
46+
)
47+
48+
// Then
49+
loadImagesAndAssert(
50+
for: channel,
51+
expectedInitialImage: images.userAvatarPlaceholder3,
52+
expectedLoadedImage: ImageLoader_Mock.defaultLoadedImage
53+
)
54+
}
55+
56+
func test_channelHeaderLoader_directMessageChannel_placeholder() {
57+
// Given
58+
let channel = ChatChannel.mockDMChannel(
59+
lastActiveMembers: [.mock(id: .unique)]
60+
)
61+
62+
// Then
63+
loadImagesAndAssert(
64+
for: channel,
65+
expectedInitialImage: images.userAvatarPlaceholder4,
66+
expectedLoadedImage: images.userAvatarPlaceholder4
67+
)
68+
}
69+
70+
func test_channelHeaderLoader_group_activeMembersEmpty() {
71+
// Given
72+
let channel = ChatChannel.mockNonDMChannel()
73+
74+
// Then
75+
loadImagesAndAssert(
76+
for: channel,
77+
expectedInitialImage: images.userAvatarPlaceholder4,
78+
expectedLoadedImage: images.userAvatarPlaceholder4
79+
)
80+
}
81+
82+
func test_channelHeaderLoader_group_activeMembersEmptyURLs() {
83+
// Given
84+
let channel = ChatChannel.mockNonDMChannel(
85+
lastActiveMembers: [.mock(id: .unique)]
86+
)
87+
88+
// Then
89+
loadImagesAndAssert(
90+
for: channel,
91+
expectedInitialImage: images.userAvatarPlaceholder3,
92+
expectedLoadedImage: images.userAvatarPlaceholder3
93+
)
94+
}
95+
96+
func test_channelHeaderLoader_group_activeMembersURLs() {
97+
// Given
98+
let channel = ChatChannel.mockNonDMChannel(
99+
lastActiveMembers: [.mock(id: .unique, imageURL: testURL)]
100+
)
101+
102+
// Then
103+
loadImagesAndAssert(
104+
for: channel,
105+
expectedInitialImage: images.userAvatarPlaceholder4,
106+
expectedLoadedImage: nil
107+
)
108+
}
109+
110+
//MARK: - private
111+
112+
private func loadImagesAndAssert(
113+
for channel: ChatChannel,
114+
expectedInitialImage: UIImage,
115+
expectedLoadedImage: UIImage?
116+
) {
117+
// Given
118+
let channelHeaderLoader = ChannelHeaderLoader()
119+
let expectation = self.expectation(description: "loadingImage")
120+
121+
// When
122+
let firstImage = channelHeaderLoader.image(for: channel)
123+
var secondImage: UIImage!
124+
125+
// Simulate image loaded and view re-draw invoked.
126+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
127+
secondImage = channelHeaderLoader.image(for: channel)
128+
expectation.fulfill()
129+
}
130+
131+
waitForExpectations(timeout: 1, handler: nil)
132+
133+
// Then
134+
XCTAssert(firstImage == expectedInitialImage)
135+
if expectedLoadedImage != nil {
136+
XCTAssert(secondImage == expectedLoadedImage)
137+
} else {
138+
XCTAssert(firstImage != secondImage)
139+
}
140+
}
141+
142+
}

0 commit comments

Comments
 (0)