Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion internal/commands/boards.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ type BoardOutput struct {
}

func (c *BoardsCmd) Run(args []string) error {
projectID, _, err := getProjectID(args)
projectID, _, err := getProjectID(args, 0)
if err != nil {
return err
}
Expand Down
4 changes: 2 additions & 2 deletions internal/commands/campfires.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ type CampfireLineBrief struct {
}

func (c *CampfireCmd) Run(args []string) error {
projectID, _, err := getProjectID(args)
projectID, _, err := getProjectID(args, 0)
if err != nil {
return err
}
Expand Down Expand Up @@ -116,7 +116,7 @@ type CampfirePostOutput struct {
}

func (c *CampfirePostCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 0)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion internal/commands/card.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ type CardDetailOutput struct {
}

func (c *CardCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 1)
if err != nil {
return err
}
Expand Down
8 changes: 4 additions & 4 deletions internal/commands/cards.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ type CardsOutput struct {
}

func (c *CardsCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 1)
if err != nil {
return err
}
Expand Down Expand Up @@ -157,7 +157,7 @@ type ColumnsOutput struct {
}

func (c *ColumnsCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 1)
if err != nil {
return err
}
Expand Down Expand Up @@ -212,7 +212,7 @@ type CardCreateOutput struct {
}

func (c *CardCreateCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 1)
if err != nil {
return err
}
Expand Down Expand Up @@ -305,7 +305,7 @@ type CardUpdateOutput struct {
}

func (c *CardUpdateCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 1)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion internal/commands/comments.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ type CommentAddOutput struct {
}

func (c *CommentAddCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 1)
if err != nil {
return err
}
Expand Down
6 changes: 3 additions & 3 deletions internal/commands/documents.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ type DocOutputBrief struct {
}

func (c *DocsCmd) Run(args []string) error {
projectID, _, err := getProjectID(args)
projectID, _, err := getProjectID(args, 0)
if err != nil {
return err
}
Expand Down Expand Up @@ -127,7 +127,7 @@ type DocDetailOutput struct {
}

func (c *DocCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 1)
if err != nil {
return err
}
Expand Down Expand Up @@ -196,7 +196,7 @@ type DocCreateOutput struct {
}

func (c *DocCreateCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 0)
if err != nil {
return err
}
Expand Down
4 changes: 2 additions & 2 deletions internal/commands/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ type EventsProjectOutput struct {
}

func (c *EventsProjectCmd) Run(args []string) error {
projectID, _, err := getProjectID(args)
projectID, _, err := getProjectID(args, 0)
if err != nil {
return err
}
Expand Down Expand Up @@ -152,7 +152,7 @@ type EventsRecordingOutput struct {
}

func (c *EventsRecordingCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 1)
if err != nil {
return err
}
Expand Down
172 changes: 172 additions & 0 deletions internal/commands/getprojectid_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
package commands

import (
"os"
"path/filepath"
"testing"
)

func TestGetProjectIDWithConfig(t *testing.T) {
// Create temp dir with .basecamp.yml
tmpDir := t.TempDir()
os.WriteFile(filepath.Join(tmpDir, ".basecamp.yml"), []byte("project_id: 28395586\n"), 0644)

origDir, _ := os.Getwd()
defer os.Chdir(origDir)
os.Chdir(tmpDir)

tests := []struct {
name string
args []string
minPositionalArgs int
wantProjectID string
wantRemaining []string
}{
{
name: "no args, minPositional=0",
args: []string{},
minPositionalArgs: 0,
wantProjectID: "28395586",
wantRemaining: []string{},
},
{
name: "board_id only, minPositional=1",
args: []string{"5437262823"},
minPositionalArgs: 1,
wantProjectID: "28395586",
wantRemaining: []string{"5437262823"},
},
{
name: "board_id with flags, minPositional=1",
args: []string{"5437262823", "--column", "Triage"},
minPositionalArgs: 1,
wantProjectID: "28395586",
wantRemaining: []string{"5437262823", "--column", "Triage"},
},
{
name: "two positional args, minPositional=2",
args: []string{"111", "222", "--to", "Done"},
minPositionalArgs: 2,
wantProjectID: "28395586",
wantRemaining: []string{"111", "222", "--to", "Done"},
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
projectID, remaining, err := getProjectID(tt.args, tt.minPositionalArgs)
if err != nil {
t.Errorf("getProjectID() unexpected error: %v", err)
return
}
if projectID != tt.wantProjectID {
t.Errorf("getProjectID() projectID = %v, want %v", projectID, tt.wantProjectID)
}
if len(remaining) != len(tt.wantRemaining) {
t.Errorf("getProjectID() remaining = %v, want %v", remaining, tt.wantRemaining)
}
})
}
}

func TestGetProjectIDWithoutConfig(t *testing.T) {
// Use a temp dir with NO .basecamp.yml
tmpDir := t.TempDir()

origDir, _ := os.Getwd()
defer os.Chdir(origDir)
os.Chdir(tmpDir)

tests := []struct {
name string
args []string
minPositionalArgs int
wantProjectID string
wantRemaining []string
wantErr bool
}{
{
name: "project_id and board_id, minPositional=1",
args: []string{"28395586", "5437262823"},
minPositionalArgs: 1,
wantProjectID: "28395586",
wantRemaining: []string{"5437262823"},
},
{
name: "project_id, board_id, and flags, minPositional=1",
args: []string{"28395586", "5437262823", "--column", "Triage"},
minPositionalArgs: 1,
wantProjectID: "28395586",
wantRemaining: []string{"5437262823", "--column", "Triage"},
},
{
name: "project_id only, minPositional=0",
args: []string{"28395586"},
minPositionalArgs: 0,
wantProjectID: "28395586",
wantRemaining: []string{},
},
{
name: "three positional args, minPositional=2",
args: []string{"28395586", "111", "222", "--to", "Done"},
minPositionalArgs: 2,
wantProjectID: "28395586",
wantRemaining: []string{"111", "222", "--to", "Done"},
},
// Error cases: not enough positional args
{
name: "no args, minPositional=0",
args: []string{},
minPositionalArgs: 0,
wantErr: true,
},
{
name: "no args, minPositional=1",
args: []string{},
minPositionalArgs: 1,
wantErr: true,
},
{
name: "only board_id, no project_id, minPositional=1",
args: []string{"5437262823"},
minPositionalArgs: 1,
wantErr: true,
},
{
name: "board_id with flags but no project_id, minPositional=1",
args: []string{"5437262823", "--column", "TRIAGE"},
minPositionalArgs: 1,
wantErr: true,
},
{
name: "only flags no positional args, minPositional=0",
args: []string{"--subject", "Hello", "--content", "World"},
minPositionalArgs: 0,
wantErr: true,
},
{
name: "one positional with flags, minPositional=2",
args: []string{"111", "--to", "Done"},
minPositionalArgs: 2,
wantErr: true,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
projectID, remaining, err := getProjectID(tt.args, tt.minPositionalArgs)
if (err != nil) != tt.wantErr {
t.Errorf("getProjectID() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !tt.wantErr {
if projectID != tt.wantProjectID {
t.Errorf("getProjectID() projectID = %v, want %v", projectID, tt.wantProjectID)
}
if len(remaining) != len(tt.wantRemaining) {
t.Errorf("getProjectID() remaining = %v, want %v", remaining, tt.wantRemaining)
}
}
})
}
}
10 changes: 5 additions & 5 deletions internal/commands/message_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ type MessageTypeBrief struct {
}

func (c *MessageTypesCmd) Run(args []string) error {
projectID, _, err := getProjectID(args)
projectID, _, err := getProjectID(args, 0)
if err != nil {
return err
}
Expand Down Expand Up @@ -83,7 +83,7 @@ type MessageTypeDetailOutput struct {
}

func (c *MessageTypeCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 1)
if err != nil {
return err
}
Expand Down Expand Up @@ -129,7 +129,7 @@ type MessageTypeCreateOutput struct {
}

func (c *MessageTypeCreateCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 0)
if err != nil {
return err
}
Expand Down Expand Up @@ -200,7 +200,7 @@ type MessageTypeUpdateOutput struct {
}

func (c *MessageTypeUpdateCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 1)
if err != nil {
return err
}
Expand Down Expand Up @@ -274,7 +274,7 @@ type MessageTypeDeleteOutput struct {
}

func (c *MessageTypeDeleteCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 1)
if err != nil {
return err
}
Expand Down
6 changes: 3 additions & 3 deletions internal/commands/messages.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ type MessageOutputBrief struct {
}

func (c *MessagesCmd) Run(args []string) error {
projectID, _, err := getProjectID(args)
projectID, _, err := getProjectID(args, 0)
if err != nil {
return err
}
Expand Down Expand Up @@ -128,7 +128,7 @@ type MessageDetailOutput struct {
}

func (c *MessageCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 1)
if err != nil {
return err
}
Expand Down Expand Up @@ -197,7 +197,7 @@ type MessageCreateOutput struct {
}

func (c *MessageCreateCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 0)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion internal/commands/move.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ type CardTableForMove struct {
}

func (c *MoveCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 2)
if err != nil {
return err
}
Expand Down
4 changes: 2 additions & 2 deletions internal/commands/people.go
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ type PeopleProjectOutput struct {
}

func (c *PeopleProjectCmd) Run(args []string) error {
projectID, _, err := getProjectID(args)
projectID, _, err := getProjectID(args, 0)
if err != nil {
return err
}
Expand Down Expand Up @@ -264,7 +264,7 @@ type ProjectAccessOutput struct {
}

func (c *ProjectAccessCmd) Run(args []string) error {
projectID, remaining, err := getProjectID(args)
projectID, remaining, err := getProjectID(args, 0)
if err != nil {
return err
}
Expand Down
Loading
Loading