Skip to content

Commit 2efeb88

Browse files
committed
test/refactor: refactor project list command and add unit tests (all commits squashed to resolve conflicts)
Signed-off-by: Rayyan Khan <rayyanrehman101@gmail.com>
1 parent 70c1060 commit 2efeb88

File tree

3 files changed

+676
-60
lines changed

3 files changed

+676
-60
lines changed

cmd/harbor/root/project/list.go

Lines changed: 64 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,70 @@ import (
2626
"github.com/spf13/viper"
2727
)
2828

29+
func PrintProjects(allProjects []*models.Project) error {
30+
log.WithField("count", len(allProjects)).Debug("Number of projects fetched")
31+
if len(allProjects) == 0 {
32+
log.Info("No projects found")
33+
return nil
34+
}
35+
formatFlag := viper.GetString("output-format")
36+
if formatFlag != "" {
37+
log.WithField("output_format", formatFlag).Debug("Output format selected")
38+
err := utils.PrintFormat(allProjects, formatFlag)
39+
if err != nil {
40+
return err
41+
}
42+
} else {
43+
log.Debug("Listing projects using default view")
44+
if err := list.ListProjects(allProjects); err != nil {
45+
return err
46+
}
47+
}
48+
return nil
49+
}
50+
func BuildListOptions(private, public bool, opts *api.ListFlags, fuzzy, match, ranges []string) (func(...api.ListFlags) (project.ListProjectsOK, error), error) {
51+
var listFunc func(...api.ListFlags) (project.ListProjectsOK, error)
52+
log.Debug("Starting project list command")
53+
54+
if opts.PageSize > 100 || opts.PageSize < 0 {
55+
return nil, fmt.Errorf("page size should be greater than or equal to 0 and less than or equal to 100")
56+
}
57+
58+
if private && public {
59+
return nil, fmt.Errorf("Cannot specify both --private and --public flags")
60+
}
61+
62+
if private {
63+
log.Debug("Using private project list function")
64+
opts.Public = false
65+
listFunc = api.ListProject
66+
} else if public {
67+
log.Debug("Using public project list function")
68+
opts.Public = true
69+
listFunc = api.ListProject
70+
} else {
71+
log.Debug("Using list all projects function")
72+
listFunc = api.ListAllProjects
73+
}
74+
75+
if len(fuzzy) != 0 || len(match) != 0 || len(ranges) != 0 { // Only Building Query if a param exists
76+
q, qErr := utils.BuildQueryParam(fuzzy, match, ranges,
77+
[]string{"name", "project_id", "public", "creation_time", "owner_id"},
78+
)
79+
if qErr != nil {
80+
return nil, qErr
81+
}
82+
83+
opts.Q = q
84+
}
85+
return listFunc, nil
86+
}
2987
func ListProjectCommand() *cobra.Command {
3088
var (
3189
opts api.ListFlags
3290
private bool
3391
public bool
3492
allProjects []*models.Project
35-
err error
3693
// For querying, opts.Q
3794
fuzzy []string
3895
match []string
@@ -43,66 +100,17 @@ func ListProjectCommand() *cobra.Command {
43100
Short: "List projects",
44101
Args: cobra.ExactArgs(0),
45102
RunE: func(cmd *cobra.Command, args []string) error {
46-
log.Debug("Starting project list command")
47-
48-
if opts.PageSize < 0 {
49-
return fmt.Errorf("page size must be greater than or equal to 0")
50-
}
51-
52-
if opts.PageSize > 100 {
53-
return fmt.Errorf("page size should be less than or equal to 100")
54-
}
55-
56-
if private && public {
57-
return fmt.Errorf("Cannot specify both --private and --public flags")
58-
}
59-
60-
var listFunc func(...api.ListFlags) (project.ListProjectsOK, error)
61-
if private {
62-
log.Debug("Using private project list function")
63-
opts.Public = false
64-
listFunc = api.ListProject
65-
} else if public {
66-
log.Debug("Using public project list function")
67-
opts.Public = true
68-
listFunc = api.ListProject
69-
} else {
70-
log.Debug("Using list all projects function")
71-
listFunc = api.ListAllProjects
72-
}
73-
74-
if len(fuzzy) != 0 || len(match) != 0 || len(ranges) != 0 { // Only Building Query if a param exists
75-
q, qErr := utils.BuildQueryParam(fuzzy, match, ranges,
76-
[]string{"name", "project_id", "public", "creation_time", "owner_id"},
77-
)
78-
if qErr != nil {
79-
return qErr
80-
}
81-
82-
opts.Q = q
103+
listFunc, err := BuildListOptions(private, public, &opts, fuzzy, match, ranges)
104+
if err != nil {
105+
return err
83106
}
84-
85107
log.Debug("Fetching projects...")
86108
allProjects, err = fetchProjects(listFunc, opts)
87109
if err != nil {
88-
return fmt.Errorf("failed to get projects list: %v", utils.ParseHarborErrorMsg(err))
89-
}
90-
91-
log.WithField("count", len(allProjects)).Debug("Number of projects fetched")
92-
if len(allProjects) == 0 {
93-
log.Info("No projects found")
94-
return nil
110+
return fmt.Errorf("%s", utils.ParseHarborErrorMsg(err))
95111
}
96-
formatFlag := viper.GetString("output-format")
97-
if formatFlag != "" {
98-
log.WithField("output_format", formatFlag).Debug("Output format selected")
99-
err = utils.PrintFormat(allProjects, formatFlag)
100-
if err != nil {
101-
return err
102-
}
103-
} else {
104-
log.Debug("Listing projects using default view")
105-
list.ListProjects(allProjects)
112+
if err := PrintProjects(allProjects); err != nil {
113+
return err
106114
}
107115
return nil
108116
},

0 commit comments

Comments
 (0)