[FEAT] 優化後端帳號權限邏輯、開發商品管理功能及聯絡資訊 UI 改版
All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 1m2s

This commit is contained in:
2026-03-27 13:43:08 +08:00
parent 8ec5473ec7
commit 740eaa30b7
22 changed files with 1783 additions and 615 deletions

View File

@@ -0,0 +1,109 @@
<?php
namespace Tests\Feature\Admin;
use Tests\TestCase;
use App\Models\System\Company;
use App\Models\System\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
class CompanySettingsTest extends TestCase
{
use RefreshDatabase;
protected $admin;
protected function setUp(): void
{
parent::setUp();
// Setup a system admin with permissions
$this->admin = User::factory()->create(['company_id' => null]);
$this->admin->givePermissionTo(Permission::create(['name' => 'menu.permissions.companies']));
}
public function test_can_update_company_settings()
{
$company = Company::factory()->create();
$settings = [
'enable_material_code' => true,
'enable_points' => true,
];
$response = $this->actingAs($this->admin)
->put(route('admin.permission.companies.update', $company->id), [
'name' => 'Updated Name',
'code' => $company->code,
'status' => 1,
'settings' => $settings,
]);
$response->assertRedirect();
$this->assertDatabaseHas('companies', [
'id' => $company->id,
'name' => 'Updated Name',
]);
$updatedCompany = Company::find($company->id);
$this->assertEquals($settings, $updatedCompany->settings);
}
public function test_can_create_company_with_settings()
{
$settings = [
'enable_material_code' => false,
'enable_points' => true,
];
$response = $this->actingAs($this->admin)
->post(route('admin.permission.companies.store'), [
'name' => 'New Company',
'code' => 'NEW001',
'status' => 1,
'settings' => $settings,
]);
$response->assertRedirect();
$company = Company::where('code', 'NEW001')->first();
$this->assertNotNull($company);
$this->assertEquals($settings, $company->settings);
}
public function test_can_reuse_code_after_deletion()
{
$code = 'REUSE001';
$company = Company::factory()->create(['code' => $code]);
// Delete the company
$response = $this->actingAs($this->admin)
->delete(route('admin.permission.companies.destroy', $company->id));
$response->assertRedirect();
$this->assertSoftDeleted('companies', ['id' => $company->id]);
// The original code should be freed (renamed in the DB)
$this->assertDatabaseMissing('companies', [
'id' => $company->id,
'code' => $code,
'deleted_at' => null
]);
// Should be able to create a new company with the same code
$response = $this->actingAs($this->admin)
->post(route('admin.permission.companies.store'), [
'name' => 'Brand New Company',
'code' => $code,
'status' => 1,
]);
$response->assertRedirect();
$this->assertDatabaseHas('companies', [
'name' => 'Brand New Company',
'code' => $code,
'deleted_at' => null
]);
}
}