forgetCachedPermissions(); Role::create(['name' => 'Admin']); Role::create(['name' => 'Retailer']); $permission = Permission::firstOrCreate(['name' => 'curate products']); Role::findByName('Admin')->givePermissionTo($permission); }); test('admin can view any partner', function () { $admin = User::factory()->create(); $admin->assignRole('Admin'); expect((new PartnerPolicy)->viewAny($admin))->toBeTrue(); }); test('non-admin cannot view any partner', function () { $retailer = User::factory()->create(); $retailer->assignRole('Retailer'); expect((new PartnerPolicy)->viewAny($retailer))->toBeFalse(); }); test('admin can view any specific partner', function () { $admin = User::factory()->create(); $admin->assignRole('Admin'); $partner = Partner::factory()->create(); expect((new PartnerPolicy)->view($admin, $partner))->toBeTrue(); }); test('partner user can view own partner', function () { $partner = Partner::factory()->create(); $user = User::factory()->create(['partner_id' => $partner->id]); $user->assignRole('Retailer'); expect((new PartnerPolicy)->view($user, $partner))->toBeTrue(); }); test('partner user cannot view other partner', function () { $otherPartner = Partner::factory()->create(); $myPartner = Partner::factory()->create(); $user = User::factory()->create(['partner_id' => $myPartner->id]); $user->assignRole('Retailer'); expect((new PartnerPolicy)->view($user, $otherPartner))->toBeFalse(); }); test('admin can update any partner', function () { $admin = User::factory()->create(); $admin->assignRole('Admin'); $partner = Partner::factory()->create(); expect((new PartnerPolicy)->update($admin, $partner))->toBeTrue(); }); test('partner user can update own partner', function () { $partner = Partner::factory()->create(); $user = User::factory()->create(['partner_id' => $partner->id]); $user->assignRole('Retailer'); expect((new PartnerPolicy)->update($user, $partner))->toBeTrue(); }); test('partner user cannot update other partner', function () { $otherPartner = Partner::factory()->create(); $myPartner = Partner::factory()->create(); $user = User::factory()->create(['partner_id' => $myPartner->id]); $user->assignRole('Retailer'); expect((new PartnerPolicy)->update($user, $otherPartner))->toBeFalse(); }); test('admin can curate products', function () { $admin = User::factory()->create(); $admin->assignRole('Admin'); expect((new PartnerPolicy)->curateProducts($admin))->toBeTrue(); }); test('retailer cannot curate products', function () { $retailer = User::factory()->create(); $retailer->assignRole('Retailer'); expect((new PartnerPolicy)->curateProducts($retailer))->toBeFalse(); });