From 4e39eef4a0142d49412865f38d1c1ace5717fa2d Mon Sep 17 00:00:00 2001 From: Ross Golder Date: Thu, 30 Jul 2026 10:28:08 +0700 Subject: [PATCH] test(teams-repos): cover metadata, confirm flag, and parseRepoSlug Verify the parent command's name, aliases, and subcommand set, plus metadata and --confirm flag presence on each delete subcommand. Also exercise parseRepoSlug for valid slugs and the common malformed forms. --- cmd/teams/repos/repos_test.go | 98 +++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 cmd/teams/repos/repos_test.go diff --git a/cmd/teams/repos/repos_test.go b/cmd/teams/repos/repos_test.go new file mode 100644 index 00000000..759ab911 --- /dev/null +++ b/cmd/teams/repos/repos_test.go @@ -0,0 +1,98 @@ +// Copyright 2026 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package repos + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestReposCommandMetadata(t *testing.T) { + cmd := &CmdTeamsRepos + + assert.Equal(t, "repos", cmd.Name) + for _, want := range []string{"repo", "repositories"} { + assert.Contains(t, cmd.Aliases, want) + } + assert.Equal(t, "Manage team repository access", cmd.Usage) + assert.NotNil(t, cmd.Action) +} + +func TestReposSubcommandsRegistered(t *testing.T) { + want := []string{"list", "create", "delete"} + have := make(map[string]bool, len(want)) + for _, sub := range CmdTeamsRepos.Commands { + have[sub.Name] = true + } + for _, name := range want { + assert.True(t, have[name], "expected subcommand %q not registered", name) + } +} + +func TestReposListMetadata(t *testing.T) { + cmd := &CmdTeamsReposList + assert.Equal(t, "list", cmd.Name) + assert.Contains(t, cmd.Aliases, "ls") + assert.Equal(t, "", cmd.ArgsUsage) + assert.NotNil(t, cmd.Action) +} + +func TestReposCreateMetadata(t *testing.T) { + cmd := &CmdTeamsReposCreate + assert.Equal(t, "create", cmd.Name) + for _, want := range []string{"add", "c"} { + assert.Contains(t, cmd.Aliases, want) + } + assert.Equal(t, " /", cmd.ArgsUsage) + assert.NotNil(t, cmd.Action) +} + +func TestReposDeleteMetadata(t *testing.T) { + cmd := &CmdTeamsReposDelete + assert.Equal(t, "delete", cmd.Name) + for _, want := range []string{"rm", "remove"} { + assert.Contains(t, cmd.Aliases, want) + } + assert.Equal(t, " /", cmd.ArgsUsage) + assert.NotNil(t, cmd.Action) +} + +func TestReposDeleteHasConfirmFlag(t *testing.T) { + for _, flag := range CmdTeamsReposDelete.Flags { + if flag.Names()[0] == "confirm" { + return + } + } + t.Fatal("expected --confirm flag on repos delete") +} + +func TestParseRepoSlug(t *testing.T) { + tests := []struct { + name string + slug string + wantOwner string + wantRepo string + wantErr bool + }{ + {name: "valid slug", slug: "octocat/hello-world", wantOwner: "octocat", wantRepo: "hello-world"}, + {name: "missing repo", slug: "octocat/", wantErr: true}, + {name: "missing owner", slug: "/hello", wantErr: true}, + {name: "no slash", slug: "hello", wantErr: true}, + {name: "empty", slug: "", wantErr: true}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + owner, repo, err := parseRepoSlug(tt.slug) + if tt.wantErr { + assert.Error(t, err) + return + } + assert.NoError(t, err) + assert.Equal(t, tt.wantOwner, owner) + assert.Equal(t, tt.wantRepo, repo) + }) + } +}