test(teams): cover metadata, flags, and helper behaviour

Verify command names, aliases, usage, and the expected flag set on
each new subcommand. Exercise ParseRepoUnits for default, single,
multiple, case-insensitive, and unknown inputs.
This commit is contained in:
Ross Golder 2026-07-30 10:26:25 +07:00
parent 6c40906cb4
commit 6c8cef6046
No known key found for this signature in database
GPG key ID: 253A7E508D2D59CD
4 changed files with 220 additions and 0 deletions

54
cmd/teams/create_test.go Normal file
View file

@ -0,0 +1,54 @@
// Copyright 2026 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package teams
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestCreateCommandMetadata(t *testing.T) {
cmd := &CmdTeamsCreate
assert.Equal(t, "create", cmd.Name)
for _, want := range []string{"add", "c"} {
assert.Contains(t, cmd.Aliases, want)
}
assert.Equal(t, "Create a new team", cmd.Usage)
assert.Equal(t, "<team-name>", cmd.ArgsUsage)
assert.NotNil(t, cmd.Action)
}
func TestCreateCommandFlags(t *testing.T) {
cmd := &CmdTeamsCreate
have := make(map[string]bool, len(cmd.Flags))
for _, flag := range cmd.Flags {
have[flag.Names()[0]] = true
}
for _, name := range []string{"org", "description", "permission", "can-create-repo", "all-repos", "units", "login", "output"} {
assert.True(t, have[name], "expected flag %q not found", name)
}
}
func TestCreateOrgFlagExists(t *testing.T) {
for _, flag := range CmdTeamsCreate.Flags {
if flag.Names()[0] == "org" {
return
}
}
t.Fatal("expected --org flag on create command")
}
func TestCreatePermissionFlagHasDefault(t *testing.T) {
for _, flag := range CmdTeamsCreate.Flags {
if flag.Names()[0] != "permission" {
continue
}
assert.NotNil(t, flag)
return
}
t.Fatal("expected --permission flag on create command")
}

38
cmd/teams/delete_test.go Normal file
View file

@ -0,0 +1,38 @@
// Copyright 2026 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package teams
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestDeleteCommandMetadata(t *testing.T) {
cmd := &CmdTeamsDelete
assert.Equal(t, "delete", cmd.Name)
for _, want := range []string{"rm", "remove"} {
assert.Contains(t, cmd.Aliases, want)
}
assert.Equal(t, "Delete a team", cmd.Usage)
assert.Equal(t, "<team-id>", cmd.ArgsUsage)
assert.NotNil(t, cmd.Action)
}
func TestDeleteCommandFlags(t *testing.T) {
cmd := &CmdTeamsDelete
have := make(map[string]bool, len(cmd.Flags))
for _, flag := range cmd.Flags {
have[flag.Names()[0]] = true
}
for _, name := range []string{"confirm", "login", "output"} {
assert.True(t, have[name], "expected flag %q not found", name)
}
}
func TestRequireTeamID(t *testing.T) {
assert.NotNil(t, RequireTeamID)
}

48
cmd/teams/edit_test.go Normal file
View file

@ -0,0 +1,48 @@
// Copyright 2026 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package teams
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestEditCommandMetadata(t *testing.T) {
cmd := &CmdTeamsEdit
assert.Equal(t, "edit", cmd.Name)
assert.Contains(t, cmd.Aliases, "update")
assert.Equal(t, "Edit a team", cmd.Usage)
assert.Equal(t, "<team-id>", cmd.ArgsUsage)
assert.NotNil(t, cmd.Action)
}
func TestEditCommandFlags(t *testing.T) {
cmd := &CmdTeamsEdit
have := make(map[string]bool, len(cmd.Flags))
for _, flag := range cmd.Flags {
have[flag.Names()[0]] = true
}
for _, name := range []string{"name", "description", "permission", "can-create-repo", "no-create-repo", "all-repos", "no-all-repos", "units", "login", "output"} {
assert.True(t, have[name], "expected flag %q not found", name)
}
}
func TestEditHasNegativeFlagPairs(t *testing.T) {
pairs := [][]string{
{"can-create-repo", "no-create-repo"},
{"all-repos", "no-all-repos"},
}
for _, pair := range pairs {
have := make(map[string]bool, 2)
for _, flag := range CmdTeamsEdit.Flags {
have[flag.Names()[0]] = true
}
for _, name := range pair {
assert.True(t, have[name], "expected --%s flag on edit command", name)
}
}
}

80
cmd/teams/list_test.go Normal file
View file

@ -0,0 +1,80 @@
// Copyright 2026 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package teams
import (
"testing"
gitea "gitea.dev/sdk"
"github.com/stretchr/testify/assert"
)
func TestListCommandMetadata(t *testing.T) {
cmd := &CmdTeamsList
assert.Equal(t, "list", cmd.Name)
assert.Contains(t, cmd.Aliases, "ls")
assert.Equal(t, "List teams in an organization", cmd.Usage)
assert.Equal(t, "List all teams in the specified organization", cmd.Description)
assert.NotNil(t, cmd.Action)
}
func TestListCommandFlags(t *testing.T) {
cmd := &CmdTeamsList
have := make(map[string]bool, len(cmd.Flags))
for _, flag := range cmd.Flags {
have[flag.Names()[0]] = true
}
for _, name := range []string{"page", "limit", "search", "login", "output"} {
assert.True(t, have[name], "expected flag %q not found", name)
}
}
func TestParseRepoUnits(t *testing.T) {
tests := []struct {
name string
input []string
expected []gitea.RepoUnitType
}{
{
name: "empty input yields default units",
input: nil,
expected: []gitea.RepoUnitType{gitea.RepoUnitCode, gitea.RepoUnitIssues, gitea.RepoUnitPulls, gitea.RepoUnitReleases},
},
{
name: "single code unit",
input: []string{"code"},
expected: []gitea.RepoUnitType{gitea.RepoUnitCode},
},
{
name: "multiple units",
input: []string{"code", "issues", "wiki"},
expected: []gitea.RepoUnitType{
gitea.RepoUnitCode,
gitea.RepoUnitIssues,
gitea.RepoUnitWiki,
},
},
{
name: "case-insensitive",
input: []string{"CODE", "IsSuEs"},
expected: []gitea.RepoUnitType{
gitea.RepoUnitCode,
gitea.RepoUnitIssues,
},
},
{
name: "unknown unit is silently dropped",
input: []string{"code", "bogus"},
expected: []gitea.RepoUnitType{gitea.RepoUnitCode},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert.Equal(t, tt.expected, ParseRepoUnits(tt.input))
})
}
}