* created a progress tracker class and passed it in the user notification to be observed by the progress view * improved the publishing by dispatching it on RunLoop.main * bug report struct created and progress tracker class moved into the Other folder * some swiftlint adjustments * fixed tests * fixed another test BugReportServiceTests * changelog 495 - change * added a mock preview * fixing some linting suggestions * no need to use KVO, achieve the same result using a publisher * some refactors to address PR comments * some code improvements * fixed the issue that prevented the avatar of the room to be displayed in the mocks, and updated the tests * Revert "fixed the issue that prevented the avatar of the room to be displayed in the mocks, and updated the tests" This reverts commit 113d6091d91a3aac1f9a59ff6c5e07610ed59859.
95 lines
3.6 KiB
Swift
95 lines
3.6 KiB
Swift
//
|
|
// Copyright 2022 New Vector Ltd
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
@testable import ElementX
|
|
import Foundation
|
|
import XCTest
|
|
|
|
class BugReportServiceTests: XCTestCase {
|
|
let bugReportService = MockBugReportService()
|
|
|
|
func testInitialStateWithMockService() {
|
|
XCTAssertFalse(bugReportService.crashedLastRun)
|
|
}
|
|
|
|
func testSubmitBugReportWithMockService() async throws {
|
|
let bugReport = BugReport(text: "i cannot send message",
|
|
includeLogs: true,
|
|
includeCrashLog: true,
|
|
githubLabels: [],
|
|
files: [])
|
|
let result = try await bugReportService.submitBugReport(bugReport, progressListener: nil)
|
|
XCTAssertFalse(result.reportUrl.isEmpty)
|
|
}
|
|
|
|
func testInitialStateWithRealService() throws {
|
|
let service = BugReportService(withBaseURL: URL(staticString: "https://www.example.com"),
|
|
sentryURL: URL(staticString: "https://1234@sentry.com/1234"),
|
|
applicationId: "mock_app_id",
|
|
session: .mock)
|
|
XCTAssertFalse(service.crashedLastRun)
|
|
}
|
|
|
|
@MainActor func testSubmitBugReportWithRealService() async throws {
|
|
let service = BugReportService(withBaseURL: URL(staticString: "https://www.example.com"),
|
|
sentryURL: URL(staticString: "https://1234@sentry.com/1234"),
|
|
applicationId: "mock_app_id",
|
|
session: .mock)
|
|
|
|
let bugReport = BugReport(text: "i cannot send message",
|
|
includeLogs: true,
|
|
includeCrashLog: true,
|
|
githubLabels: [],
|
|
files: [])
|
|
let result = try await service.submitBugReport(bugReport, progressListener: nil)
|
|
|
|
XCTAssertEqual(result.reportUrl, "https://example.com/123")
|
|
}
|
|
}
|
|
|
|
private class MockURLProtocol: URLProtocol {
|
|
override func startLoading() {
|
|
let response = "{\"report_url\":\"https://example.com/123\"}"
|
|
if let data = response.data(using: .utf8) {
|
|
let urlResponse = URLResponse()
|
|
client?.urlProtocol(self, didReceive: urlResponse, cacheStoragePolicy: .allowedInMemoryOnly)
|
|
client?.urlProtocol(self, didLoad: data)
|
|
client?.urlProtocolDidFinishLoading(self)
|
|
}
|
|
}
|
|
|
|
override func stopLoading() {
|
|
// no-op
|
|
}
|
|
|
|
override class func canonicalRequest(for request: URLRequest) -> URLRequest {
|
|
request
|
|
}
|
|
|
|
override class func canInit(with request: URLRequest) -> Bool {
|
|
true
|
|
}
|
|
}
|
|
|
|
private extension URLSession {
|
|
static var mock: URLSession {
|
|
let configuration = URLSessionConfiguration.default
|
|
configuration.protocolClasses = [MockURLProtocol.self] + (configuration.protocolClasses ?? [])
|
|
let result = URLSession(configuration: configuration)
|
|
return result
|
|
}
|
|
}
|