From ff99ba59faac37643554ed3e12cc8a55e84e57c3 Mon Sep 17 00:00:00 2001 From: Robin Olsen Date: Thu, 12 Mar 2026 14:13:22 +0100 Subject: [PATCH] simplify the logic a bit and add suggestions to repl and cli --- cmd/pm/tasks/dependencyManagement.go | 69 +++++++++++--------------- internal/commands/issues/completion.go | 2 +- pkg/repl/suggestions.go | 1 + 3 files changed, 32 insertions(+), 40 deletions(-) diff --git a/cmd/pm/tasks/dependencyManagement.go b/cmd/pm/tasks/dependencyManagement.go index 304dbd3..f4b521f 100644 --- a/cmd/pm/tasks/dependencyManagement.go +++ b/cmd/pm/tasks/dependencyManagement.go @@ -25,6 +25,7 @@ type DependencyManagementTask struct { done bool app *App setupIssue *Issue + depIssues []*Issue } func NewDependencyManagementTask(app *App) *DependencyManagementTask { @@ -62,7 +63,7 @@ func (t *DependencyManagementTask) Setup(ctx context.Context) error { return err } - depIssues := []*Issue{ + t.depIssues = []*Issue{ NewIssueBuilder(). WithTitle("Setup database connection"). WithDescription("Configure database connection pool."). @@ -70,6 +71,13 @@ func (t *DependencyManagementTask) Setup(ctx context.Context) error { WithStatus(models.StatusOpen). WithIssueType(models.TypeTask). Build(), + NewIssueBuilder(). + WithTitle("Create home page for the website"). + WithDescription("Create a page for the website."). + WithPriority(2). + WithStatus(models.StatusOpen). + WithIssueType(models.TypeTask). + Build(), NewIssueBuilder(). WithTitle("Implement Authentication System"). WithDescription("Add login/logout functionality. Depends on 'Setup database connection' issue."). @@ -84,13 +92,6 @@ func (t *DependencyManagementTask) Setup(ctx context.Context) error { WithStatus(models.StatusOpen). WithIssueType(models.TypeTask). Build(), - NewIssueBuilder(). - WithTitle("Create home page for the website"). - WithDescription("Create a page for the website."). - WithPriority(2). - WithStatus(models.StatusOpen). - WithIssueType(models.TypeTask). - Build(), NewIssueBuilder(). WithTitle("Create user profile page"). WithDescription("Frontend user profile page. Depends on 'Create home page for the website' issue."). @@ -107,7 +108,7 @@ func (t *DependencyManagementTask) Setup(ctx context.Context) error { Build(), } - if err := t.app.Issues.CreateIssues(ctx, depIssues, ""); err != nil { + if err := t.app.Issues.CreateIssues(ctx, t.depIssues, ""); err != nil { return err } @@ -125,46 +126,36 @@ func (t *DependencyManagementTask) Validate(ctx context.Context) ValidationFeedb taskIssue := t.setupIssue issues, err := FetchIssues(ctx, t.app, t.setupIssue) if err != nil { - return expect.ValidationFeedback + return expect.Fatal("Could not fetch issues") } - - - for _, issue := range issues { - if issue.Title == "Implement Authentication System" || issue.Title == "Add user management operations" || issue.Title == "Create user profile page" || issue.Title == "Create about page" { - expect.Equal(issue.Status, models.StatusBlocked, - fmt.Sprintf("%s status", issue.Title)) + for _, depIssue := range t.depIssues[2:] { + if issue.Title == depIssue.Title { + expect.Equal(issue.Status, models.StatusBlocked, + fmt.Sprintf("%s status", issue.Title)) + } + } + + for _, foundationalIssue := range t.depIssues[:2] { + if issue.Title == foundationalIssue.Title { + expect.Equal(issue.Priority, 3, + fmt.Sprintf("%s priority", issue.Title)) + expect.Equal(issue.Assignee, "Me", + fmt.Sprintf("%s assignee", issue.Title)) + expect.Equal(issue.Status, models.StatusInProgress, + fmt.Sprintf("%s status", issue.Title)) + } } } - if expect.Errors() != nil { + if !expect.Valid() { return expect.ValidationFeedback } - for _, issue := range issues { - if issue.Title == "Setup database connection" || issue.Title == "Create home page for the website" { - expect.Equal(issue.Priority, 3, - fmt.Sprintf("Priority of '%s' should be 3 (high)", issue.Title)) - expect.Equal(issue.Assignee, "Me", - fmt.Sprintf("Assignee of '%s' should be 'Me'", issue.Title)) - expect.Equal(issue.Status, models.StatusInProgress, - fmt.Sprintf("Status of '%s' should be In Progress", issue.Title)) - } - } - - if expect.Errors() != nil { - return expect.ValidationFeedback - } - - expect.Assert(taskIssue.Status == models.StatusClosed, - fmt.Sprintf("'%s' should be set to closed", taskIssue.Title)) - - - - - + expect.Equal(taskIssue.Status, models.StatusClosed, + fmt.Sprintf("%s", taskIssue.Title)) return expect.Complete() } diff --git a/internal/commands/issues/completion.go b/internal/commands/issues/completion.go index 19c8a35..1ab4670 100644 --- a/internal/commands/issues/completion.go +++ b/internal/commands/issues/completion.go @@ -11,7 +11,7 @@ import ( // Variables for completion options and functions. var ( typeOptions = []string{"bug", "feature", "task", "chore"} - statusOptions = []string{"open", "closed", "in_progress", "ready_to_sprint"} + statusOptions = []string{"open", "closed", "in_progress", "blocked", "ready_to_sprint"} priorityRange = []string{"0", "1", "2", "3", "4"} ) diff --git a/pkg/repl/suggestions.go b/pkg/repl/suggestions.go index 8785944..4824a66 100644 --- a/pkg/repl/suggestions.go +++ b/pkg/repl/suggestions.go @@ -79,6 +79,7 @@ var statusValues = []prompt.Suggest{ {Text: "open", Description: "Open status"}, {Text: "closed", Description: "Closed status"}, {Text: "in_progress", Description: "In progress status"}, + {Text: "blocked", Description: "Blocked status"}, {Text: "ready_to_sprint", Description: "Ready to sprint status"}, }