assertSame('service:renew:12345:invoice-99', $key); } public function testServiceOperationKeyFallsBackToDateSuffix(): void { $key = HexaGameCloudIdempotency::serviceOperationKey('suspend', '42', null); $this->assertStringStartsWith('service:suspend:42:', $key); $this->assertMatchesRegularExpression('/^service:suspend:42:\d{4}-\d{2}-\d{2}$/', $key); } public function testRenewKeyPrefersInvoiceId(): void { $key = HexaGameCloudIdempotency::renewKey('9001', [ 'invoiceid' => '7788', 'renewalid' => '5555', ]); $this->assertSame('service:renew:9001:7788', $key); } public function testRenewKeyUsesRenewalIdWhenInvoiceMissing(): void { $key = HexaGameCloudIdempotency::renewKey('9001', [ 'renewalid' => '5555', ]); $this->assertSame('service:renew:9001:5555', $key); } public function testRenewKeyUsesModelInvoiceId(): void { $key = HexaGameCloudIdempotency::renewKey('9001', [ 'model' => ['invoiceid' => '6611'], ]); $this->assertSame('service:renew:9001:6611', $key); } }