create([ 'email' => uniqid('dr_', 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 ausschuss-gruende', function () { $this->actingAs(disposalReasonUser(8), 'user'); DisposalReason::create(['label' => 'Bruch / Beschädigung', 'active' => true, 'pos' => 0]); $response = $this->get(route('admin.inventory.general')); $response->assertSuccessful(); $response->assertSee('Ausschuss-Gründe', false); $response->assertSee('Bruch / Beschädigung', false); $response->assertSee(route('admin.inventory.disposal-reasons.create'), false); }); test('superadmin legt ausschuss-grund an', function () { $this->actingAs(disposalReasonUser(8), 'user'); $this->get(route('admin.inventory.disposal-reasons.create'))->assertSuccessful(); $this->post(route('admin.inventory.disposal-reasons.store'), [ 'label' => 'Fehlproduktion', 'active' => '1', 'pos' => 0, ])->assertRedirect(route('admin.inventory.general')); $reason = DisposalReason::query()->where('label', 'Fehlproduktion')->firstOrFail(); expect($reason->active)->toBeTrue(); }); test('ausschuss-grund kann bearbeitet und deaktiviert werden', function () { $this->actingAs(disposalReasonUser(8), 'user'); $reason = DisposalReason::create(['label' => 'Qualitätsmangel', 'active' => true, 'pos' => 1]); $this->get(route('admin.inventory.disposal-reasons.edit', $reason))->assertSuccessful(); $this->put(route('admin.inventory.disposal-reasons.update', $reason), [ 'label' => 'Qualitätsmangel (Rohstoff)', 'pos' => 1, ])->assertRedirect(route('admin.inventory.general')); $reason->refresh(); expect($reason->label)->toBe('Qualitätsmangel (Rohstoff)'); expect($reason->active)->toBeFalse(); }); test('ausschuss-grund kann geloescht werden', function () { $this->actingAs(disposalReasonUser(8), 'user'); $reason = DisposalReason::create(['label' => 'Testgrund', 'active' => true, 'pos' => 2]); $this->delete(route('admin.inventory.disposal-reasons.destroy', $reason)) ->assertRedirect(route('admin.inventory.general')); expect(DisposalReason::query()->whereKey($reason->id)->exists())->toBeFalse(); }); test('bezeichnung ist pflicht', function () { $this->actingAs(disposalReasonUser(8), 'user'); $this->post(route('admin.inventory.disposal-reasons.store'), [ 'label' => '', ])->assertSessionHasErrors('label'); }); test('nur aktive gruende ueber active-scope', function () { DisposalReason::create(['label' => 'Aktiv', 'active' => true, 'pos' => 0]); DisposalReason::create(['label' => 'Inaktiv', 'active' => false, 'pos' => 1]); expect(DisposalReason::query()->active()->pluck('label')->all())->toBe(['Aktiv']); }); test('ausschuss-formular zeigt nur aktive gruende in sortierung', function () { $this->actingAs(disposalReasonUser(7), 'user'); DisposalReason::create(['label' => 'Zweiter Grund', 'active' => true, 'pos' => 1]); DisposalReason::create(['label' => 'Erster Grund', 'active' => true, 'pos' => 0]); DisposalReason::create(['label' => 'Deaktivierter Grund', 'active' => false, 'pos' => 2]); $response = $this->get(route('admin.inventory.stock-disposals.create')); $response->assertSuccessful(); $response->assertSeeInOrder(['Erster Grund', 'Zweiter Grund'], false); $response->assertDontSee('Deaktivierter Grund', false); }); test('nicht-superadmin hat keinen zugriff auf grund-anlage', function () { $this->actingAs(disposalReasonUser(7), 'user'); $this->get(route('admin.inventory.disposal-reasons.create'))->assertRedirect('/home'); });