handle method

  1. @override
Future<void> handle(
  1. List<String> args
)
override

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;
}