Support runtime customisation of the rageshake URL. (#4267)

This commit is contained in:
Doug
2025-06-30 10:18:25 +01:00
committed by GitHub
parent 08744fde73
commit e882b9e7b8
10 changed files with 143 additions and 19 deletions

View File

@@ -42,7 +42,7 @@ class BugReportServiceTests: XCTestCase {
}
func testInitialStateWithRealService() throws {
let service = BugReportService(baseURL: "https://www.example.com",
let service = BugReportService(rageshakeURL: "https://example.com/submit",
applicationID: "mock_app_id",
sdkGitSHA: "1234",
maxUploadSize: ServiceLocator.shared.settings.bugReportMaxUploadSize,
@@ -53,7 +53,7 @@ class BugReportServiceTests: XCTestCase {
}
func testInitialStateWithRealServiceAndNoURL() throws {
let service = BugReportService(baseURL: nil,
let service = BugReportService(rageshakeURL: nil,
applicationID: "mock_app_id",
sdkGitSHA: "1234",
maxUploadSize: ServiceLocator.shared.settings.bugReportMaxUploadSize,
@@ -64,7 +64,7 @@ class BugReportServiceTests: XCTestCase {
}
@MainActor func testSubmitBugReportWithRealService() async throws {
let service = BugReportService(baseURL: "https://www.example.com",
let service = BugReportService(rageshakeURL: "https://example.com/submit",
applicationID: "mock_app_id",
sdkGitSHA: "1234",
maxUploadSize: ServiceLocator.shared.settings.bugReportMaxUploadSize,
@@ -86,6 +86,62 @@ class BugReportServiceTests: XCTestCase {
XCTAssertEqual(response.reportURL, "https://example.com/123")
}
@MainActor func testConfigurations() async throws {
let service = BugReportService(rageshakeURL: "https://example.com/submit",
applicationID: "mock_app_id",
sdkGitSHA: "1234",
maxUploadSize: ServiceLocator.shared.settings.bugReportMaxUploadSize,
session: .mock,
appHooks: AppHooks())
XCTAssertTrue(service.isEnabled)
service.applyConfiguration(.disabled)
XCTAssertFalse(service.isEnabled)
service.applyConfiguration(.url("https://bugs.server.net/submit"))
XCTAssertTrue(service.isEnabled)
let bugReport = BugReport(userID: "@mock:client.com",
deviceID: nil,
ed25519: nil,
curve25519: nil,
text: "i cannot send message",
logFiles: Tracing.logFiles,
canContact: false,
githubLabels: [],
files: [])
let progressSubject = CurrentValueSubject<Double, Never>(0.0)
let customConfigurationResponse = try await service.submitBugReport(bugReport, progressListener: progressSubject).get()
XCTAssertEqual(customConfigurationResponse.reportURL, "https://bugs.server.net/123")
service.applyConfiguration(.default)
XCTAssertTrue(service.isEnabled)
let defaultConfigurationResponse = try await service.submitBugReport(bugReport, progressListener: progressSubject).get()
XCTAssertEqual(defaultConfigurationResponse.reportURL, "https://example.com/123")
}
func testDisabledConfigurations() {
let service = BugReportService(rageshakeURL: nil,
applicationID: "mock_app_id",
sdkGitSHA: "1234",
maxUploadSize: ServiceLocator.shared.settings.bugReportMaxUploadSize,
session: .mock,
appHooks: AppHooks())
XCTAssertFalse(service.isEnabled)
service.applyConfiguration(.disabled)
XCTAssertFalse(service.isEnabled)
service.applyConfiguration(.url("https://bugs.server.net/submit"))
XCTAssertTrue(service.isEnabled)
service.applyConfiguration(.default)
XCTAssertFalse(service.isEnabled)
}
func testLogsMaxSize() {
// Given a new set of logs
var logs = BugReportService.Logs(maxFileSize: 1000)
@@ -114,9 +170,11 @@ class BugReportServiceTests: XCTestCase {
private class MockURLProtocol: URLProtocol {
override func startLoading() {
let response = "{\"report_url\":\"https://example.com/123\"}"
guard let url = request.url else { return }
let reportURL = url.deletingLastPathComponent().appending(path: "123")
let response = "{\"report_url\":\"\(reportURL.absoluteString)\"}"
if let data = response.data(using: .utf8),
let url = request.url,
let urlResponse = HTTPURLResponse(url: url, statusCode: 200, httpVersion: nil, headerFields: nil) {
client?.urlProtocol(self, didReceive: urlResponse, cacheStoragePolicy: .allowedInMemoryOnly)
client?.urlProtocol(self, didLoad: data)