updateTesterPubspec static method

Future<void> updateTesterPubspec(
  1. String testerDir,
  2. String testerName,
  3. String packageName,
  4. bool verbose,
)

Implementation

static Future<void> updateTesterPubspec(
  String testerDir,
  String testerName,
  String packageName,
  bool verbose,
) async {
  final pubspecFile = File(path.join(testerDir, Constants.pubspecFileName));
  if (!pubspecFile.existsSync()) {
    if (verbose) {
      stdout.writeln(
        '${Constants.errorMessage} pubspec.yaml not found in tester',
      );
    }
    return;
  }

  // Replace the entire content with our template content
  final root = CopyUtils.findTemplatePath();
  final templatePath = path.join(
    root,
    'templates',
    Constants.baseKitTesterTemplate,
    Constants.pubspecFileName,
  );
  final templateFile = File(templatePath);

  String content;
  if (templateFile.existsSync()) {
    content = await templateFile.readAsString();
    // Update project name
    content = content.replaceAll(
      'name: base_kit_tester',
      'name: $testerName',
    );
    // Update package dependency
    content = content.replaceAll('base_kit_package:', '$packageName:');
    content = content.replaceAll(
      'path: ../base_kit_package',
      'path: ../$packageName',
    );
  } else {
    // Fallback to original content if template not found
    content = await pubspecFile.readAsString();
    content = content.replaceAll(
      'name: base_kit_tester',
      'name: $testerName',
    );

    // Add package dependency if it doesn't exist
    if (!content.contains('$packageName:')) {
      final lines = content.split('\n');
      final dependenciesIndex = lines.indexWhere(
        (line) => line.trim() == 'dependencies:',
      );

      if (dependenciesIndex != -1) {
        // Add package dependency after flutter dependency
        final flutterIndex = lines.indexWhere(
          (line) => line.trim().startsWith('flutter:'),
          dependenciesIndex,
        );

        if (flutterIndex != -1) {
          lines.insert(flutterIndex + 1, '  $packageName:');
          lines.insert(flutterIndex + 2, '    path: ../$packageName');
        } else {
          // If flutter dependency not found, add after dependencies:
          lines.insert(dependenciesIndex + 1, '  $packageName:');
          lines.insert(dependenciesIndex + 2, '    path: ../$packageName');
        }

        content = lines.join('\n');
      }
    }
  }

  await pubspecFile.writeAsString(content);
  if (verbose) {
    stdout.writeln('${Constants.updateMessage} Updated tester pubspec.yaml');
  }
}