diff --git a/cmd/dep/status.go b/cmd/dep/status.go index d78e8224d8..cb793d835d 100644 --- a/cmd/dep/status.go +++ b/cmd/dep/status.go @@ -24,6 +24,8 @@ import ( "github.com/pkg/errors" ) +const availableTemplateVariables = "ProjectRoot, Constraint, Version, Revision, Latest, and PackageCount." + const statusShortHelp = `Report the status of the project's dependencies` const statusLongHelp = ` With no arguments, print the status of each dependency of the project. @@ -43,7 +45,7 @@ print an extended status output for each dependency of the project. You may use the -f flag to create a custom format for the output of the dep status command. The available fields you can utilize are as follows: -ProjectRoot, Constraint, Version, Revision, Latest, and PackageCount. +` + availableTemplateVariables + ` Status returns exit code zero if all dependencies are in a "good state". ` @@ -59,8 +61,8 @@ dep status -f='{{if eq .Constraint "master"}}{{.ProjectRoot}} {{end}}' Display the list of package names constrained on the master branch. The -f flag allows you to use Go templates along with it's various - constructs for formating the output data. See -help for available - variables for this flag. + constructs for formating the output data. Available flags are as follows: + ` + availableTemplateVariables + ` dep status -json @@ -243,10 +245,7 @@ func (out *templateOutput) BasicHeader() error { return nil } func (out *templateOutput) BasicFooter() error { return nil } func (out *templateOutput) BasicLine(bs *BasicStatus) error { - data := struct { - ProjectRoot, Constraint, Version, Revision, Latest string - PackageCount int - }{ + data := rawStatus{ ProjectRoot: bs.ProjectRoot, Constraint: bs.getConsolidatedConstraint(), Version: bs.getConsolidatedVersion(), diff --git a/cmd/dep/status_test.go b/cmd/dep/status_test.go index 03a2a9bf21..a8d5129ae9 100644 --- a/cmd/dep/status_test.go +++ b/cmd/dep/status_test.go @@ -43,23 +43,28 @@ func TestBasicLine(t *testing.T) { project := dep.Project{} aSemverConstraint, _ := gps.NewSemverConstraint("1.2.3") + templateString := "PR:{{.ProjectRoot}}, Const:{{.Constraint}}, Ver:{{.Version}}, Rev:{{.Revision}}, Lat:{{.Latest}}, PkgCt:{{.PackageCount}}" + equalityTestTemplate := `{{if eq .Constraint "1.2.3"}}Constraint is 1.2.3{{end}}|{{if eq .Version "flooboo"}}Version is flooboo{{end}}|{{if eq .Latest "unknown"}}Latest is unknown{{end}}` + tests := []struct { - name string - status BasicStatus - wantDotStatus []string - wantJSONStatus []string - wantTableStatus []string - wantTemplateStatus []string + name string + status BasicStatus + wantDotStatus []string + wantJSONStatus []string + wantTableStatus []string + wantTemplateStatus []string + wantEqTemplateStatus []string }{ { name: "BasicStatus with ProjectRoot only", status: BasicStatus{ ProjectRoot: "github.com/foo/bar", }, - wantDotStatus: []string{`[label="github.com/foo/bar"];`}, - wantJSONStatus: []string{`"Version":""`, `"Revision":""`}, - wantTableStatus: []string{`github.com/foo/bar 0`}, - wantTemplateStatus: []string{`PR:github.com/foo/bar, Const:, Ver:, Rev:, Lat:, PkgCt:0`}, + wantDotStatus: []string{`[label="github.com/foo/bar"];`}, + wantJSONStatus: []string{`"Version":""`, `"Revision":""`}, + wantTableStatus: []string{`github.com/foo/bar 0`}, + wantTemplateStatus: []string{`PR:github.com/foo/bar, Const:, Ver:, Rev:, Lat:, PkgCt:0`}, + wantEqTemplateStatus: []string{`||`}, }, { name: "BasicStatus with Revision", @@ -67,10 +72,11 @@ func TestBasicLine(t *testing.T) { ProjectRoot: "github.com/foo/bar", Revision: gps.Revision("flooboofoobooo"), }, - wantDotStatus: []string{`[label="github.com/foo/bar\nflooboo"];`}, - wantJSONStatus: []string{`"Version":""`, `"Revision":"flooboofoobooo"`, `"Constraint":""`}, - wantTableStatus: []string{`github.com/foo/bar flooboo 0`}, - wantTemplateStatus: []string{`PR:github.com/foo/bar, Const:, Ver:flooboo, Rev:flooboofoobooo, Lat:, PkgCt:0`}, + wantDotStatus: []string{`[label="github.com/foo/bar\nflooboo"];`}, + wantJSONStatus: []string{`"Version":""`, `"Revision":"flooboofoobooo"`, `"Constraint":""`}, + wantTableStatus: []string{`github.com/foo/bar flooboo 0`}, + wantTemplateStatus: []string{`PR:github.com/foo/bar, Const:, Ver:flooboo, Rev:flooboofoobooo, Lat:, PkgCt:0`}, + wantEqTemplateStatus: []string{`|Version is flooboo|`}, }, { name: "BasicStatus with Version and Revision", @@ -79,10 +85,11 @@ func TestBasicLine(t *testing.T) { Version: gps.NewVersion("1.0.0"), Revision: gps.Revision("flooboofoobooo"), }, - wantDotStatus: []string{`[label="github.com/foo/bar\n1.0.0"];`}, - wantJSONStatus: []string{`"Version":"1.0.0"`, `"Revision":"flooboofoobooo"`, `"Constraint":""`}, - wantTableStatus: []string{`github.com/foo/bar 1.0.0 flooboo 0`}, - wantTemplateStatus: []string{`PR:github.com/foo/bar, Const:, Ver:1.0.0, Rev:flooboofoobooo, Lat:, PkgCt:0`}, + wantDotStatus: []string{`[label="github.com/foo/bar\n1.0.0"];`}, + wantJSONStatus: []string{`"Version":"1.0.0"`, `"Revision":"flooboofoobooo"`, `"Constraint":""`}, + wantTableStatus: []string{`github.com/foo/bar 1.0.0 flooboo 0`}, + wantTemplateStatus: []string{`PR:github.com/foo/bar, Const:, Ver:1.0.0, Rev:flooboofoobooo, Lat:, PkgCt:0`}, + wantEqTemplateStatus: []string{`||`}, }, { name: "BasicStatus with Constraint, Version and Revision", @@ -92,10 +99,11 @@ func TestBasicLine(t *testing.T) { Version: gps.NewVersion("1.0.0"), Revision: gps.Revision("revxyz"), }, - wantDotStatus: []string{`[label="github.com/foo/bar\n1.0.0"];`}, - wantJSONStatus: []string{`"Revision":"revxyz"`, `"Constraint":"1.2.3"`, `"Version":"1.0.0"`}, - wantTableStatus: []string{`github.com/foo/bar 1.2.3 1.0.0 revxyz 0`}, - wantTemplateStatus: []string{`PR:github.com/foo/bar, Const:1.2.3, Ver:1.0.0, Rev:revxyz, Lat:, PkgCt:0`}, + wantDotStatus: []string{`[label="github.com/foo/bar\n1.0.0"];`}, + wantJSONStatus: []string{`"Revision":"revxyz"`, `"Constraint":"1.2.3"`, `"Version":"1.0.0"`}, + wantTableStatus: []string{`github.com/foo/bar 1.2.3 1.0.0 revxyz 0`}, + wantTemplateStatus: []string{`PR:github.com/foo/bar, Const:1.2.3, Ver:1.0.0, Rev:revxyz, Lat:, PkgCt:0`}, + wantEqTemplateStatus: []string{`Constraint is 1.2.3||`}, }, { name: "BasicStatus with update error", @@ -103,10 +111,11 @@ func TestBasicLine(t *testing.T) { ProjectRoot: "github.com/foo/bar", hasError: true, }, - wantDotStatus: []string{`[label="github.com/foo/bar"];`}, - wantJSONStatus: []string{`"Version":""`, `"Revision":""`, `"Latest":"unknown"`}, - wantTableStatus: []string{`github.com/foo/bar unknown 0`}, - wantTemplateStatus: []string{`PR:github.com/foo/bar, Const:, Ver:, Rev:, Lat:unknown, PkgCt:0`}, + wantDotStatus: []string{`[label="github.com/foo/bar"];`}, + wantJSONStatus: []string{`"Version":""`, `"Revision":""`, `"Latest":"unknown"`}, + wantTableStatus: []string{`github.com/foo/bar unknown 0`}, + wantTemplateStatus: []string{`PR:github.com/foo/bar, Const:, Ver:, Rev:, Lat:unknown, PkgCt:0`}, + wantEqTemplateStatus: []string{`||Latest is unknown`}, }, } @@ -159,7 +168,7 @@ func TestBasicLine(t *testing.T) { } buf.Reset() - template, _ := template.New("status").Parse("PR:{{.ProjectRoot}}, Const:{{.Constraint}}, Ver:{{.Version}}, Rev:{{.Revision}}, Lat:{{.Latest}}, PkgCt:{{.PackageCount}}") + template, _ := template.New("status").Parse(templateString) templateout := &templateOutput{w: &buf, tmpl: template} templateout.BasicHeader() templateout.BasicLine(&test.status) @@ -170,6 +179,20 @@ func TestBasicLine(t *testing.T) { t.Errorf("Did not find expected template status: \n\t(GOT) %v \n\t(WNT) %v", buf.String(), wantStatus) } } + + // The following test is to ensure that certain fields usable with string operations such as .eq + buf.Reset() + template, _ = template.New("status").Parse(equalityTestTemplate) + templateout = &templateOutput{w: &buf, tmpl: template} + templateout.BasicHeader() + templateout.BasicLine(&test.status) + templateout.BasicFooter() + + for _, wantStatus := range test.wantEqTemplateStatus { + if ok := strings.Contains(buf.String(), wantStatus); !ok { + t.Errorf("Did not find expected template status: \n\t(GOT) %v \n\t(WNT) %v", buf.String(), wantStatus) + } + } }) } }