48 lines
1.6 KiB
Swift
48 lines
1.6 KiB
Swift
import XCTest
|
|
@testable import SharedCore
|
|
|
|
final class WatchPayloadValidationTests: XCTestCase {
|
|
private struct MockPayload: Codable, Equatable {
|
|
let name: String
|
|
let count: Int
|
|
}
|
|
|
|
func testValidateRejectsEmptyPayload() {
|
|
let error = WatchPayloadValidation.validate(Data())
|
|
XCTAssertEqual(error, .emptyPayload)
|
|
}
|
|
|
|
func testValidateRejectsOversizedPayload() {
|
|
let payload = Data(repeating: 0, count: 9)
|
|
let error = WatchPayloadValidation.validate(payload, maxBytes: 8)
|
|
XCTAssertEqual(error, .payloadTooLarge(actualBytes: 9, maxBytes: 8))
|
|
}
|
|
|
|
func testDecodeAcceptsValidPayload() throws {
|
|
let payload = try JSONEncoder().encode(MockPayload(name: "set", count: 12))
|
|
let decoded = try WatchPayloadValidation.decode(MockPayload.self, from: payload)
|
|
XCTAssertEqual(decoded, MockPayload(name: "set", count: 12))
|
|
}
|
|
|
|
func testDecodeRejectsInvalidJSON() throws {
|
|
let invalid = Data("not-json".utf8)
|
|
|
|
XCTAssertThrowsError(try WatchPayloadValidation.decode(MockPayload.self, from: invalid)) { error in
|
|
XCTAssertEqual(error as? WatchPayloadValidationError, .decodeFailure)
|
|
}
|
|
}
|
|
|
|
func testDecodeRejectsOversizedPayloadBeforeDecoding() {
|
|
let payload = Data(repeating: 1, count: 32)
|
|
|
|
XCTAssertThrowsError(
|
|
try WatchPayloadValidation.decode(MockPayload.self, from: payload, maxBytes: 16)
|
|
) { error in
|
|
XCTAssertEqual(
|
|
error as? WatchPayloadValidationError,
|
|
.payloadTooLarge(actualBytes: 32, maxBytes: 16)
|
|
)
|
|
}
|
|
}
|
|
}
|