gitea.tea/cmd/collaborators/create_test.go
Ross Golder 6f8f7c373f
test(collaborators): add test coverage for all subcommands
Cover the same surface as the deploy-keys tests: command metadata
(name, aliases, usage, description), expected flag set, defaults
(permission=write, confirm flag), and argument requirements. Tests
exercise option-construction logic and the confirmation-prompt
decision table without requiring a live Gitea instance.
2026-09-05 09:52:43 +07:00

70 lines
1.8 KiB
Go

// Copyright 2026 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package collaborators
import (
"testing"
gitea "gitea.dev/sdk"
"github.com/stretchr/testify/assert"
"github.com/urfave/cli/v3"
)
func TestCreateCommandMetadata(t *testing.T) {
cmd := &CmdCollaboratorsCreate
assert.Equal(t, "create", cmd.Name)
for _, want := range []string{"add", "c"} {
assert.Contains(t, cmd.Aliases, want)
}
assert.Equal(t, "Create a collaborator", cmd.Usage)
assert.Equal(t, "<username>", cmd.ArgsUsage)
assert.NotNil(t, cmd.Action)
}
func TestCreateCommandFlags(t *testing.T) {
cmd := &CmdCollaboratorsCreate
have := make(map[string]bool, len(cmd.Flags))
for _, flag := range cmd.Flags {
have[flag.Names()[0]] = true
}
for _, name := range []string{"permission", "login", "repo", "remote", "output"} {
assert.True(t, have[name], "expected flag %q not found", name)
}
}
func TestCreatePermissionDefault(t *testing.T) {
for _, flag := range CmdCollaboratorsCreate.Flags {
if sf, ok := flag.(*cli.StringFlag); ok && sf.Name == "permission" {
assert.Equal(t, "write", sf.Value, "--permission should default to 'write'")
}
}
}
func TestCreatePermissionParsing(t *testing.T) {
tests := []struct {
name string
permission string
want gitea.AccessMode
}{
{"read", "read", gitea.AccessModeRead},
{"write", "write", gitea.AccessModeWrite},
{"admin", "admin", gitea.AccessModeAdmin},
{"invalid", "owner", gitea.AccessMode("owner")},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := gitea.AccessMode(tt.permission)
assert.Equal(t, tt.want, got)
})
}
}
func TestCreateRequiresUsername(t *testing.T) {
// ArgsUsage requires exactly one positional username argument.
assert.Equal(t, "<username>", CmdCollaboratorsCreate.ArgsUsage)
}