- Removed legacy stock management components including PurchaseForm, RestockForm, StockOpnameForm, and StockTransferForm. - Updated routes to reflect new structure under 'studio.stock' namespace for better organization. - Adjusted view files for stock management to align with the new routing and component structure. - Modified action routes in the ViewServiceProvider to ensure proper access control and navigation. - Cleaned up related test files to remove references to deleted components.
68 lines
2.0 KiB
PHP
68 lines
2.0 KiB
PHP
<?php
|
|
|
|
use App\Livewire\Studio\Stock\Restock\Index;
|
|
use App\Models\Perfume;
|
|
use App\Models\Restock;
|
|
use App\Models\Warehouse;
|
|
use Livewire\Livewire;
|
|
use Spatie\Permission\Models\Permission;
|
|
use Spatie\Permission\Models\Role;
|
|
|
|
beforeEach(function () {
|
|
$this->setupUser();
|
|
$this->outlet = $this->user->outlets->first();
|
|
|
|
// Create permissions
|
|
$permissions = [
|
|
'view restock',
|
|
'delete restock',
|
|
];
|
|
|
|
foreach ($permissions as $permission) {
|
|
Permission::firstOrCreate(['name' => $permission]);
|
|
}
|
|
|
|
$role = Role::create(['name' => 'Owner']);
|
|
$role->givePermissionTo($permissions);
|
|
$this->user->assignRole($role);
|
|
});
|
|
|
|
it('renders the restock index page', function () {
|
|
Livewire::actingAs($this->user)
|
|
->test(Index::class)
|
|
->assertStatus(200);
|
|
});
|
|
|
|
it('can delete a restock and reverse stock transfer', function () {
|
|
$warehouse = Warehouse::factory()->create();
|
|
$perfume = Perfume::factory()->create();
|
|
|
|
// Initial state: Warehouse 90, Outlet 10 (simulating after a restock of 10)
|
|
$warehouse->perfumes()->attach($perfume->id, ['stock' => 90]);
|
|
$this->outlet->perfumes()->attach($perfume->id, ['stock' => 10]);
|
|
|
|
$restock = Restock::create([
|
|
'warehouse_id' => $warehouse->id,
|
|
'outlet_id' => $this->outlet->id,
|
|
'restock_date' => now(),
|
|
'note' => 'To be deleted',
|
|
]);
|
|
|
|
$restock->items()->create([
|
|
'user_id' => $this->user->id,
|
|
'restockable_type' => Perfume::class,
|
|
'restockable_id' => $perfume->id,
|
|
'quantity' => 10,
|
|
]);
|
|
|
|
Livewire::actingAs($this->user)
|
|
->test(Index::class)
|
|
->call('delete', $restock->id);
|
|
|
|
$this->assertSoftDeleted('restocks', ['id' => $restock->id]);
|
|
|
|
// Verify Stock Reversal
|
|
$this->assertEquals(100, $warehouse->perfumes()->find($perfume->id)->pivot->stock); // 90 + 10
|
|
$this->assertEquals(0, $this->outlet->perfumes()->find($perfume->id)->pivot->stock); // 10 - 10
|
|
});
|