seed(RolesAndPermissionsSeeder::class); }); test('assigns customer role to active roleless users', function () { $stuck = User::factory()->create(['is_active' => true]); $this->artisan('users:backfill-portal-role')->assertSuccessful(); expect($stuck->fresh()->hasRole('customer'))->toBeTrue(); }); test('leaves users that already have a role untouched', function () { $customer = User::factory()->create(['is_active' => true]); $customer->assignRole('customer'); $apiOnly = User::factory()->create(['is_active' => true]); $apiOnly->assignRole('api-only'); $this->artisan('users:backfill-portal-role')->assertSuccessful(); expect($customer->fresh()->getRoleNames()->all())->toBe(['customer']) ->and($apiOnly->fresh()->getRoleNames()->all())->toBe(['api-only']); }); test('skips inactive roleless users', function () { $inactive = User::factory()->create(['is_active' => false]); $this->artisan('users:backfill-portal-role')->assertSuccessful(); expect($inactive->fresh()->roles()->exists())->toBeFalse(); }); test('dry-run assigns nothing', function () { $stuck = User::factory()->create(['is_active' => true]); $this->artisan('users:backfill-portal-role', ['--dry-run' => true])->assertSuccessful(); expect($stuck->fresh()->roles()->exists())->toBeFalse(); });