2026-05-17 22:43:52 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
namespace App\Tests\Unit\Infrastructure\Channel\Ebay;
|
|
|
|
|
|
|
|
|
|
use App\Infrastructure\Channel\Ebay\EbayWebhookVerifier;
|
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
|
|
|
|
|
|
final class EbayWebhookVerifierTest extends TestCase
|
|
|
|
|
{
|
|
|
|
|
private EbayWebhookVerifier $verifier;
|
|
|
|
|
|
|
|
|
|
protected function setUp(): void
|
|
|
|
|
{
|
|
|
|
|
$this->verifier = new EbayWebhookVerifier(
|
|
|
|
|
verificationToken: 'my-secret-token',
|
|
|
|
|
endpointUrl: 'https://example.com/webhooks/ebay',
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-19 10:56:37 +00:00
|
|
|
public function testValidSignaturePasses(): void
|
2026-05-17 22:43:52 +00:00
|
|
|
{
|
|
|
|
|
$body = '{"notification":{"data":{"orderId":"123"}}}';
|
|
|
|
|
$expected = base64_encode(hash('sha256', $body.'my-secret-tokenhttps://example.com/webhooks/ebay', binary: true));
|
|
|
|
|
|
|
|
|
|
$this->assertTrue($this->verifier->verify($body, $expected));
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-19 10:56:37 +00:00
|
|
|
public function testInvalidSignatureFails(): void
|
2026-05-17 22:43:52 +00:00
|
|
|
{
|
|
|
|
|
$this->assertFalse($this->verifier->verify('{"body":"x"}', 'invalidsignature'));
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-19 10:56:37 +00:00
|
|
|
public function testChallengeResponseReturnsCorrectHash(): void
|
2026-05-17 22:43:52 +00:00
|
|
|
{
|
|
|
|
|
$challengeCode = 'abc123';
|
|
|
|
|
$expected = hash('sha256', $challengeCode.'my-secret-tokenhttps://example.com/webhooks/ebay');
|
|
|
|
|
|
|
|
|
|
$this->assertSame($expected, $this->verifier->challengeResponse($challengeCode));
|
|
|
|
|
}
|
|
|
|
|
}
|