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(''); } }); 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); });