Display fixed-in version for each package in report (#801)
* refactor(model): PackageFixStatus.Name to BinName * refacotr(oval): change var name * feat(report): Add FixedIn in JSON * refactor(tui): chage args * display fixedin in report * refactor(model): change fileld name * remove unused field of PackageFixStatus
This commit is contained in:
		@@ -120,18 +120,23 @@ func (p Package) FormatNewVer() string {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FormatVersionFromTo formats installed and new package version
 | 
			
		||||
func (p Package) FormatVersionFromTo(notFixedYet bool, status string) string {
 | 
			
		||||
func (p Package) FormatVersionFromTo(stat PackageFixStatus) string {
 | 
			
		||||
	to := p.FormatNewVer()
 | 
			
		||||
	if notFixedYet {
 | 
			
		||||
		if status != "" {
 | 
			
		||||
			to = status
 | 
			
		||||
	if stat.NotFixedYet {
 | 
			
		||||
		if stat.FixState != "" {
 | 
			
		||||
			to = stat.FixState
 | 
			
		||||
		} else {
 | 
			
		||||
			to = "Not Fixed Yet"
 | 
			
		||||
		}
 | 
			
		||||
	} else if p.NewVersion == "" {
 | 
			
		||||
		to = "Unknown"
 | 
			
		||||
	}
 | 
			
		||||
	return fmt.Sprintf("%s-%s -> %s", p.Name, p.FormatVer(), to)
 | 
			
		||||
	var fixedIn string
 | 
			
		||||
	if stat.FixedIn != "" {
 | 
			
		||||
		fixedIn = fmt.Sprintf(" (FixedIn: %s)", stat.FixedIn)
 | 
			
		||||
	}
 | 
			
		||||
	return fmt.Sprintf("%s-%s -> %s%s",
 | 
			
		||||
		p.Name, p.FormatVer(), to, fixedIn)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FormatChangelog formats the changelog
 | 
			
		||||
 
 | 
			
		||||
@@ -175,3 +175,125 @@ func TestFindByBinName(t *testing.T) {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestPackage_FormatVersionFromTo(t *testing.T) {
 | 
			
		||||
	type fields struct {
 | 
			
		||||
		Name             string
 | 
			
		||||
		Version          string
 | 
			
		||||
		Release          string
 | 
			
		||||
		NewVersion       string
 | 
			
		||||
		NewRelease       string
 | 
			
		||||
		Arch             string
 | 
			
		||||
		Repository       string
 | 
			
		||||
		Changelog        Changelog
 | 
			
		||||
		AffectedProcs    []AffectedProcess
 | 
			
		||||
		NeedRestartProcs []NeedRestartProcess
 | 
			
		||||
	}
 | 
			
		||||
	type args struct {
 | 
			
		||||
		stat PackageFixStatus
 | 
			
		||||
	}
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		name   string
 | 
			
		||||
		fields fields
 | 
			
		||||
		args   args
 | 
			
		||||
		want   string
 | 
			
		||||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			name: "fixed",
 | 
			
		||||
			fields: fields{
 | 
			
		||||
				Name:       "packA",
 | 
			
		||||
				Version:    "1.0.0",
 | 
			
		||||
				Release:    "a",
 | 
			
		||||
				NewVersion: "1.0.1",
 | 
			
		||||
				NewRelease: "b",
 | 
			
		||||
			},
 | 
			
		||||
			args: args{
 | 
			
		||||
				stat: PackageFixStatus{
 | 
			
		||||
					NotFixedYet: false,
 | 
			
		||||
					FixedIn:     "1.0.1-b",
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			want: "packA-1.0.0-a -> 1.0.1-b (FixedIn: 1.0.1-b)",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name: "nfy",
 | 
			
		||||
			fields: fields{
 | 
			
		||||
				Name:    "packA",
 | 
			
		||||
				Version: "1.0.0",
 | 
			
		||||
				Release: "a",
 | 
			
		||||
			},
 | 
			
		||||
			args: args{
 | 
			
		||||
				stat: PackageFixStatus{
 | 
			
		||||
					NotFixedYet: true,
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			want: "packA-1.0.0-a -> Not Fixed Yet",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name: "nfy",
 | 
			
		||||
			fields: fields{
 | 
			
		||||
				Name:    "packA",
 | 
			
		||||
				Version: "1.0.0",
 | 
			
		||||
				Release: "a",
 | 
			
		||||
			},
 | 
			
		||||
			args: args{
 | 
			
		||||
				stat: PackageFixStatus{
 | 
			
		||||
					NotFixedYet: false,
 | 
			
		||||
					FixedIn:     "1.0.1-b",
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			want: "packA-1.0.0-a -> Unknown (FixedIn: 1.0.1-b)",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name: "nfy2",
 | 
			
		||||
			fields: fields{
 | 
			
		||||
				Name:    "packA",
 | 
			
		||||
				Version: "1.0.0",
 | 
			
		||||
				Release: "a",
 | 
			
		||||
			},
 | 
			
		||||
			args: args{
 | 
			
		||||
				stat: PackageFixStatus{
 | 
			
		||||
					NotFixedYet: true,
 | 
			
		||||
					FixedIn:     "1.0.1-b",
 | 
			
		||||
					FixState:    "open",
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			want: "packA-1.0.0-a -> open (FixedIn: 1.0.1-b)",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name: "nfy3",
 | 
			
		||||
			fields: fields{
 | 
			
		||||
				Name:    "packA",
 | 
			
		||||
				Version: "1.0.0",
 | 
			
		||||
				Release: "a",
 | 
			
		||||
			},
 | 
			
		||||
			args: args{
 | 
			
		||||
				stat: PackageFixStatus{
 | 
			
		||||
					NotFixedYet: true,
 | 
			
		||||
					FixedIn:     "1.0.1-b",
 | 
			
		||||
					FixState:    "open",
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			want: "packA-1.0.0-a -> open (FixedIn: 1.0.1-b)",
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	for _, tt := range tests {
 | 
			
		||||
		t.Run(tt.name, func(t *testing.T) {
 | 
			
		||||
			p := Package{
 | 
			
		||||
				Name:             tt.fields.Name,
 | 
			
		||||
				Version:          tt.fields.Version,
 | 
			
		||||
				Release:          tt.fields.Release,
 | 
			
		||||
				NewVersion:       tt.fields.NewVersion,
 | 
			
		||||
				NewRelease:       tt.fields.NewRelease,
 | 
			
		||||
				Arch:             tt.fields.Arch,
 | 
			
		||||
				Repository:       tt.fields.Repository,
 | 
			
		||||
				Changelog:        tt.fields.Changelog,
 | 
			
		||||
				AffectedProcs:    tt.fields.AffectedProcs,
 | 
			
		||||
				NeedRestartProcs: tt.fields.NeedRestartProcs,
 | 
			
		||||
			}
 | 
			
		||||
			if got := p.FormatVersionFromTo(tt.args.stat); got != tt.want {
 | 
			
		||||
				t.Errorf("Package.FormatVersionFromTo() = %v, want %v", got, tt.want)
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -136,9 +136,10 @@ func (ps PackageFixStatuses) Sort() {
 | 
			
		||||
 | 
			
		||||
// PackageFixStatus has name and other status abount the package
 | 
			
		||||
type PackageFixStatus struct {
 | 
			
		||||
	Name        string `json:"name"`
 | 
			
		||||
	NotFixedYet bool   `json:"notFixedYet"`
 | 
			
		||||
	FixState    string `json:"fixState"`
 | 
			
		||||
	Name        string `json:"name,omitempty"`
 | 
			
		||||
	NotFixedYet bool   `json:"notFixedYet,omitempty"`
 | 
			
		||||
	FixState    string `json:"fixState,omitempty"`
 | 
			
		||||
	FixedIn     string `json:"fixedIn,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// VulnInfo has a vulnerability information and unsecure packages
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user