mirror of
https://github.com/goharbor/harbor.git
synced 2025-01-03 14:37:44 +01:00
Merge pull request #5070 from ywk253100/180601_label_fuzzy_match
Fix #4742: fuzzy match label name
This commit is contained in:
commit
255a6d6f95
@ -70,7 +70,11 @@ func ListLabels(query *models.LabelQuery) ([]*models.Label, error) {
|
|||||||
func getLabelQuerySetter(query *models.LabelQuery) orm.QuerySeter {
|
func getLabelQuerySetter(query *models.LabelQuery) orm.QuerySeter {
|
||||||
qs := GetOrmer().QueryTable(&models.Label{})
|
qs := GetOrmer().QueryTable(&models.Label{})
|
||||||
if len(query.Name) > 0 {
|
if len(query.Name) > 0 {
|
||||||
qs = qs.Filter("Name", query.Name)
|
if query.FuzzyMatchName {
|
||||||
|
qs = qs.Filter("Name__icontains", query.Name)
|
||||||
|
} else {
|
||||||
|
qs = qs.Filter("Name", query.Name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if len(query.Level) > 0 {
|
if len(query.Level) > 0 {
|
||||||
qs = qs.Filter("Level", query.Level)
|
qs = qs.Filter("Level", query.Level)
|
||||||
|
@ -72,7 +72,7 @@ func TestMethodsOfLabel(t *testing.T) {
|
|||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
assert.Equal(t, int64(1), total)
|
assert.Equal(t, int64(1), total)
|
||||||
|
|
||||||
// list
|
// list: exact match
|
||||||
labels, err := ListLabels(&models.LabelQuery{
|
labels, err := ListLabels(&models.LabelQuery{
|
||||||
Scope: common.LabelScopeProject,
|
Scope: common.LabelScopeProject,
|
||||||
ProjectID: 1,
|
ProjectID: 1,
|
||||||
@ -81,11 +81,21 @@ func TestMethodsOfLabel(t *testing.T) {
|
|||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
assert.Equal(t, 1, len(labels))
|
assert.Equal(t, 1, len(labels))
|
||||||
|
|
||||||
// list
|
// list: fuzzy match
|
||||||
|
labels, err = ListLabels(&models.LabelQuery{
|
||||||
|
Scope: common.LabelScopeProject,
|
||||||
|
ProjectID: 1,
|
||||||
|
Name: label.Name[:1],
|
||||||
|
FuzzyMatchName: true,
|
||||||
|
})
|
||||||
|
require.Nil(t, err)
|
||||||
|
assert.Equal(t, 1, len(labels))
|
||||||
|
|
||||||
|
// list: not exist
|
||||||
labels, err = ListLabels(&models.LabelQuery{
|
labels, err = ListLabels(&models.LabelQuery{
|
||||||
Scope: common.LabelScopeProject,
|
Scope: common.LabelScopeProject,
|
||||||
ProjectID: 1,
|
ProjectID: 1,
|
||||||
Name: "not_exist_label",
|
Name: label.Name[:1],
|
||||||
})
|
})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
assert.Equal(t, 0, len(labels))
|
assert.Equal(t, 0, len(labels))
|
||||||
|
@ -43,10 +43,11 @@ func (l *Label) TableName() string {
|
|||||||
|
|
||||||
// LabelQuery : query parameters for labels
|
// LabelQuery : query parameters for labels
|
||||||
type LabelQuery struct {
|
type LabelQuery struct {
|
||||||
Name string
|
Name string
|
||||||
Level string
|
FuzzyMatchName bool // the property is used to determine the query for lable name is fuzzy matching or exaxt matching
|
||||||
Scope string
|
Level string
|
||||||
ProjectID int64
|
Scope string
|
||||||
|
ProjectID int64
|
||||||
Pagination
|
Pagination
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,8 +162,9 @@ func (l *LabelAPI) Get() {
|
|||||||
// List labels according to the query strings
|
// List labels according to the query strings
|
||||||
func (l *LabelAPI) List() {
|
func (l *LabelAPI) List() {
|
||||||
query := &models.LabelQuery{
|
query := &models.LabelQuery{
|
||||||
Name: l.GetString("name"),
|
Name: l.GetString("name"),
|
||||||
Level: common.LabelLevelUser,
|
FuzzyMatchName: true,
|
||||||
|
Level: common.LabelLevelUser,
|
||||||
}
|
}
|
||||||
|
|
||||||
scope := l.GetString("scope")
|
scope := l.GetString("scope")
|
||||||
|
@ -243,7 +243,7 @@ func TestLabelAPIList(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
Scope: "p",
|
Scope: "p",
|
||||||
ProjectID: 1,
|
ProjectID: 1,
|
||||||
Name: "test",
|
Name: "tes",
|
||||||
},
|
},
|
||||||
}, &labels)
|
}, &labels)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
Loading…
Reference in New Issue
Block a user