create([ 'email' => uniqid('tax_', 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 rendert und zeigt umsatzsteuersaetze', function () { $this->actingAs(taxRateUser(8), 'user'); TaxRate::create(['name' => 'Standard', 'percent' => 19.00, 'active' => true, 'pos' => 0]); $response = $this->get(route('admin.inventory.general')); $response->assertSuccessful(); $response->assertSee('Umsatzsteuersätze', false); $response->assertSee('Standard'); $response->assertSee(route('admin.inventory.tax-rates.create'), false); }); test('superadmin legt umsatzsteuersatz an', function () { $this->actingAs(taxRateUser(8), 'user'); $this->get(route('admin.inventory.tax-rates.create'))->assertSuccessful(); $this->post(route('admin.inventory.tax-rates.store'), [ 'name' => 'Standard', 'percent' => '19', 'active' => '1', 'pos' => 0, ])->assertRedirect(route('admin.inventory.general')); $taxRate = TaxRate::query()->where('name', 'Standard')->firstOrFail(); expect((float) $taxRate->percent)->toBe(19.00); expect($taxRate->active)->toBeTrue(); }); test('umsatzsteuersatz kann bearbeitet und deaktiviert werden', function () { $this->actingAs(taxRateUser(8), 'user'); $taxRate = TaxRate::create(['name' => 'Ermäßigt', 'percent' => 7.00, 'active' => true, 'pos' => 1]); $this->get(route('admin.inventory.tax-rates.edit', $taxRate))->assertSuccessful(); $this->put(route('admin.inventory.tax-rates.update', $taxRate), [ 'name' => 'Ermäßigt (alt)', 'percent' => '7', 'pos' => 1, ])->assertRedirect(route('admin.inventory.general')); $taxRate->refresh(); expect($taxRate->name)->toBe('Ermäßigt (alt)'); expect($taxRate->active)->toBeFalse(); }); test('umsatzsteuersatz kann geloescht werden', function () { $this->actingAs(taxRateUser(8), 'user'); $taxRate = TaxRate::create(['name' => 'Steuerfrei', 'percent' => 0.00, 'active' => true, 'pos' => 2]); $this->delete(route('admin.inventory.tax-rates.destroy', $taxRate)) ->assertRedirect(route('admin.inventory.general')); expect(TaxRate::query()->whereKey($taxRate->id)->exists())->toBeFalse(); }); test('prozentsatz ist pflicht und muss numerisch sein', function () { $this->actingAs(taxRateUser(8), 'user'); $this->post(route('admin.inventory.tax-rates.store'), [ 'name' => 'Ohne Satz', 'percent' => '', ])->assertSessionHasErrors('percent'); $this->post(route('admin.inventory.tax-rates.store'), [ 'name' => 'Zu hoch', 'percent' => '150', ])->assertSessionHasErrors('percent'); }); test('nur aktive saetze ueber active-scope', function () { TaxRate::create(['name' => 'Aktiv', 'percent' => 19.00, 'active' => true, 'pos' => 0]); TaxRate::create(['name' => 'Inaktiv', 'percent' => 16.00, 'active' => false, 'pos' => 1]); expect(TaxRate::query()->active()->pluck('name')->all())->toBe(['Aktiv']); }); test('nicht-superadmin hat keinen zugriff auf allgemein-seite', function () { $this->actingAs(taxRateUser(7), 'user'); $this->get(route('admin.inventory.general'))->assertRedirect('/home'); });