feat(porttracker): add test batch-update and batch-map commands
This commit is contained in:
@@ -131,10 +131,124 @@ public static class TestCommands
|
||||
testCommand.Add(showCmd);
|
||||
testCommand.Add(updateCmd);
|
||||
testCommand.Add(mapCmd);
|
||||
testCommand.Add(CreateBatchUpdate(dbOption));
|
||||
testCommand.Add(CreateBatchMap(dbOption));
|
||||
|
||||
return testCommand;
|
||||
}
|
||||
|
||||
private static Command CreateBatchUpdate(Option<string> dbOption)
|
||||
{
|
||||
var cmd = new Command("batch-update", "Bulk update test status");
|
||||
var idsOpt = BatchFilters.IdsOption();
|
||||
var moduleOpt = BatchFilters.ModuleOption();
|
||||
var statusOpt = BatchFilters.StatusOption();
|
||||
var executeOpt = BatchFilters.ExecuteOption();
|
||||
var setStatus = new Option<string>("--set-status") { Description = "New status to set", Required = true };
|
||||
var setNotes = new Option<string?>("--set-notes") { Description = "Notes to set" };
|
||||
|
||||
cmd.Add(idsOpt);
|
||||
cmd.Add(moduleOpt);
|
||||
cmd.Add(statusOpt);
|
||||
cmd.Add(executeOpt);
|
||||
cmd.Add(setStatus);
|
||||
cmd.Add(setNotes);
|
||||
|
||||
cmd.SetAction(parseResult =>
|
||||
{
|
||||
var dbPath = parseResult.GetValue(dbOption)!;
|
||||
var ids = parseResult.GetValue(idsOpt);
|
||||
var module = parseResult.GetValue(moduleOpt);
|
||||
var status = parseResult.GetValue(statusOpt);
|
||||
var execute = parseResult.GetValue(executeOpt);
|
||||
var newStatus = parseResult.GetValue(setStatus)!;
|
||||
var notes = parseResult.GetValue(setNotes);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(ids) && module is null && string.IsNullOrWhiteSpace(status))
|
||||
{
|
||||
Console.WriteLine("Error: at least one filter (--ids, --module, --status) is required.");
|
||||
return;
|
||||
}
|
||||
|
||||
using var db = new Database(dbPath);
|
||||
var (whereClause, filterParams) = BatchFilters.BuildWhereClause(ids, module, status);
|
||||
|
||||
var setClauses = new List<string> { "status = @newStatus" };
|
||||
var updateParams = new List<(string, object?)> { ("@newStatus", newStatus) };
|
||||
if (notes is not null)
|
||||
{
|
||||
setClauses.Add("notes = @newNotes");
|
||||
updateParams.Add(("@newNotes", notes));
|
||||
}
|
||||
|
||||
BatchFilters.PreviewOrExecute(db, "unit_tests",
|
||||
"id, name, status, module_id, notes",
|
||||
string.Join(", ", setClauses), updateParams,
|
||||
whereClause, filterParams, execute);
|
||||
});
|
||||
|
||||
return cmd;
|
||||
}
|
||||
|
||||
private static Command CreateBatchMap(Option<string> dbOption)
|
||||
{
|
||||
var cmd = new Command("batch-map", "Bulk map tests to .NET test methods");
|
||||
var idsOpt = BatchFilters.IdsOption();
|
||||
var moduleOpt = BatchFilters.ModuleOption();
|
||||
var statusOpt = BatchFilters.StatusOption();
|
||||
var executeOpt = BatchFilters.ExecuteOption();
|
||||
var setProject = new Option<string?>("--set-project") { Description = ".NET test project" };
|
||||
var setClass = new Option<string?>("--set-class") { Description = ".NET test class" };
|
||||
var setMethod = new Option<string?>("--set-method") { Description = ".NET test method" };
|
||||
|
||||
cmd.Add(idsOpt);
|
||||
cmd.Add(moduleOpt);
|
||||
cmd.Add(statusOpt);
|
||||
cmd.Add(executeOpt);
|
||||
cmd.Add(setProject);
|
||||
cmd.Add(setClass);
|
||||
cmd.Add(setMethod);
|
||||
|
||||
cmd.SetAction(parseResult =>
|
||||
{
|
||||
var dbPath = parseResult.GetValue(dbOption)!;
|
||||
var ids = parseResult.GetValue(idsOpt);
|
||||
var module = parseResult.GetValue(moduleOpt);
|
||||
var status = parseResult.GetValue(statusOpt);
|
||||
var execute = parseResult.GetValue(executeOpt);
|
||||
var project = parseResult.GetValue(setProject);
|
||||
var cls = parseResult.GetValue(setClass);
|
||||
var method = parseResult.GetValue(setMethod);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(ids) && module is null && string.IsNullOrWhiteSpace(status))
|
||||
{
|
||||
Console.WriteLine("Error: at least one filter (--ids, --module, --status) is required.");
|
||||
return;
|
||||
}
|
||||
if (project is null && cls is null && method is null)
|
||||
{
|
||||
Console.WriteLine("Error: at least one of --set-project, --set-class, --set-method is required.");
|
||||
return;
|
||||
}
|
||||
|
||||
using var db = new Database(dbPath);
|
||||
var (whereClause, filterParams) = BatchFilters.BuildWhereClause(ids, module, status);
|
||||
|
||||
var setClauses = new List<string>();
|
||||
var updateParams = new List<(string, object?)>();
|
||||
if (project is not null) { setClauses.Add("dotnet_project = @setProject"); updateParams.Add(("@setProject", project)); }
|
||||
if (cls is not null) { setClauses.Add("dotnet_class = @setClass"); updateParams.Add(("@setClass", cls)); }
|
||||
if (method is not null) { setClauses.Add("dotnet_method = @setMethod"); updateParams.Add(("@setMethod", method)); }
|
||||
|
||||
BatchFilters.PreviewOrExecute(db, "unit_tests",
|
||||
"id, name, status, dotnet_project, dotnet_class, dotnet_method",
|
||||
string.Join(", ", setClauses), updateParams,
|
||||
whereClause, filterParams, execute);
|
||||
});
|
||||
|
||||
return cmd;
|
||||
}
|
||||
|
||||
private static string Truncate(string? s, int maxLen)
|
||||
{
|
||||
if (s is null) return "";
|
||||
|
||||
Reference in New Issue
Block a user