path = sys_get_temp_dir() . '/monitor-sync-trigger-' . uniqid() . '/sync-requested'; } protected function tearDown(): void { if (file_exists($this->path)) { unlink($this->path); } if (is_dir(dirname($this->path))) { rmdir(dirname($this->path)); } } public function testConsumeReportsNothingWhenNoSyncWasRequested(): void { self::assertFalse((new SyncTrigger($this->path))->consume()); } public function testConsumeReportsRequestedSyncExactlyOnce(): void { $trigger = new SyncTrigger($this->path); $trigger->request(); self::assertTrue($trigger->consume()); self::assertFalse($trigger->consume()); } /** Mehrere Webhooks vor dem naechsten Lauf duerfen nicht zu mehreren Syncs fuehren. */ public function testRepeatedRequestsCollapseIntoOneSync(): void { $trigger = new SyncTrigger($this->path); $trigger->request(); $trigger->request(); $trigger->request(); self::assertTrue($trigger->consume()); self::assertFalse($trigger->consume()); } /** api- und sync-Container teilen sich das Volume, legen die Datei aber ggf. selbst an. */ public function testRequestCreatesMissingDirectory(): void { (new SyncTrigger($this->path))->request(); self::assertFileExists($this->path); } }