diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-22 20:38:55 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-22 20:38:55 +0200 |
| commit | c3973eabd33cd2dd561acd180c9e5a3a77eba6e4 (patch) | |
| tree | d3f5dead898d81775582ae8e4be368390b7300fe | |
| parent | 95081a322e45dc77c091767ed552c3d7df65e8c9 (diff) | |
internal/askcli: support priority:X and +tag args in ask add
| -rw-r--r-- | internal/askcli/command_info_add.go | 20 | ||||
| -rw-r--r-- | internal/askcli/command_info_add_test.go | 74 |
2 files changed, 92 insertions, 2 deletions
diff --git a/internal/askcli/command_info_add.go b/internal/askcli/command_info_add.go index 1c937f5..477ad62 100644 --- a/internal/askcli/command_info_add.go +++ b/internal/askcli/command_info_add.go @@ -36,9 +36,12 @@ func (d Dispatcher) handleAdd(ctx context.Context, args []string, stdout, stderr io.WriteString(stderr, "error: ask add requires a description\n") return 1, nil } - description := strings.Join(args[1:], " ") + modifiers, description := parseAddArgs(args[1:]) var outBuf bytes.Buffer - code, err := d.runner.Run(ctx, []string{"add", description}, nil, &outBuf, stderr) + taskArgs := []string{"add"} + taskArgs = append(taskArgs, modifiers...) + taskArgs = append(taskArgs, description) + code, err := d.runner.Run(ctx, taskArgs, nil, &outBuf, stderr) if code != 0 { return code, err } @@ -50,3 +53,16 @@ func (d Dispatcher) handleAdd(ctx context.Context, args []string, stdout, stderr io.WriteString(stdout, createdUUID+"\n") return 0, nil } + +func parseAddArgs(args []string) (modifiers []string, description string) { + for i, arg := range args { + if strings.HasPrefix(arg, "priority:") || strings.HasPrefix(arg, "+") || strings.HasPrefix(arg, "-") { + modifiers = append(modifiers, arg) + } else { + description = strings.Join(args[i:], " ") + return + } + } + description = strings.Join(args, " ") + return +} diff --git a/internal/askcli/command_info_add_test.go b/internal/askcli/command_info_add_test.go index 75ba013..47cd790 100644 --- a/internal/askcli/command_info_add_test.go +++ b/internal/askcli/command_info_add_test.go @@ -92,3 +92,77 @@ func TestHandleAdd_MultipleWords(t *testing.T) { t.Fatalf("capturedArgs = %v, want [add, Multi word description]", capturedArgs) } } + +func TestHandleAdd_WithPriority(t *testing.T) { + var capturedArgs []string + d := NewDispatcher(&spyRunner{runFn: func(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) (int, error) { + capturedArgs = args + io.WriteString(stdout, "Created task 123.\nUUID: uuid-priority") + return 0, nil + }}) + var stdout, stderr bytes.Buffer + code, _ := d.Dispatch(context.Background(), []string{"add", "priority:H", "Fix critical bug"}, nil, &stdout, &stderr) + if code != 0 { + t.Fatalf("add code = %d, want 0", code) + } + if len(capturedArgs) < 3 { + t.Fatalf("capturedArgs = %v, want at least [add, priority:H, Fix critical bug]", capturedArgs) + } + if capturedArgs[1] != "priority:H" { + t.Errorf("capturedArgs[1] = %s, want priority:H", capturedArgs[1]) + } + if capturedArgs[len(capturedArgs)-1] != "Fix critical bug" { + t.Errorf("last arg = %s, want 'Fix critical bug'", capturedArgs[len(capturedArgs)-1]) + } +} + +func TestHandleAdd_WithTag(t *testing.T) { + var capturedArgs []string + d := NewDispatcher(&spyRunner{runFn: func(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) (int, error) { + capturedArgs = args + io.WriteString(stdout, "Created task 123.\nUUID: uuid-tag") + return 0, nil + }}) + var stdout, stderr bytes.Buffer + code, _ := d.Dispatch(context.Background(), []string{"add", "+cli", "New feature"}, nil, &stdout, &stderr) + if code != 0 { + t.Fatalf("add code = %d, want 0", code) + } + if capturedArgs[1] != "+cli" { + t.Errorf("capturedArgs[1] = %s, want +cli", capturedArgs[1]) + } +} + +func TestHandleAdd_WithPriorityAndTag(t *testing.T) { + var capturedArgs []string + d := NewDispatcher(&spyRunner{runFn: func(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) (int, error) { + capturedArgs = args + io.WriteString(stdout, "Created task 123.\nUUID: uuid-combined") + return 0, nil + }}) + var stdout, stderr bytes.Buffer + code, _ := d.Dispatch(context.Background(), []string{"add", "priority:H", "+cli", "Complex task"}, nil, &stdout, &stderr) + if code != 0 { + t.Fatalf("add code = %d, want 0", code) + } + if capturedArgs[1] != "priority:H" || capturedArgs[2] != "+cli" { + t.Errorf("capturedArgs = %v, want [add, priority:H, +cli, Complex task]", capturedArgs) + } +} + +func TestParseAddArgs(t *testing.T) { + mods, desc := parseAddArgs([]string{"priority:H", "+cli", "Fix bug"}) + if desc != "Fix bug" || len(mods) != 2 { + t.Fatalf("parseAddArgs([\"priority:H\", \"+cli\", \"Fix bug\"]) = mods=%v, desc=%q, want mods=[priority:H, +cli], desc=\"Fix bug\"", mods, desc) + } + + mods, desc = parseAddArgs([]string{"Multi", "word", "description"}) + if desc != "Multi word description" || len(mods) != 0 { + t.Fatalf("parseAddArgs([\"Multi\", \"word\", \"description\"]) = mods=%v, desc=%q, want mods=[], desc=\"Multi word description\"", mods, desc) + } + + mods, desc = parseAddArgs([]string{"-deprecated", "Old task"}) + if desc != "Old task" || len(mods) != 1 || mods[0] != "-deprecated" { + t.Fatalf("parseAddArgs([\"-deprecated\", \"Old task\"]) = mods=%v, desc=%q", mods, desc) + } +} |
