Warenwirtschaft: AP-00 bis AP-08 + aktualisierter Entwicklungsplan
Umsetzung der Warenwirtschafts-/Produktmanagement-Erweiterung gemaess Entwicklungsplan V4.0: - AP-00: Regressionsbasis fuer 5.1-Features (ProductPhase51Test) - AP-01: URL-Bugfixes B1/B2 (suppliers/packaging-items, breitere url-Spalten) - AP-04/04.1: iPad-taugliche, vereinheitlichte Tabellen-Aktionen - AP-05: Einstellungen "Allgemein" mit UST-Saetzen (tax_rates) und Lieferzeit-Vorlagen (delivery_times, inkl. Tage-Feld) - AP-06: Lieferanten um Bestellweg, Bestell-Mail/-URL und Lieferzeit erweitert - AP-07/07.1: INCI um Lieferanten-Mehrfachwahl, UST und Lieferzeit erweitert; Lieferanten-Detailansicht im Modal mit pflegbaren INCI-/Verpackungslisten - AP-08: Einkauf um UST-Snapshot, Netto/Brutto-Automatik und Duplizieren erweitert Entwicklungsplan aktualisiert: alle Klaerungspunkte (§5) vom Kunden beantwortet und in die jeweiligen APs eingearbeitet (AP-02/03/09/13/15), neues AP-18 (Hinweise-Doku unter Einstellungen) ergaenzt. Naechster Schritt eindeutig markiert: AP-09 (Produktion auf Hersteller-Rezeptur, kein Fallback, Warnung).
This commit is contained in:
parent
ca3eb663fe
commit
78679e0c55
67 changed files with 3523 additions and 101 deletions
126
tests/Feature/DeliveryTimeSettingsTest.php
Normal file
126
tests/Feature/DeliveryTimeSettingsTest.php
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
<?php
|
||||
|
||||
use App\Models\DeliveryTime;
|
||||
use App\User;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Tests\TestCase;
|
||||
|
||||
uses(TestCase::class, RefreshDatabase::class);
|
||||
|
||||
function deliveryTimeUser(int $adminLevel = 8): User
|
||||
{
|
||||
$user = User::query()->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');
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue