path = sys_get_temp_dir() . '/monitor-webhook-' . uniqid() . '/sync-requested'; $this->trigger = new SyncTrigger($this->path); } protected function tearDown(): void { if (file_exists($this->path)) { unlink($this->path); } if (is_dir(dirname($this->path))) { rmdir(dirname($this->path)); } } public function testIssueEventRequestsASync(): void { $controller = new WebhookController($this->trigger); $response = $controller->codeberg($this->request('issues')); self::assertSame(202, $response->status); self::assertTrue($this->trigger->consume()); } /** * Codeberg schickt beim Anlegen des Webhooks ein "ping" zum Testen der Zustellung - das * ist keine Issue-Aenderung und soll keinen Codeberg-Request ausloesen. */ public function testPingIsAnsweredWithoutRequestingASync(): void { $controller = new WebhookController($this->trigger); $response = $controller->codeberg($this->request('ping')); self::assertSame(200, $response->status); self::assertFalse($this->trigger->consume()); } /** Unbekannte Events loesen einen Sync aus - lieber einmal zu viel als einen verpassten. */ public function testUnknownEventStillRequestsASync(): void { $controller = new WebhookController($this->trigger); $response = $controller->codeberg($this->request('issue_label')); self::assertSame(202, $response->status); self::assertTrue($this->trigger->consume()); } private function request(string $event): Request { return Request::create( 'POST', '/api/v1/webhooks/codeberg', [], [], ['X-Gitea-Event' => $event], '{}' ); } }