handle method
Called automatically before executing the command. You can override to do pre-validation or setup.
Implementation
@override
Future<void> handle(List<String> args) async {
final input = argResults?['name'] as String?;
if (input == null || input.trim().isEmpty) {
logger.error('❌ Usage: khadem make:test --name=UserTest');
exitCode = 1;
return;
}
final isUnit = argResults?['unit'] as bool? ?? false;
final parts = CliNaming.splitFolderAndName(input);
final folder = parts.folder;
final rawName = parts.name;
final className = CliNaming.ensureSuffix(
CliNaming.toPascalCase(rawName),
'Test',
);
final fileName =
'${CliNaming.toSnakeCase(className.replaceAll('Test', ''))}_test.dart';
final baseFolder = isUnit ? 'test/unit' : 'test/feature';
final relativePath = folder.isEmpty
? '$baseFolder/$fileName'
: '$baseFolder/$folder/$fileName';
final file = File(relativePath);
if (await file.exists()) {
logger.error('❌ Test "$fileName" already exists at "$relativePath"');
exitCode = 1;
return;
}
await file.create(recursive: true);
await file.writeAsString(_stub(className));
logger.info('✅ Test "$className" created at "$relativePath"');
exitCode = 0;
}