Files
WMS/Modules/Company/Tests/Feature/CompanyStructureTest.php
T

71 lines
3.4 KiB
PHP

<?php
namespace Modules\Company\Tests\Feature;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Modules\Company\Models\Company;
use Modules\Company\Models\CompanyAddress;
use Modules\Company\Models\CompanyDirectorAssignment;
use Modules\Company\Models\CompanyDivision;
use Modules\Countries\Models\Country;
use Modules\Warehouse\app\Models\Warehouse;
use Tests\TestCase;
class CompanyStructureTest extends TestCase
{
use RefreshDatabase;
public function test_company_has_one_editable_country_backed_address(): void
{
$company = Company::create(['name' => 'Abbott Logistics Limited', 'billing_email' => 'billing@abbott.example']);
$country = Country::create(['alpha2' => 'GB', 'alpha3' => 'GBR', 'numeric' => '826', 'name' => 'United Kingdom', 'is_active' => true]);
$company->address()->create([
'line_1' => '1 Warehouse Way',
'locality' => 'London',
'postal_code' => 'SW1A 1AA',
'country_id' => $country->id,
]);
$company->address()->update(['line_1' => '2 Warehouse Way']);
$this->assertSame(1, CompanyAddress::count());
$this->assertSame('2 Warehouse Way', $company->fresh()->address->line_1);
$this->assertSame('United Kingdom', $company->fresh()->address->country->name);
}
public function test_company_division_has_address_users_directors_and_optional_warehouses(): void
{
$company = Company::create(['name' => 'Sentinel', 'billing_email' => 'sentinel@example.test']);
$country = Country::create(['alpha2' => 'GB', 'alpha3' => 'GBR', 'numeric' => '826', 'name' => 'United Kingdom', 'is_active' => true]);
$user = User::create(['company_id' => $company->id, 'name' => 'Jane Director', 'email' => 'jane@example.test', 'password' => 'password']);
$division = $company->divisions()->create(['name' => 'North Operations', 'code' => 'NORTH']);
$warehouse = Warehouse::create(['company_id' => $company->id, 'division_id' => $division->id, 'code' => 'NTH', 'name' => 'North DC']);
$division->address()->create([
'label' => 'Operating address',
'line_1' => 'North Road',
'locality' => 'Manchester',
'country_id' => $country->id,
]);
$division->users()->attach($user->id, ['company_id' => $company->id, 'role' => 'director', 'is_director' => true]);
CompanyDirectorAssignment::create(['company_id' => $company->id, 'company_division_id' => $division->id, 'user_id' => $user->id, 'coverage_type' => 'division']);
$this->assertTrue($company->fresh()->divisions()->exists());
$this->assertSame('North Operations', $warehouse->fresh()->division->name);
$this->assertSame('Manchester', $division->fresh()->address->locality);
$this->assertTrue($user->fresh()->divisions()->whereKey($division->id)->exists());
$this->assertTrue($user->fresh()->directorAssignments()->where('company_division_id', $division->id)->exists());
}
public function test_warehouse_can_remain_at_company_level_without_division(): void
{
$company = Company::create(['name' => 'Company Level Warehousing']);
$warehouse = Warehouse::create(['company_id' => $company->id, 'code' => 'MAIN', 'name' => 'Main Warehouse']);
$this->assertNull($warehouse->division_id);
$this->assertSame('Company Level Warehousing', $warehouse->company->name);
}
}