Skip to content

Commit cc4cfe1

Browse files
committed
[CI] Use local images instead of remote ones for snapshot tests
1 parent 4b960cd commit cc4cfe1

File tree

5 files changed

+60
-9
lines changed

5 files changed

+60
-9
lines changed

StreamChatSwiftUITests/Infrastructure/Mocks/ImageLoader_Mock.swift

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import Foundation
66
@testable import StreamChat
77
import StreamChatSwiftUI
88
import UIKit
9+
import XCTest
910

1011
class ImageLoader_Mock: ImageLoading {
1112
static let defaultLoadedImage = UIImage(systemName: "checkmark")!
@@ -17,7 +18,14 @@ class ImageLoader_Mock: ImageLoading {
1718
preferredSize: CGSize?,
1819
completion: @escaping ((Result<UIImage, Error>) -> Void)
1920
) {
20-
completion(.success(Self.defaultLoadedImage))
21+
// Check if this is a test URL and return appropriate test image
22+
if let url = url, url.scheme == "test" {
23+
let testImage = getTestImage(for: url)
24+
completion(.success(testImage))
25+
} else {
26+
// For non-test URLs, return a default test image
27+
completion(.success(Self.defaultLoadedImage))
28+
}
2129
}
2230

2331
func loadImages(
@@ -28,9 +36,31 @@ class ImageLoader_Mock: ImageLoading {
2836
imageCDN: ImageCDN,
2937
completion: @escaping (([UIImage]) -> Void)
3038
) {
31-
let result = urls.map { _ in
32-
Self.defaultLoadedImage
39+
let result = urls.map { url in
40+
if url.scheme == "test" {
41+
return getTestImage(for: url)
42+
} else {
43+
return Self.defaultLoadedImage
44+
}
3345
}
3446
completion(result)
3547
}
48+
49+
// MARK: - Private methods
50+
51+
private func getTestImage(for url: URL) -> UIImage {
52+
// Extract filename from test URL by removing the scheme
53+
let urlString = url.absoluteString
54+
let filename = urlString.replacingOccurrences(of: "test://", with: "").lowercased()
55+
56+
if filename.contains("chewbacca") {
57+
return XCTestCase.TestImages.chewbacca.image
58+
} else if filename.contains("r2") {
59+
return XCTestCase.TestImages.r2.image
60+
} else if filename.contains("vader") {
61+
return XCTestCase.TestImages.vader.image
62+
} else {
63+
return XCTestCase.TestImages.yoda.image
64+
}
65+
}
3666
}

StreamChatSwiftUITests/Infrastructure/Shared/TemporaryData.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,27 @@ extension URL {
2424
try! FileManager.default.createDirectory(at: newDirURL, withIntermediateDirectories: true, attributes: nil)
2525
return newDirURL
2626
}
27+
28+
/// The following functions return the test URLs that will be handled by our mock image loader
29+
static var localYodaImage: URL {
30+
URL(string: "test://yoda.jpg")!
31+
}
32+
33+
static var localChewbaccaImage: URL {
34+
URL(string: "test://chewbacca.jpg")!
35+
}
36+
37+
static var localR2Image: URL {
38+
URL(string: "test://r2.jpg")!
39+
}
40+
41+
static var localVaderImage: URL {
42+
URL(string: "test://vader.jpg")!
43+
}
44+
45+
static var localLukeImage: URL {
46+
URL(string: "test://luke.jpg")!
47+
}
2748
}
2849

2950
extension String {

StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelTestHelpers.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ class ChatChannelTestHelpers {
4141
channelController.simulateInitial(channel: channel, messages: channelMessages, state: .initialized)
4242
return channelController
4343
}
44-
45-
static let testURL = URL(string: "https://vignette.wikia.nocookie.net/starwars/images/2/20/LukeTLJ.jpg")!
44+
45+
static let testURL = URL.localYodaImage
4646

4747
static var imageAttachments: [AnyChatMessageAttachment] = {
4848
let attachmentFile = AttachmentFile(type: .png, size: 0, mimeType: "image/png")
@@ -225,8 +225,8 @@ class ChatChannelTestHelpers {
225225
let title = index == 0 ? "Recording" : "Recording-\(index)"
226226
let payload = VoiceRecordingAttachmentPayload(
227227
title: title,
228-
voiceRecordingRemoteURL: .localYodaImage,
229-
file: try! .init(url: .localYodaImage),
228+
voiceRecordingRemoteURL: testURL,
229+
file: try! .init(url: testURL),
230230
duration: Double(index) + 5.0,
231231
waveformData: [0, 0.1, 0.5, 1],
232232
extraData: nil

StreamChatSwiftUITests/Tests/ChatChannel/LazyImageExtensions_Tests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ final class LazyImageExtensions_Tests: StreamChatTestCase {
2323
func test_imageURL_nonEmpty() {
2424
// Given
2525
let lazyImageView = LazyImage(
26-
imageURL: URL(string: "https://vignette.wikia.nocookie.net/starwars/images/2/20/LukeTLJ.jpg")
26+
imageURL: .localYodaImage
2727
)
2828
.applyDefaultSize()
2929

StreamChatSwiftUITests/Tests/StreamChatTestCase.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ open class StreamChatTestCase: XCTestCase {
2222

2323
override open func setUp() {
2424
super.setUp()
25-
streamChat = StreamChat(chatClient: chatClient)
25+
streamChat = StreamChat(chatClient: chatClient, utils: Utils(imageLoader: ImageLoader_Mock()))
2626
}
2727

2828
func adjustAppearance(_ block: (inout Appearance) -> Void) {

0 commit comments

Comments
 (0)