create([ 'email' => uniqid('dt_', true).'@test.example', 'password' => bcrypt('password'), ]); $user->forceFill([ 'admin' => $adminLevel, 'confirmed' => true, 'active' => true, 'wizard' => 100, 'blocked' => false, ])->save(); return $user->fresh(); } test('allgemein-seite zeigt lieferzeit-vorlagen', function () { $this->actingAs(deliveryTimeUser(8), 'user'); DeliveryTime::create(['label' => '3–5 Werktage', 'active' => true, 'pos' => 0]); $response = $this->get(route('admin.inventory.general')); $response->assertSuccessful(); $response->assertSee('Lieferzeit-Vorlagen', false); $response->assertSee('3–5 Werktage', false); $response->assertSee(route('admin.inventory.delivery-times.create'), false); }); test('superadmin legt lieferzeit-vorlage an', function () { $this->actingAs(deliveryTimeUser(8), 'user'); $this->get(route('admin.inventory.delivery-times.create'))->assertSuccessful(); $this->post(route('admin.inventory.delivery-times.store'), [ 'label' => '1–2 Wochen', 'days' => 14, 'active' => '1', 'pos' => 0, ])->assertRedirect(route('admin.inventory.general')); $deliveryTime = DeliveryTime::query()->where('label', '1–2 Wochen')->firstOrFail(); expect($deliveryTime->active)->toBeTrue() ->and($deliveryTime->days)->toBe(14); }); test('lieferzeit-vorlage ohne tage bleibt erlaubt', function () { $this->actingAs(deliveryTimeUser(8), 'user'); $this->post(route('admin.inventory.delivery-times.store'), [ 'label' => 'Auf Anfrage', 'days' => '', 'active' => '1', ])->assertRedirect(route('admin.inventory.general')); $deliveryTime = DeliveryTime::query()->where('label', 'Auf Anfrage')->firstOrFail(); expect($deliveryTime->days)->toBeNull(); }); test('tage muss eine ganze zahl sein', function () { $this->actingAs(deliveryTimeUser(8), 'user'); $this->post(route('admin.inventory.delivery-times.store'), [ 'label' => 'Falsche Tage', 'days' => 'abc', ])->assertSessionHasErrors('days'); }); test('lieferzeit-vorlage kann bearbeitet und deaktiviert werden', function () { $this->actingAs(deliveryTimeUser(8), 'user'); $deliveryTime = DeliveryTime::create(['label' => '3–5 Werktage', 'active' => true, 'pos' => 1]); $this->get(route('admin.inventory.delivery-times.edit', $deliveryTime))->assertSuccessful(); $this->put(route('admin.inventory.delivery-times.update', $deliveryTime), [ 'label' => '5–7 Werktage', 'pos' => 1, ])->assertRedirect(route('admin.inventory.general')); $deliveryTime->refresh(); expect($deliveryTime->label)->toBe('5–7 Werktage'); expect($deliveryTime->active)->toBeFalse(); }); test('lieferzeit-vorlage kann geloescht werden', function () { $this->actingAs(deliveryTimeUser(8), 'user'); $deliveryTime = DeliveryTime::create(['label' => 'Express', 'active' => true, 'pos' => 2]); $this->delete(route('admin.inventory.delivery-times.destroy', $deliveryTime)) ->assertRedirect(route('admin.inventory.general')); expect(DeliveryTime::query()->whereKey($deliveryTime->id)->exists())->toBeFalse(); }); test('bezeichnung ist pflicht', function () { $this->actingAs(deliveryTimeUser(8), 'user'); $this->post(route('admin.inventory.delivery-times.store'), [ 'label' => '', ])->assertSessionHasErrors('label'); }); test('nur aktive vorlagen ueber active-scope', function () { DeliveryTime::create(['label' => 'Aktiv', 'active' => true, 'pos' => 0]); DeliveryTime::create(['label' => 'Inaktiv', 'active' => false, 'pos' => 1]); expect(DeliveryTime::query()->active()->pluck('label')->all())->toBe(['Aktiv']); }); test('nicht-superadmin hat keinen zugriff auf lieferzeit-anlage', function () { $this->actingAs(deliveryTimeUser(7), 'user'); $this->get(route('admin.inventory.delivery-times.create'))->assertRedirect('/home'); });