mirror of https://github.com/goharbor/harbor.git
153 lines
3.8 KiB
Go
153 lines
3.8 KiB
Go
// Copyright Project Harbor Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package orm
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/beego/beego/v2/client/orm"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/goharbor/harbor/src/lib/q"
|
|
)
|
|
|
|
type foo struct {
|
|
Field1 string `orm:"-"`
|
|
Field2 string `orm:"column(customized_field2)" filter:"false"`
|
|
Field3 string `sort:"false"`
|
|
Field4 string `sort:"default:desc"`
|
|
}
|
|
|
|
func (f *foo) FilterByField5(context.Context, orm.QuerySeter, string, interface{}) orm.QuerySeter {
|
|
return nil
|
|
}
|
|
|
|
func (f *foo) OtherFunc() {}
|
|
|
|
type bar struct {
|
|
Field1 string
|
|
Field2 string
|
|
}
|
|
|
|
func (b *bar) GetDefaultSorts() []*q.Sort {
|
|
return []*q.Sort{
|
|
{
|
|
Key: "Field1",
|
|
DESC: true,
|
|
},
|
|
{
|
|
Key: "Field2",
|
|
DESC: false,
|
|
},
|
|
}
|
|
}
|
|
|
|
func TestParseQueryObject(t *testing.T) {
|
|
require := require.New(t)
|
|
assert := assert.New(t)
|
|
metadata := parseModel(&foo{})
|
|
require.NotNil(metadata)
|
|
require.Len(metadata.Keys, 8)
|
|
|
|
key, exist := metadata.Keys["Field2"]
|
|
require.True(exist)
|
|
assert.Equal("Field2", key.Name)
|
|
assert.False(key.Filterable)
|
|
assert.True(key.Sortable)
|
|
|
|
key, exist = metadata.Keys["customized_field2"]
|
|
require.True(exist)
|
|
assert.Equal("customized_field2", key.Name)
|
|
assert.False(key.Filterable)
|
|
assert.True(key.Sortable)
|
|
|
|
key, exist = metadata.Keys["Field3"]
|
|
require.True(exist)
|
|
assert.Equal("Field3", key.Name)
|
|
assert.True(key.Filterable)
|
|
assert.False(key.Sortable)
|
|
|
|
key, exist = metadata.Keys["field3"]
|
|
require.True(exist)
|
|
assert.Equal("field3", key.Name)
|
|
assert.True(key.Filterable)
|
|
assert.False(key.Sortable)
|
|
|
|
key, exist = metadata.Keys["Field4"]
|
|
require.True(exist)
|
|
assert.Equal("Field4", key.Name)
|
|
assert.True(key.Filterable)
|
|
assert.True(key.Sortable)
|
|
|
|
key, exist = metadata.Keys["field4"]
|
|
require.True(exist)
|
|
assert.Equal("field4", key.Name)
|
|
assert.True(key.Filterable)
|
|
assert.True(key.Sortable)
|
|
|
|
key, exist = metadata.Keys["Field5"]
|
|
require.True(exist)
|
|
assert.Equal("Field5", key.Name)
|
|
assert.True(key.Filterable)
|
|
assert.False(key.Sortable)
|
|
|
|
key, exist = metadata.Keys["field5"]
|
|
require.True(exist)
|
|
assert.Equal("field5", key.Name)
|
|
assert.True(key.Filterable)
|
|
assert.False(key.Sortable)
|
|
|
|
require.Len(metadata.DefaultSorts, 1)
|
|
assert.Equal("Field4", metadata.DefaultSorts[0].Key)
|
|
assert.True(metadata.DefaultSorts[0].DESC)
|
|
|
|
metadata = parseModel(&bar{})
|
|
require.NotNil(metadata)
|
|
require.Len(metadata.Keys, 4)
|
|
require.Len(metadata.DefaultSorts, 2)
|
|
assert.Equal("Field1", metadata.DefaultSorts[0].Key)
|
|
assert.True(metadata.DefaultSorts[0].DESC)
|
|
assert.Equal("Field2", metadata.DefaultSorts[1].Key)
|
|
assert.False(metadata.DefaultSorts[1].DESC)
|
|
}
|
|
|
|
func Test_snakeCase(t *testing.T) {
|
|
type args struct {
|
|
str string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want string
|
|
}{
|
|
{"ProjectID", args{"ProjectID"}, "project_id"},
|
|
{"project_id", args{"project_id"}, "project_id"},
|
|
{"RepositoryName", args{"RepositoryName"}, "repository_name"},
|
|
{"repository_name", args{"repository_name"}, "repository_name"},
|
|
{"ProfileURL", args{"ProfileURL"}, "profile_url"},
|
|
{"City", args{"City"}, "city"},
|
|
{"Address1", args{"Address1"}, "address1"},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := snakeCase(tt.args.str); got != tt.want {
|
|
t.Errorf("snakeCase() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|