'1', 'b' => 'x']; require_fields($body, ['a', 'b']); $this->assertSame(['a' => '1', 'b' => 'x'], $body); } public function testRequireFieldsMissing(): void { $this->expectException(JsonErrorResponse::class); $this->expectExceptionMessage('Required fields'); try { require_fields(['a' => ''], ['a', 'b']); } catch (JsonErrorResponse $e) { $this->assertSame('MISSING_FIELDS', $e->errorCode); $this->assertSame(400, $e->httpStatus); throw $e; } } public function testValidateStringTrims(): void { $s = validate_string(' hello ', 'field', 1, 20); $this->assertSame('hello', $s); } public function testValidateEnum(): void { $this->assertSame('admin', validate_enum('admin', 'role', ['admin', 'coach'])); } public function testValidateIntBounds(): void { $this->assertSame(5, validate_int('5', 'n', 1, 10)); } }