Tests updates and other fixes (#27)

This PR contains the work done to update the live test data to its latest version. Plus other improvements have been made:

* conformed the `AmiiboServiceError` error to the `LocalizableError` protocol,
* improved the `ISODateTimeTranscoder` transcoder to handle the decoding of both ISO dates and timestamps,
* removed a force-unwrapped from the `AmiiboLiveClient` type.

Reviewed-on: #27
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
This commit was merged in pull request #27.
This commit is contained in:
2026-03-27 17:14:26 +00:00
committed by Javier Cicchelli
parent 2442ada4b6
commit 1488aa151e
151 changed files with 259 additions and 197 deletions
@@ -29,10 +29,13 @@ public struct AmiiboLiveClient: Sendable {
/// Initializes this client with a transport for performing HTTP operations.
/// - Parameter transport: A transport that performs HTTP operations. Defaults to a `URLSessionTransport` using the shared session.
public init(transport: any ClientTransport = URLSessionTransport()) {
guard let serverURL = try? Servers.Server1.url() else {
fatalError("The server URL defined in the OpenAPI specification could not be resolved. Verify that the 'openapi.yaml' server definition is valid.")
}
self.client = .init(
// The force unwrapping implemented below assumes that the server definition from the OpenAPI specification is correct.
serverURL: try! Servers.Server1.url(),
configuration: .init(dateTranscoder: ISOTimestampTranscoder()),
serverURL: serverURL,
configuration: .init(dateTranscoder: ISODateTimeTranscoder()),
transport: transport
)
}
@@ -1,17 +1,19 @@
// ===----------------------------------------------------------------------===
//
//
// This source file is part of the Amiibo Service open source project
//
//
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
//
// See LICENSE for license information
// See CONTRIBUTORS for the list of Amiibo Service project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//
// ===----------------------------------------------------------------------===
import Foundation
/// A representation of all the possible errors that the ``AmiiboService`` service could throw.
public enum AmiiboServiceError: Error {
/// The request was malformed or contained invalid filter parameters.
@@ -33,3 +35,23 @@ public enum AmiiboServiceError: Error {
// MARK: - Equatable
extension AmiiboServiceError: Equatable {}
// MARK: - LocalizedError
extension AmiiboServiceError: LocalizedError {
// MARK: Properties
public var errorDescription: String? {
switch self {
case .badRequest: "The request was malformed or contained invalid filter parameters."
case .cancelled: "The request was cancelled before a response was received."
case .decoding: "The response body could not be decoded into the expected model."
case .notAvailable: "The backend service is currently unreachable due to a network or server issue."
case .notFound: "No results were found matching the given filter criteria."
case .undocumented(let statusCode): "The server returned an undocumented HTTP status code: \(statusCode)."
case .unknown: "An unexpected error occurred."
}
}
}