Ein Schritt ohne Namen zeigt bei jeder Bestellung seinen Schluessel
provisioning.step.configure_instance_mail fehlte in beiden Sprachdateien, waehrend der Schritt in der Pflicht-Pipeline steht: die Konsole zeigte bei JEDER bezahlten Bestellung den rohen Schluessel. Dazu die Pruefung, die danach fragt — fuer jeden Schritt jeder Pipeline, in beiden Sprachen. Sie liest die Sprachdatei selbst und nicht trans($key, [], 'de'): Laravel faellt bei einem fehlenden deutschen Eintrag stumm auf die Ersatzsprache zurueck, und die erste Fassung dieser Pruefung lief genau deshalb gruen, obwohl der deutsche Eintrag geloescht war. Nachgeprueft, nicht angenommen. Und label() des Schrittes selbst statt eines hier nachgebauten Schluessels: Host- und Kundenschritte liegen in verschiedenen Sprachdateien, und ein Test, der die Zusammensetzung nachrechnet, prueft die Zusammensetzung statt den Eintrag. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>feat/versandtakt
parent
f62304a245
commit
1d0bacc650
|
|
@ -11,6 +11,7 @@ return [
|
|||
'configure_network' => 'Netzwerk konfigurieren',
|
||||
'deploy_application_stack' => 'Anwendung ausrollen',
|
||||
'configure_nextcloud' => 'Nextcloud einrichten',
|
||||
'configure_instance_mail' => 'Mailversand einrichten',
|
||||
'create_customer_admin' => 'Admin-Konto anlegen',
|
||||
'configure_dns_and_tls' => 'DNS & TLS einrichten',
|
||||
'register_backup' => 'Backup einrichten',
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ return [
|
|||
'configure_network' => 'Configure network',
|
||||
'deploy_application_stack' => 'Deploy application stack',
|
||||
'configure_nextcloud' => 'Set up Nextcloud',
|
||||
'configure_instance_mail' => 'Set up mail delivery',
|
||||
'create_customer_admin' => 'Create admin account',
|
||||
'configure_dns_and_tls' => 'Configure DNS & TLS',
|
||||
'register_backup' => 'Register backup',
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ use App\Provisioning\PipelineRegistry;
|
|||
use App\Provisioning\Steps\Customer\ConfigureDnsAndTls;
|
||||
use App\Provisioning\Steps\Customer\ConfigureNextcloud;
|
||||
use App\Provisioning\WorkInFlight;
|
||||
use Illuminate\Support\Arr;
|
||||
use Tests\Support\Steps\FakeAdvanceStep;
|
||||
use Tests\Support\Steps\FakeRetryStep;
|
||||
|
||||
|
|
@ -107,3 +108,42 @@ it('lays the maintenance pipelines out so a half-finished address is a safe one'
|
|||
->toBeLessThan(array_search($dns, $steps, true));
|
||||
}
|
||||
});
|
||||
|
||||
it('gives every step of every pipeline a name a human can read, in both languages', function () {
|
||||
// `configure_instance_mail` stand in der Pflicht-Pipeline und hatte keinen
|
||||
// Spracheintrag: die Konsole zeigte bei JEDER bezahlten Bestellung den
|
||||
// rohen Schlüssel. Ein neuer Schritt ist eine Zeile Code und eine Zeile
|
||||
// Sprache — die zweite vergisst man, und niemand merkt es, weil kein Test
|
||||
// je danach gefragt hat.
|
||||
//
|
||||
// Gelesen wird die Sprachdatei selbst, NICHT trans($key, [], 'de'):
|
||||
// Laravel fällt bei einem fehlenden deutschen Eintrag stumm auf die
|
||||
// Ersatzsprache zurück, und ein Test darauf hätte einen fehlenden
|
||||
// deutschen Text durchgewunken, solange es den englischen gibt.
|
||||
// Nachgeprüft, nicht angenommen — die erste Fassung dieses Tests lief
|
||||
// genau deshalb gruen, obwohl der deutsche Eintrag gelöscht war.
|
||||
$dateien = [];
|
||||
$fehlend = [];
|
||||
|
||||
foreach (array_keys((array) config('provisioning.pipelines')) as $pipeline) {
|
||||
foreach ((array) config('provisioning.pipelines.'.$pipeline) as $step) {
|
||||
// label() des Schrittes selbst, nicht ein hier nachgebauter
|
||||
// Schlüssel: Host- und Kundenschritte liegen in verschiedenen
|
||||
// Sprachdateien (`hosts.step.*` bzw. `provisioning.step.*`), und
|
||||
// ein Test, der die Zusammensetzung nachrechnet, prüft die
|
||||
// Zusammensetzung statt den Eintrag (R19).
|
||||
[$gruppe, $rest] = explode('.', app($step)->label(), 2);
|
||||
|
||||
foreach (['de', 'en'] as $sprache) {
|
||||
$pfad = lang_path($sprache.'/'.$gruppe.'.php');
|
||||
$dateien[$sprache.'/'.$gruppe] ??= is_file($pfad) ? (array) require $pfad : [];
|
||||
|
||||
if (! Arr::has($dateien[$sprache.'/'.$gruppe], $rest)) {
|
||||
$fehlend[] = $sprache.': '.$gruppe.'.'.$rest;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
expect(array_values(array_unique($fehlend)))->toBe([]);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue