assertTrue(Webhook::verifySignature($body, $sig, $secret)); } public function testWrongSecretIsRejected(): void { $body = '{"event":"capture.ready"}'; $sig = 'sha256='.hash_hmac('sha256', $body, 'right_secret'); $this->assertFalse(Webhook::verifySignature($body, $sig, 'wrong_secret')); } public function testEmptyInputsAreRejected(): void { $this->assertFalse(Webhook::verifySignature('', 'sha256=x', 'secret')); $this->assertFalse(Webhook::verifySignature('x', '', 'secret')); $this->assertFalse(Webhook::verifySignature('x', 'sha256=x', '')); } public function testTamperedBodyIsRejected(): void { $original = '{"event":"capture.ready"}'; $tampered = '{"event":"capture.failed"}'; $secret = 'wh_secret'; $sig = 'sha256='.hash_hmac('sha256', $original, $secret); $this->assertFalse(Webhook::verifySignature($tampered, $sig, $secret)); } }