mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 15:22:39 +00:00
Correctly chain up async calls on emoji store loading to avoid race conditions and intermittent test failures.
This commit is contained in:
parent
b35407bab2
commit
c9d0a4f4b4
1 changed files with 14 additions and 30 deletions
|
@ -20,14 +20,6 @@ import XCTest
|
||||||
|
|
||||||
class EmojiStoreTests: XCTestCase {
|
class EmojiStoreTests: XCTestCase {
|
||||||
|
|
||||||
private var emojiStore: EmojiStore!
|
|
||||||
|
|
||||||
override func setUp() {
|
|
||||||
emojiStore = loadStore()
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Tests
|
|
||||||
|
|
||||||
func testFinds💯WhenSearchingForHundred() {
|
func testFinds💯WhenSearchingForHundred() {
|
||||||
find("hundred", expect: "💯")
|
find("hundred", expect: "💯")
|
||||||
}
|
}
|
||||||
|
@ -43,34 +35,26 @@ class EmojiStoreTests: XCTestCase {
|
||||||
func testFinds2️⃣WhenSearchingFor2() {
|
func testFinds2️⃣WhenSearchingFor2() {
|
||||||
find("2", expect: "2️⃣")
|
find("2", expect: "2️⃣")
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Helpers
|
// MARK: - Private
|
||||||
|
|
||||||
private func loadStore() -> EmojiStore {
|
private func find(_ searchText: String, expect emoji: String) {
|
||||||
let store = EmojiStore()
|
loadEmojiStore { emojiStore in
|
||||||
let emojiService = EmojiMartService()
|
let emojis = emojiStore.findEmojiItemsSortedByCategory(with: searchText).flatMap { $0.emojis.map { $0.value } }
|
||||||
let expectation = self.expectation(description: "The wai-ai-ting is the hardest part")
|
XCTAssert(emojis.contains(emoji), "Search text \"\(searchText)\" should find \"\(emoji)\" but only found \(emojis)")
|
||||||
|
}
|
||||||
emojiService.getEmojiCategories { response in
|
}
|
||||||
|
|
||||||
|
private func loadEmojiStore(_ completion: @escaping (EmojiStore) -> Void) {
|
||||||
|
EmojiMartService().getEmojiCategories { response in
|
||||||
switch response {
|
switch response {
|
||||||
case .success(let categories):
|
case .success(let categories):
|
||||||
|
let store = EmojiStore()
|
||||||
store.set(categories)
|
store.set(categories)
|
||||||
expectation.fulfill()
|
completion(store)
|
||||||
case .failure(let error):
|
case .failure(let error):
|
||||||
XCTFail("Failed to load emojis: \(error)")
|
XCTFail("Failed to load emojis: \(error)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
waitForExpectations(timeout: 2) { error in
|
|
||||||
XCTAssertNil(error)
|
|
||||||
}
|
|
||||||
|
|
||||||
return store
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func find(_ searchText: String, expect emoji: String) {
|
|
||||||
let emojis = emojiStore.findEmojiItemsSortedByCategory(with: searchText).flatMap { $0.emojis.map { $0.value } }
|
|
||||||
XCTAssert(emojis.contains(emoji), "Search text \"\(searchText)\" should find \"\(emoji)\" but only found \(emojis)")
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue