// ===----------------------------------------------------------------------=== // // This source file is part of the Marvel Service open source project // // Copyright (c) 2025 Röck+Cöde VoF. and the Marvel Service project authors // Licensed under Apache license v2.0 // // See LICENSE for license information // See CONTRIBUTORS for the list of Marvel Service project authors // // SPDX-License-Identifier: Apache-2.0 // // ===----------------------------------------------------------------------=== import Testing import struct Foundation.TimeInterval @testable import struct MarvelService.GenerateHashUseCase @Suite("Generate Hash Use Case", .tags(.useCase)) struct GenerateHashUseCaseTests { // MARK: Functions #if swift(>=6.2) @Test(arguments: zip( Input.timestamps, Output.generatedHashes )) func `hash`( timestamp: TimeInterval, expects hash: String ) async throws { assertHash( timestamp: timestamp, expects: hash ) } #else @Test("hash", arguments: zip( Input.timestamps, Output.generatedHashes )) func hash( timestamp: TimeInterval, expects hash: String ) async throws { assertHash( timestamp: timestamp, expects: hash ) } #endif } // MARK: - Assertions private extension GenerateHashUseCaseTests { // MARK: Functions /// Asserts the MD5 hash generated from the use case. /// - Parameters: /// - timestamp: A timestamp to use in the hash generation. /// - hash: An expected MD5 hash string as a result of the use case. func assertHash( timestamp: TimeInterval, expects hash: String ) { // GIVEN let useCase: GenerateHashUseCase = .init( privateKey: .Key.private, publicKey: .Key.public ) // WHEN let result = useCase(timestamp: timestamp) // THEN #expect(result == hash) } } // MARK: - Constants private extension Output { /// A list of outcomes that are expected from the hash generation. static let generatedHashes: [String] = [ "ef9ca6f930e56fb4f8a109a9003580fe", "b500748e9f0aabc67ffc640ae9b87695", "b537f18579112902b7ce046dddad558a", "00fec88a254d42e3a439d49e14cd60d1" ] }