b2in/tests/Feature/Models/PartnerRelationshipsTest.php
2026-02-20 17:57:50 +01:00

81 lines
2.5 KiB
PHP

<?php
use App\Models\Hub;
use App\Models\Partner;
use App\Models\Product;
use App\Models\User;
test('partner belongs to hub', function () {
$hub = Hub::factory()->create();
$partner = Partner::factory()->create(['hub_id' => $hub->id]);
expect($partner->hub->id)->toBe($hub->id);
});
test('partner has many users', function () {
$partner = Partner::factory()->create();
User::factory()->count(3)->create(['partner_id' => $partner->id]);
expect($partner->users)->toHaveCount(3);
});
test('partner has many products', function () {
$partner = Partner::factory()->create();
Product::factory()->count(2)->create(['partner_id' => $partner->id]);
expect($partner->products)->toHaveCount(2);
});
test('partner can have parent partner (broker)', function () {
$broker = Partner::factory()->estateAgent()->create();
$customer = Partner::factory()->create(['parent_partner_id' => $broker->id]);
expect($customer->parentPartner->id)->toBe($broker->id);
expect($customer->broker()->first()->id)->toBe($broker->id);
});
test('partner can have child partners (customers)', function () {
$broker = Partner::factory()->estateAgent()->create();
Partner::factory()->count(2)->create(['parent_partner_id' => $broker->id]);
expect($broker->childPartners)->toHaveCount(2);
expect($broker->customers)->toHaveCount(2);
});
test('partner factory has retailer state', function () {
$partner = Partner::factory()->retailer()->create();
expect($partner->type->value)->toBe('Retailer');
});
test('partner factory has manufacturer state', function () {
$partner = Partner::factory()->manufacturer()->create();
expect($partner->type->value)->toBe('Manufacturer');
});
test('partner factory has estateAgent state', function () {
$partner = Partner::factory()->estateAgent()->create();
expect($partner->type->value)->toBe('Estate-Agent');
});
test('partner casts opening_hours to array', function () {
$hours = ['mon' => '09:00-18:00', 'tue' => '09:00-18:00'];
$partner = Partner::factory()->create(['opening_hours' => $hours]);
$partner->refresh();
expect($partner->opening_hours)->toBeArray();
expect($partner->opening_hours['mon'])->toBe('09:00-18:00');
});
test('partner casts specialties to array', function () {
$specialties = ['Küchen', 'Wohnzimmer', 'Schlafzimmer'];
$partner = Partner::factory()->create(['specialties' => $specialties]);
$partner->refresh();
expect($partner->specialties)->toBeArray();
expect($partner->specialties)->toHaveCount(3);
});