mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +00:00
Improve tests' reliability (#763)
* Create publisher extension into the unit test target * Add ViewModelContext test extension * Refactor BugReportViewModelTests * Fix failing UTs * Idea PublishedClosure * Refactor RoomDetailsViewModelTests * Replace more Task.yield/Task.sleep * Move leaveRoom/ignore/unignore under the @MainActor * Revert "Idea PublishedClosure" This reverts commit 4ab25291041f0dbd99083baf9d95bc6647f1fd97. * Make process(viewAction:) sync * Refactor BugReportViewModel callback to a publisher * Fix UTs * Refactor ReportContentViewModel * Fix ui test build error * Try make sonar happy * Empty commit * Revert "Try make sonar happy" This reverts commit 97804b19373a8f55f12174ccbf27f1fd8db583b7. * Rename ui test identifier * Cleanup * Callback -> actions refactor * Update template * Add publisher in TemplateCoordinator * Add env variable in IntegrationTests.xctestplan * Add async sequence extension * Amend integration test plan * Remove env variable from target.yml * Cleanup * Fix failing UI tests
This commit is contained in:
@@ -46,7 +46,6 @@ class BugReportViewModelTests: XCTestCase {
|
||||
let context = viewModel.context
|
||||
|
||||
context.send(viewAction: .removeScreenshot)
|
||||
try await Task.sleep(nanoseconds: 100_000_000)
|
||||
XCTAssertNil(context.viewState.screenshot)
|
||||
}
|
||||
|
||||
@@ -58,7 +57,6 @@ class BugReportViewModelTests: XCTestCase {
|
||||
let context = viewModel.context
|
||||
XCTAssertNil(context.viewState.screenshot)
|
||||
context.send(viewAction: .attachScreenshot(UIImage.actions))
|
||||
try await Task.sleep(nanoseconds: 100_000_000)
|
||||
XCTAssert(context.viewState.screenshot == UIImage.actions)
|
||||
}
|
||||
|
||||
@@ -70,19 +68,20 @@ class BugReportViewModelTests: XCTestCase {
|
||||
deviceID: nil,
|
||||
screenshot: nil, isModallyPresented: false)
|
||||
let context = viewModel.context
|
||||
var isSuccess = false
|
||||
viewModel.callback = { result in
|
||||
switch result {
|
||||
case .submitFinished:
|
||||
isSuccess = true
|
||||
default: break
|
||||
}
|
||||
}
|
||||
context.send(viewAction: .submit)
|
||||
try await Task.sleep(for: .milliseconds(100))
|
||||
|
||||
_ = await viewModel
|
||||
.actions
|
||||
.values
|
||||
.first {
|
||||
guard case .submitFinished = $0 else {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
XCTAssert(mockService.submitBugReportProgressListenerCallsCount == 1)
|
||||
XCTAssert(mockService.submitBugReportProgressListenerReceivedArguments?.bugReport == BugReport(userID: "@mock.client.com", deviceID: nil, text: "", includeLogs: true, includeCrashLog: true, githubLabels: [], files: []))
|
||||
XCTAssertTrue(isSuccess)
|
||||
}
|
||||
|
||||
func testSendReportWithError() async throws {
|
||||
@@ -95,20 +94,19 @@ class BugReportViewModelTests: XCTestCase {
|
||||
deviceID: nil,
|
||||
screenshot: nil, isModallyPresented: false)
|
||||
let context = viewModel.context
|
||||
var isFailure = false
|
||||
|
||||
viewModel.callback = { result in
|
||||
switch result {
|
||||
case .submitFailed:
|
||||
isFailure = true
|
||||
default: break
|
||||
}
|
||||
}
|
||||
|
||||
context.send(viewAction: .submit)
|
||||
try await Task.sleep(for: .milliseconds(100))
|
||||
|
||||
_ = await viewModel
|
||||
.actions
|
||||
.values
|
||||
.first {
|
||||
guard case .submitFailed = $0 else {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
XCTAssert(mockService.submitBugReportProgressListenerCallsCount == 1)
|
||||
XCTAssert(mockService.submitBugReportProgressListenerReceivedArguments?.bugReport == BugReport(userID: "@mock.client.com", deviceID: nil, text: "", includeLogs: true, includeCrashLog: true, githubLabels: [], files: []))
|
||||
XCTAssertTrue(isFailure)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user