str_contains(basename($path), 'client_sms') || str_contains(basename($path), 'sms_global_optouts'), )); // Модуль продаж (`sales_sms`) — чужая работа, сюда не берём. return array_values(array_filter( $mine, fn (string $path) => ! str_contains(basename($path), 'sales_sms'), )); } it('все миграции модуля переживают повторный запуск', function () { $files = clientSmsMigrationFiles(); expect($files)->not->toBeEmpty(); foreach ($files as $path) { $migration = require $path; try { $migration->up(); } catch (Throwable $e) { $this->fail(sprintf( "Миграция %s не переживает повторный запуск:\n%s", basename($path), $e->getMessage(), )); } } });