CluPilotCloud/tests/Feature/StripeWebhookSecretByModeTe...

47 lines
1.7 KiB
PHP

<?php
use App\Support\OperatingMode;
use App\Support\StripeWebhookSecret;
use Illuminate\Support\Facades\Schema;
/**
* Zwei Signaturschlüssel, weil Stripe je Modus einen eigenen vergibt.
*
* Der dritte Test ist der eigentliche Grund für diese Datei: die Auswahl liest
* den Modus aus der Datenbank — aus genau der Quelle, die für diesen Wert
* bewusst vermieden wurde. Fällt sie aus, muss die Auswahl auf LIVE fallen. Ein
* echtes Zahlungsereignis wird dann weiter korrekt geprüft; ein Testereignis
* scheitert laut. Die umgekehrte Vorgabe wäre die gefährliche.
*
* Ruft App\Support\StripeWebhookSecret::current() direkt auf statt über
* Reflection eine private Controller-Methode: die Auswahl sitzt in einer
* eigenen, öffentlich aufrufbaren Klasse (Begründung in deren Kopfkommentar),
* gerade damit dieser Test ohne ReflectionMethod auskommt.
*/
beforeEach(function () {
config()->set('services.stripe.webhook_secret', 'whsec_live');
config()->set('services.stripe.webhook_secret_test', 'whsec_test');
});
it('uses the live signing secret in live mode', function () {
OperatingMode::set(OperatingMode::Live);
expect(StripeWebhookSecret::current())->toBe('whsec_live');
});
it('uses the test signing secret in test mode', function () {
OperatingMode::set(OperatingMode::Test);
expect(StripeWebhookSecret::current())->toBe('whsec_test');
});
it('uses the live secret when the settings table cannot be read', function () {
OperatingMode::set(OperatingMode::Test);
// Der Ausfall, gegen den der Wert ursprünglich aus der Datenbank
// herausgehalten wurde.
Schema::drop('app_settings');
expect(StripeWebhookSecret::current())->toBe('whsec_live');
});