Skip to content

Commit 1a0747b

Browse files
authored
Improve unknown usecase error message (#109)
1 parent eb7355e commit 1a0747b

File tree

2 files changed

+44
-12
lines changed

2 files changed

+44
-12
lines changed

Sources/PIRService/Controllers/PIRServiceController.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,20 @@ struct PIRServiceController {
6666
}
6767

6868
guard configRequest.existingConfigIds.isEmpty ||
69-
configRequest.existingConfigIds.count == requestedUsecases.count
69+
configRequest.existingConfigIds.count == configRequest.usecases.count
7070
else {
7171
throw HTTPError(.badRequest, message: """
7272
Invalid existingConfigIds count \(configRequest.existingConfigIds.count). \
73-
Expected 0 or \(requestedUsecases.count).
73+
Expected 0 or \(configRequest.usecases.count).
74+
""")
75+
}
76+
77+
guard configRequest.usecases.isEmpty ||
78+
configRequest.usecases.count == requestedUsecases.count
79+
else {
80+
throw await HTTPError(.notFound, message: """
81+
One or more usecases not found. Requested usecases: \(configRequest.usecases).
82+
Usecases available on the server: \(usecases.getAll().keys).
7483
""")
7584
}
7685

Tests/PIRServiceTests/PIRServiceControllerTests.swift

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,18 @@ import Util
2525

2626
@Suite
2727
struct PIRServiceControllerTests {
28-
@Test
29-
func noUserIdentifier() async throws {
30-
// Error message returned by Hummingbird
31-
struct ErrorMessage: Codable {
32-
// swiftlint:disable:next nesting
33-
struct Details: Codable {
34-
let message: String
35-
}
36-
37-
let error: Details
28+
// Error message returned by Hummingbird
29+
struct ErrorMessage: Codable {
30+
// swiftlint:disable:next nesting
31+
struct Details: Codable {
32+
let message: String
3833
}
3934

35+
let error: Details
36+
}
37+
38+
@Test
39+
func noUserIdentifier() async throws {
4040
let app = try await buildApplication()
4141
try await app.test(.live) { client in
4242
try await client.execute(uri: "/key", method: .post) { response in
@@ -232,4 +232,27 @@ struct PIRServiceControllerTests {
232232
}
233233
}
234234
}
235+
236+
@Test
237+
func configFetchWithUnknownUsecase() async throws {
238+
let usecaseStore = UsecaseStore()
239+
let exampleUsecase = ExampleUsecase.hundred
240+
try await usecaseStore.set(name: "test", usecase: exampleUsecase)
241+
let app = try await buildApplication(usecaseStore: usecaseStore)
242+
let user = UserIdentifier()
243+
244+
let configRequest = Apple_SwiftHomomorphicEncryption_Api_Pir_V1_ConfigRequest.with { configReq in
245+
configReq.usecases = ["other"]
246+
}
247+
try await app.test(.live) { client in
248+
try await client.execute(uri: "/config", userIdentifier: user, message: configRequest) { response in
249+
#expect(response.status == .notFound)
250+
let errorMessage = try JSONDecoder().decode(ErrorMessage.self, from: response.body)
251+
#expect(errorMessage.error.message == """
252+
One or more usecases not found. Requested usecases: ["other"].
253+
Usecases available on the server: ["test"].
254+
""")
255+
}
256+
}
257+
}
235258
}

0 commit comments

Comments
 (0)