80 lines
3.4 KiB
PHP
80 lines
3.4 KiB
PHP
<?php // tests/Feature/Seats/SeatModelTest.php
|
|
|
|
use App\Models\Customer;
|
|
use App\Models\Instance;
|
|
use App\Models\Seat;
|
|
|
|
it('startet jeden Sitz als noch nicht in der Nextcloud', function () {
|
|
expect(Seat::factory()->create()->nc_state)->toBe(Seat::STATE_NONE);
|
|
});
|
|
|
|
it('bildet jede Rolle auf genau eine Nextcloud-Gruppe ab', function () {
|
|
// Keine Rolle ohne Gruppe: eine Rolle, die im Portal waehlbar ist und im
|
|
// Gast nichts bewirkt, ist genau die Attrappe, die hier abgeschafft wird.
|
|
foreach (Seat::ROLES as $rolle) {
|
|
expect(Seat::GROUPS)->toHaveKey($rolle)
|
|
->and(Seat::GROUPS[$rolle])->not->toBe('');
|
|
}
|
|
|
|
// Nicht nur "irgendein Wert" — die Namen selbst, denn sie wandern spaeter
|
|
// woertlich in `occ group:adduser`. Ein Vertipper darin faellt sonst
|
|
// erst auf einer echten Instanz auf, nicht hier.
|
|
expect(Seat::GROUPS['member'])->toBe('mitarbeiter')
|
|
->and(Seat::GROUPS['readonly'])->toBe('nur-lesen');
|
|
});
|
|
|
|
it('fuehrt owner und admin in die Admin-Gruppe', function () {
|
|
expect(Seat::GROUPS['owner'])->toBe('admin')
|
|
->and(Seat::GROUPS['admin'])->toBe('admin');
|
|
});
|
|
|
|
it('erkennt die Rolle, die keinen Speicherplatz bekommt', function () {
|
|
expect(Seat::factory()->create(['role' => 'readonly'])->isReadonly())->toBeTrue()
|
|
->and(Seat::factory()->create(['role' => 'member'])->isReadonly())->toBeFalse();
|
|
});
|
|
|
|
it('verknuepft den Inhaber-Sitz mit dem bestehenden Admin-Konto', function () {
|
|
// Die Wanderung. Der owner-Sitz eines Kunden, dessen Instanz ein
|
|
// nc_admin_ref traegt, IST dieses Konto — die Bereitstellung hat es
|
|
// angelegt. Stuende er auf 'none', boete das Panel dem Inhaber an, sich
|
|
// selbst einzuladen, und der Auftrag traefe auf einen Benutzer, den es
|
|
// laengst gibt.
|
|
$customer = Customer::factory()->create();
|
|
Instance::factory()->for($customer)->create(['nc_admin_ref' => 'admin', 'status' => 'active']);
|
|
$sitz = Seat::factory()->for($customer)->create(['role' => 'owner']);
|
|
|
|
// Die Wanderung lief beim Anlegen der Testdatenbank; hier wird die
|
|
// Nachziehmethode geprueft, die sie benutzt.
|
|
$sitz->linkToInstanceAdmin();
|
|
|
|
expect($sitz->fresh()->nc_username)->toBe('admin')
|
|
->and($sitz->fresh()->nc_state)->toBe(Seat::STATE_SYNCED);
|
|
});
|
|
|
|
it('laesst einen Inhaber-Sitz ohne Instanz unangetastet', function () {
|
|
// Kein Auftrag hat je ein Admin-Konto angelegt — es gibt nichts zu
|
|
// verknuepfen, und es darf nichts krachen, weil customer->instances()
|
|
// leer ist.
|
|
$customer = Customer::factory()->create();
|
|
$sitz = Seat::factory()->for($customer)->create(['role' => 'owner']);
|
|
|
|
$sitz->linkToInstanceAdmin();
|
|
|
|
expect($sitz->fresh()->nc_username)->toBeNull()
|
|
->and($sitz->fresh()->nc_state)->toBe(Seat::STATE_NONE);
|
|
});
|
|
|
|
it('laesst einen Inhaber-Sitz ohne nc_admin_ref unangetastet', function () {
|
|
// Eine Instanz ohne Admin-Konto — etwa eine, deren Bereitstellung noch
|
|
// nicht bis dahin gekommen ist. blank() statt einer reinen Null-Pruefung,
|
|
// weil ein leerer String hier dieselbe Aussage ist wie kein Wert.
|
|
$customer = Customer::factory()->create();
|
|
Instance::factory()->for($customer)->create(['nc_admin_ref' => null, 'status' => 'active']);
|
|
$sitz = Seat::factory()->for($customer)->create(['role' => 'owner']);
|
|
|
|
$sitz->linkToInstanceAdmin();
|
|
|
|
expect($sitz->fresh()->nc_username)->toBeNull()
|
|
->and($sitz->fresh()->nc_state)->toBe(Seat::STATE_NONE);
|
|
});
|