188 lines
4.5 KiB
Go
188 lines
4.5 KiB
Go
package github
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestAddDefaultToolset(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input []string
|
|
expected []string
|
|
}{
|
|
{
|
|
name: "no default keyword - return unchanged",
|
|
input: []string{"actions", "gists"},
|
|
expected: []string{"actions", "gists"},
|
|
},
|
|
{
|
|
name: "default keyword present - expand and remove default",
|
|
input: []string{"default"},
|
|
expected: []string{
|
|
"context",
|
|
"copilot",
|
|
"repos",
|
|
"issues",
|
|
"pull_requests",
|
|
"users",
|
|
},
|
|
},
|
|
{
|
|
name: "default with additional toolsets",
|
|
input: []string{"default", "actions", "gists"},
|
|
expected: []string{
|
|
"actions",
|
|
"gists",
|
|
"context",
|
|
"copilot",
|
|
"repos",
|
|
"issues",
|
|
"pull_requests",
|
|
"users",
|
|
},
|
|
},
|
|
{
|
|
name: "default with overlapping toolsets - should not duplicate",
|
|
input: []string{"default", "context", "repos"},
|
|
expected: []string{
|
|
"context",
|
|
"copilot",
|
|
"repos",
|
|
"issues",
|
|
"pull_requests",
|
|
"users",
|
|
},
|
|
},
|
|
{
|
|
name: "empty input",
|
|
input: []string{},
|
|
expected: []string{},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := AddDefaultToolset(tt.input)
|
|
|
|
require.Len(t, result, len(tt.expected), "result length should match expected length")
|
|
|
|
resultMap := make(map[string]bool)
|
|
for _, toolset := range result {
|
|
resultMap[toolset] = true
|
|
}
|
|
|
|
expectedMap := make(map[string]bool)
|
|
for _, toolset := range tt.expected {
|
|
expectedMap[toolset] = true
|
|
}
|
|
|
|
assert.Equal(t, expectedMap, resultMap, "result should contain all expected toolsets")
|
|
assert.False(t, resultMap["default"], "result should not contain 'default' keyword")
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRemoveToolset(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
tools []string
|
|
toRemove string
|
|
expected []string
|
|
}{
|
|
{
|
|
name: "remove existing toolset",
|
|
tools: []string{"actions", "gists", "notifications"},
|
|
toRemove: "gists",
|
|
expected: []string{"actions", "notifications"},
|
|
},
|
|
{
|
|
name: "remove from empty slice",
|
|
tools: []string{},
|
|
toRemove: "actions",
|
|
expected: []string{},
|
|
},
|
|
{
|
|
name: "remove duplicate entries",
|
|
tools: []string{"actions", "gists", "actions", "notifications"},
|
|
toRemove: "actions",
|
|
expected: []string{"gists", "notifications"},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := RemoveToolset(tt.tools, tt.toRemove)
|
|
assert.Equal(t, tt.expected, result)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestContainsToolset(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
tools []string
|
|
toCheck string
|
|
expected bool
|
|
}{
|
|
{
|
|
name: "toolset exists",
|
|
tools: []string{"actions", "gists", "notifications"},
|
|
toCheck: "gists",
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "toolset does not exist",
|
|
tools: []string{"actions", "gists", "notifications"},
|
|
toCheck: "repos",
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "empty slice",
|
|
tools: []string{},
|
|
toCheck: "actions",
|
|
expected: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := ContainsToolset(tt.tools, tt.toCheck)
|
|
assert.Equal(t, tt.expected, result)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGenerateToolsetsHelp(t *testing.T) {
|
|
// Generate the help text
|
|
helpText := GenerateToolsetsHelp()
|
|
|
|
// Verify help text is not empty
|
|
require.NotEmpty(t, helpText)
|
|
|
|
// Verify it contains expected sections
|
|
assert.Contains(t, helpText, "Comma-separated list of tool groups to enable")
|
|
assert.Contains(t, helpText, "Available:")
|
|
assert.Contains(t, helpText, "Special toolset keywords:")
|
|
assert.Contains(t, helpText, "all: Enables all available toolsets")
|
|
assert.Contains(t, helpText, "default: Enables the default toolset configuration")
|
|
assert.Contains(t, helpText, "Examples:")
|
|
assert.Contains(t, helpText, "--toolsets=actions,gists,notifications")
|
|
assert.Contains(t, helpText, "--toolsets=default,actions,gists")
|
|
assert.Contains(t, helpText, "--toolsets=all")
|
|
|
|
// Verify it contains some expected default toolsets
|
|
assert.Contains(t, helpText, "context")
|
|
assert.Contains(t, helpText, "repos")
|
|
assert.Contains(t, helpText, "issues")
|
|
assert.Contains(t, helpText, "pull_requests")
|
|
assert.Contains(t, helpText, "users")
|
|
|
|
// Verify it contains some expected available toolsets
|
|
assert.Contains(t, helpText, "actions")
|
|
assert.Contains(t, helpText, "gists")
|
|
assert.Contains(t, helpText, "notifications")
|
|
}
|