NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

Certificates::fake() nahradí fasádu aj väzbu v kontajneri triedou Testing\CertificatesFake v pamäti, takže sa zaznamenajú aj managery injektované cez konštruktor, rukoväť for() a HasCertificates::requestCertificate(). Vráti inštanciu fake a každú aserciu zavoláte na nej alebo na fasáde:

use RoundlyConsulting\Certificates\Facades\Certificates;

$fake = Certificates::fake();

$this->post('/sites', ['domain' => 'app.example.com']);

Certificates::assertIssued('app.example.com');
Certificates::assertNothingRevoked();
  • Nikdy sa nedotkne poskytovateľa, registra, fronty ani udalostí — certifikáty žijú v pamäti a každý driver() je ArrayProvider v pamäti.
  • Neplatné domény (InvalidDomainException), neznáme domény a nepovolené prechody stavu — vrátane renewLater() — naďalej vyhadzujú výnimky, presne ako skutočný manager.
  • renewDue() pracuje s úložiskom v pamäti a vracia skutočný RenewalReport; sync() a prune() vracajú 0.

Asercie

Zaznamená hoAsercie
issue, issueIfMissing, generate, for()->issue(), requestCertificate()assertIssued($domain), assertNotIssued($domain), assertIssuedCount($n), assertNothingIssued(), assertRequested($domain)
recordFailure($domain)assertFailed($domain)
renew, for()->renew() (aj priamy renewDue)assertRenewed($domain), assertNotRenewed($domain), assertNothingRenewed()
renewLater, for()->renewLater() (aj renewDue(queue: true))assertRenewedLater($domain), assertNothingRenewedLater()
renewDueassertRenewedDue(?$thresholdDays), assertNothingRenewedDue()
obnova zlyhaná cez failRenewalOf()assertRenewalFailed($domain), assertNoRenewalFailures()
revoke, for()->revoke()assertRevoked($domain, ?$reason), assertNotRevoked($domain), assertNothingRevoked()
expire, for()->expire()assertExpired($domain), assertNothingExpired()
syncassertSynced(?$driver), assertNothingSynced()
pruneassertPruned(?$days), assertNothingPruned()

Všetky asercie v praxi:

use RoundlyConsulting\Certificates\Facades\Certificates;

$fake = Certificates::fake();

// Issuance — issue, issueIfMissing, generate, for()->issue(), requestCertificate()
Certificates::issueIfMissing('a.example.com');
Certificates::for('b.example.com')->issue();
$fake->recordFailure('c.example.com');

Certificates::assertIssued('a.example.com');
Certificates::assertNotIssued('c.example.com');
Certificates::assertIssuedCount(2);
Certificates::assertRequested('c.example.com');   // issued, or recorded as failed
Certificates::assertFailed('c.example.com');

// Renewals — renew, renewLater, renewDue
Certificates::renew('a.example.com');
Certificates::for('b.example.com')->renewLater();
Certificates::renewDue(7);

Certificates::assertRenewed('a.example.com');
Certificates::assertNotRenewed('b.example.com');
Certificates::assertRenewedLater('b.example.com');
Certificates::assertRenewedDue(7);                // a run with exactly this threshold
Certificates::assertNoRenewalFailures();

// Revoke and expire
Certificates::revoke('a.example.com', 'key compromise');
Certificates::for('b.example.com')->expire();

Certificates::assertRevoked('a.example.com', 'key compromise');
Certificates::assertNotRevoked('b.example.com');
Certificates::assertExpired('b.example.com');

// Registry maintenance
Certificates::sync('kubernetes');
Certificates::prune(30);

Certificates::assertSynced('kubernetes');
Certificates::assertPruned(30);

A ich náprotivky pre prípad, keď sa nemalo stať nič:

Certificates::fake();

// ...code that must leave certificates alone...

Certificates::assertNothingIssued();
Certificates::assertNothingRenewed();
Certificates::assertNothingRenewedLater();
Certificates::assertNothingRenewedDue();
Certificates::assertNothingRevoked();
Certificates::assertNothingExpired();
Certificates::assertNothingSynced();
Certificates::assertNothingPruned();

Vloženie certifikátov a zlyhané obnovy

MetódaÚčel
seed(Certificate ...$certificates)Uloží certifikáty do pamäte bez zaznamenania vystavenia, aby ste mohli obnoviť, odvolať či expirovať certifikát, ktorý test nevystavil. Vráti fake.
failRenewalOf(string ...$domains)Obnovy týchto domén zlyhajú: záznam prejde do Failed, renew() vyhodí výnimku a renewDue() ho uvedie medzi failed a pokračuje. Vráti fake.
recordFailure(string $domain)Zaznamená neúspešné vystavenie — podklad pre assertFailed() a assertRequested().

Cez seed() a failRenewalOf() otestujete, ako váš kód spracuje RenewalReport so zlyhaniami:

use RoundlyConsulting\Certificates\Facades\Certificates;
use RoundlyConsulting\Certificates\Models\Certificate;

$fake = Certificates::fake()
    ->seed(Certificate::factory()->forDomain('a.example.com')->expiring(5)->make())
    ->failRenewalOf('a.example.com');

$report = Certificates::renewDue();

expect($report->hasFailures())->toBeTrue()
    ->and($report->failedDomains())->toBe(['a.example.com']);

Certificates::assertRenewalFailed('a.example.com');

Monitory expirácie

monitorExpiry() vytvára plán v alerts, preto ho testujte cez Health::fake() z alerts a assertMonitored():

use RoundlyConsulting\Alerts\Facades\Health;
use RoundlyConsulting\Certificates\Alerts\CertificateExpiryCheck;
use RoundlyConsulting\Certificates\Facades\Certificates;

$health = Health::fake();

Certificates::monitorExpiry($certificate, $opsTeam)->daily()->save();

$health->assertMonitored(CertificateExpiryCheck::class, $opsTeam);

Proti driveru array

Ak chcete otestovať skutočnú cestu vystavenia — záznamy v registri, udalosti, vlastníkov — fake vynechajte a prepnite predvolený driver na in-memory driver array. Testy spúšťajte s načítanými migráciami (RefreshDatabase):

use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Certificates\Events\CertificateIssued;
use RoundlyConsulting\Certificates\Facades\Certificates;

it('records an issued certificate', function () {
    config(['certificates.default' => 'array']);
    Event::fake([CertificateIssued::class]);

    $certificate = Certificates::issueIfMissing('app.example.com');

    expect($certificate->status->isActive())->toBeTrue()
        ->and($certificate->expires_at)->not->toBeNull();

    Event::assertDispatched(CertificateIssued::class);
});

Factory modelu

Model registra má factory so stavmi pre bežné scenáre:

use RoundlyConsulting\Certificates\Models\Certificate;

Certificate::factory()->create();                // pending, random domain, kubernetes driver
Certificate::factory()->issued()->create();      // issued, expires in 90 days
Certificate::factory()->expiring(5)->create();   // issued, expires in 5 days
Certificate::factory()->expired()->create();     // expired 5 days ago
Certificate::factory()->failed()->create();      // failed, with last_error
Certificate::factory()->forDomain('shop.example.com')->issued()->create();

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.