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
188 changes: 188 additions & 0 deletions cmd/non-admin/backup/backup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,90 @@ func TestNonAdminBackupCommands(t *testing.T) {
"logs",
},
},
// Verb-noun order help command tests
{
name: "nonadmin get backup help",
args: []string{"nonadmin", "get", "backup", "--help"},
expectContains: []string{
"Get one or more non-admin resources",
"backup",
},
},
{
name: "nonadmin create backup help",
args: []string{"nonadmin", "create", "backup", "--help"},
expectContains: []string{
"Create non-admin resources",
"backup",
"bsl",
},
},
{
name: "nonadmin delete backup help",
args: []string{"nonadmin", "delete", "backup", "--help"},
expectContains: []string{
"Delete non-admin resources",
"backup",
},
},
{
name: "nonadmin describe backup help",
args: []string{"nonadmin", "describe", "backup", "--help"},
expectContains: []string{
"Describe non-admin resources",
"backup",
},
},
{
name: "nonadmin logs backup help",
args: []string{"nonadmin", "logs", "backup", "--help"},
expectContains: []string{
"Get logs for non-admin resources",
"backup",
},
},
// Shorthand verb-noun order tests
{
name: "na get backup help",
args: []string{"na", "get", "backup", "--help"},
expectContains: []string{
"Get one or more non-admin resources",
"backup",
},
},
{
name: "na create backup help",
args: []string{"na", "create", "backup", "--help"},
expectContains: []string{
"Create non-admin resources",
"backup",
"bsl",
},
},
{
name: "na delete backup help",
args: []string{"na", "delete", "backup", "--help"},
expectContains: []string{
"Delete non-admin resources",
"backup",
},
},
{
name: "na describe backup help",
args: []string{"na", "describe", "backup", "--help"},
expectContains: []string{
"Describe non-admin resources",
"backup",
},
},
{
name: "na logs backup help",
args: []string{"na", "logs", "backup", "--help"},
expectContains: []string{
"Get logs for non-admin resources",
"backup",
},
},
}

for _, tt := range tests {
Expand Down Expand Up @@ -125,6 +209,28 @@ func TestNonAdminBackupHelpFlags(t *testing.T) {
{"nonadmin", "backup", "logs", "-h"},
{"na", "backup", "--help"},
{"na", "backup", "-h"},
// Verb-noun order help flags
{"nonadmin", "get", "backup", "--help"},
{"nonadmin", "get", "backup", "-h"},
{"nonadmin", "create", "backup", "--help"},
{"nonadmin", "create", "backup", "-h"},
{"nonadmin", "delete", "backup", "--help"},
{"nonadmin", "delete", "backup", "-h"},
{"nonadmin", "describe", "backup", "--help"},
{"nonadmin", "describe", "backup", "-h"},
{"nonadmin", "logs", "backup", "--help"},
{"nonadmin", "logs", "backup", "-h"},
// Shorthand verb-noun order help flags
{"na", "get", "backup", "--help"},
{"na", "get", "backup", "-h"},
{"na", "create", "backup", "--help"},
{"na", "create", "backup", "-h"},
{"na", "delete", "backup", "--help"},
{"na", "delete", "backup", "-h"},
{"na", "describe", "backup", "--help"},
{"na", "describe", "backup", "-h"},
{"na", "logs", "backup", "--help"},
{"na", "logs", "backup", "-h"},
}

for _, cmd := range commands {
Expand Down Expand Up @@ -215,6 +321,14 @@ func TestNonAdminBackupClientConfigIntegration(t *testing.T) {
{"nonadmin", "backup", "delete", "--help"},
{"nonadmin", "backup", "logs", "--help"},
{"na", "backup", "get", "--help"},
// Verb-noun order commands
{"nonadmin", "get", "backup", "--help"},
{"nonadmin", "create", "backup", "--help"},
{"nonadmin", "describe", "backup", "--help"},
{"nonadmin", "delete", "backup", "--help"},
{"nonadmin", "logs", "backup", "--help"},
{"na", "get", "backup", "--help"},
{"na", "create", "backup", "--help"},
}

for _, cmd := range commands {
Expand Down Expand Up @@ -259,3 +373,77 @@ func TestNonAdminBackupCommandStructure(t *testing.T) {
}
})
}

// TestVerbNounOrderExamples tests that verb-noun order commands show proper examples
func TestVerbNounOrderExamples(t *testing.T) {
binaryPath := testutil.BuildCLIBinary(t)

t.Run("verb commands show proper examples", func(t *testing.T) {
// Test that verb commands show examples with kubectl oadp prefix
expectedExamples := []string{
"kubectl oadp nonadmin get backup",
"kubectl oadp nonadmin create backup",
"kubectl oadp nonadmin delete backup",
"kubectl oadp nonadmin describe backup",
"kubectl oadp nonadmin logs backup",
}

commands := [][]string{
{"nonadmin", "get", "--help"},
{"nonadmin", "create", "--help"},
{"nonadmin", "delete", "--help"},
{"nonadmin", "describe", "--help"},
{"nonadmin", "logs", "--help"},
}

for i, cmd := range commands {
testutil.TestHelpCommand(t, binaryPath, cmd, []string{expectedExamples[i]})
}
})

t.Run("verb commands with specific resources show proper examples", func(t *testing.T) {
// Test that verb commands with specific resources show examples
expectedExamples := []string{
"kubectl oadp nonadmin get backup my-backup",
"kubectl oadp nonadmin create backup my-backup",
"kubectl oadp nonadmin delete backup my-backup",
"kubectl oadp nonadmin describe backup my-backup",
"kubectl oadp nonadmin logs backup my-backup",
}

commands := [][]string{
{"nonadmin", "get", "backup", "--help"},
{"nonadmin", "create", "backup", "--help"},
{"nonadmin", "delete", "backup", "--help"},
{"nonadmin", "describe", "backup", "--help"},
{"nonadmin", "logs", "backup", "--help"},
}

for i, cmd := range commands {
testutil.TestHelpCommand(t, binaryPath, cmd, []string{expectedExamples[i]})
}
})

t.Run("shorthand verb commands show proper examples", func(t *testing.T) {
// Test that shorthand verb commands show examples
expectedExamples := []string{
"kubectl oadp nonadmin get backup",
"kubectl oadp nonadmin create backup",
"kubectl oadp nonadmin delete backup",
"kubectl oadp nonadmin describe backup",
"kubectl oadp nonadmin logs backup",
}

commands := [][]string{
{"na", "get", "--help"},
{"na", "create", "--help"},
{"na", "delete", "--help"},
{"na", "describe", "--help"},
{"na", "logs", "--help"},
}

for i, cmd := range commands {
testutil.TestHelpCommand(t, binaryPath, cmd, []string{expectedExamples[i]})
}
})
}
8 changes: 8 additions & 0 deletions cmd/non-admin/nonadmin.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package nonadmin
import (
"github.com/migtools/oadp-cli/cmd/non-admin/backup"
"github.com/migtools/oadp-cli/cmd/non-admin/bsl"
"github.com/migtools/oadp-cli/cmd/non-admin/verbs"
"github.com/spf13/cobra"
"github.com/vmware-tanzu/velero/pkg/client"
)
Expand All @@ -38,5 +39,12 @@ func NewNonAdminCommand(f client.Factory) *cobra.Command {
// Add backup storage location subcommand
c.AddCommand(bsl.NewBSLCommand(f))

// Add verb-based commands for compatibility with Velero CLI pattern
c.AddCommand(verbs.NewGetCommand(f))
c.AddCommand(verbs.NewCreateCommand(f))
c.AddCommand(verbs.NewDeleteCommand(f))
c.AddCommand(verbs.NewDescribeCommand(f))
c.AddCommand(verbs.NewLogsCommand(f))

return c
}
140 changes: 140 additions & 0 deletions cmd/non-admin/nonadmin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,124 @@ func TestNonAdminCommands(t *testing.T) {
"Create a non-admin backup",
},
},
{
name: "nonadmin backup create help",
args: []string{"nonadmin", "create", "backup", "--help"},
expectContains: []string{
"Create a non-admin backup",
},
},
// Verb-noun order help command tests
{
name: "nonadmin get help",
args: []string{"nonadmin", "get", "--help"},
expectContains: []string{
"Get one or more non-admin resources",
"backup",
},
},
{
name: "nonadmin create help",
args: []string{"nonadmin", "create", "--help"},
expectContains: []string{
"Create non-admin resources",
"backup",
"bsl",
},
},
{
name: "nonadmin delete help",
args: []string{"nonadmin", "delete", "--help"},
expectContains: []string{
"Delete non-admin resources",
"backup",
},
},
{
name: "nonadmin describe help",
args: []string{"nonadmin", "describe", "--help"},
expectContains: []string{
"Describe non-admin resources",
"backup",
},
},
{
name: "nonadmin logs help",
args: []string{"nonadmin", "logs", "--help"},
expectContains: []string{
"Get logs for non-admin resources",
"backup",
},
},
// Verb-noun order with specific resources
{
name: "nonadmin get backup help",
args: []string{"nonadmin", "get", "backup", "--help"},
expectContains: []string{
"Get one or more non-admin resources",
"backup",
},
},
{
name: "nonadmin create backup help",
args: []string{"nonadmin", "create", "backup", "--help"},
expectContains: []string{
"Create non-admin resources",
"backup",
"bsl",
},
},
{
name: "nonadmin delete backup help",
args: []string{"nonadmin", "delete", "backup", "--help"},
expectContains: []string{
"Delete non-admin resources",
"backup",
},
},
{
name: "nonadmin describe backup help",
args: []string{"nonadmin", "describe", "backup", "--help"},
expectContains: []string{
"Describe non-admin resources",
"backup",
},
},
{
name: "nonadmin logs backup help",
args: []string{"nonadmin", "logs", "backup", "--help"},
expectContains: []string{
"Get logs for non-admin resources",
"backup",
},
},
{
name: "nonadmin create bsl help",
args: []string{"nonadmin", "create", "bsl", "--help"},
expectContains: []string{
"Create non-admin resources",
"backup",
"bsl",
},
},
// Shorthand tests for verb-noun order
{
name: "na get help",
args: []string{"na", "get", "--help"},
expectContains: []string{
"Get one or more non-admin resources",
"backup",
},
},
{
name: "na create backup help",
args: []string{"na", "create", "backup", "--help"},
expectContains: []string{
"Create non-admin resources",
"backup",
"bsl",
},
},
}

for _, tt := range tests {
Expand All @@ -76,6 +194,28 @@ func TestNonAdminHelpFlags(t *testing.T) {
{"nonadmin", "backup", "-h"},
{"nonadmin", "bsl", "--help"},
{"nonadmin", "bsl", "-h"},
// Verb-noun order help flags
{"nonadmin", "get", "--help"},
{"nonadmin", "get", "-h"},
{"nonadmin", "create", "--help"},
{"nonadmin", "create", "-h"},
{"nonadmin", "delete", "--help"},
{"nonadmin", "delete", "-h"},
{"nonadmin", "describe", "--help"},
{"nonadmin", "describe", "-h"},
{"nonadmin", "logs", "--help"},
{"nonadmin", "logs", "-h"},
{"nonadmin", "get", "backup", "--help"},
{"nonadmin", "get", "backup", "-h"},
{"nonadmin", "create", "backup", "--help"},
{"nonadmin", "create", "backup", "-h"},
{"nonadmin", "create", "bsl", "--help"},
{"nonadmin", "create", "bsl", "-h"},
// Shorthand verb-noun order help flags
{"na", "get", "--help"},
{"na", "get", "-h"},
{"na", "create", "--help"},
{"na", "create", "-h"},
}

for _, cmd := range commands {
Expand Down
Loading
Loading