mirror of
https://github.com/goharbor/harbor.git
synced 2024-12-18 22:57:38 +01:00
Exclude deleted projects when counting projects associated with group ID
Signed-off-by: Daniel Jiang <jiangd@vmware.com>
This commit is contained in:
parent
1b2efac156
commit
32ae0a6fa6
@ -282,7 +282,6 @@ func TestGetGroupProjects(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Error occurred when AddProject: %v", err)
|
t.Errorf("Error occurred when AddProject: %v", err)
|
||||||
}
|
}
|
||||||
defer dao.DeleteProject(projectID2)
|
|
||||||
groupID, err := AddUserGroup(models.UserGroup{
|
groupID, err := AddUserGroup(models.UserGroup{
|
||||||
GroupName: "test_group_03",
|
GroupName: "test_group_03",
|
||||||
GroupType: 1,
|
GroupType: 1,
|
||||||
@ -298,8 +297,18 @@ func TestGetGroupProjects(t *testing.T) {
|
|||||||
EntityType: "g",
|
EntityType: "g",
|
||||||
})
|
})
|
||||||
defer project.DeleteProjectMemberByID(pmid)
|
defer project.DeleteProjectMemberByID(pmid)
|
||||||
|
pmid2, err := project.AddProjectMember(models.Member{
|
||||||
|
ProjectID: projectID2,
|
||||||
|
EntityID: groupID,
|
||||||
|
EntityType: "g",
|
||||||
|
})
|
||||||
|
defer project.DeleteProjectMemberByID(pmid2)
|
||||||
|
if err := dao.DeleteProject(projectID2); err != nil {
|
||||||
|
t.Errorf("Error occurred when DeleteProject: %v", err)
|
||||||
|
}
|
||||||
type args struct {
|
type args struct {
|
||||||
query *models.ProjectQueryParam
|
query *models.ProjectQueryParam
|
||||||
|
groupIDs []int
|
||||||
}
|
}
|
||||||
member := &models.MemberQuery{
|
member := &models.MemberQuery{
|
||||||
Name: "grouptestu09",
|
Name: "grouptestu09",
|
||||||
@ -311,22 +320,30 @@ func TestGetGroupProjects(t *testing.T) {
|
|||||||
wantErr bool
|
wantErr bool
|
||||||
}{
|
}{
|
||||||
{"Query with group DN",
|
{"Query with group DN",
|
||||||
args{&models.ProjectQueryParam{
|
args{
|
||||||
|
query: &models.ProjectQueryParam{
|
||||||
Member: member,
|
Member: member,
|
||||||
}},
|
},
|
||||||
|
groupIDs: []int{groupID},
|
||||||
|
},
|
||||||
1, false},
|
1, false},
|
||||||
{"Query without group DN",
|
{"Query without group DN",
|
||||||
args{&models.ProjectQueryParam{}},
|
args{
|
||||||
1, false},
|
query: &models.ProjectQueryParam{
|
||||||
|
Member: member,
|
||||||
|
},
|
||||||
|
groupIDs: []int{},
|
||||||
|
},
|
||||||
|
0, false},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
got, err := dao.GetGroupProjects([]int{groupID}, tt.args.query)
|
got, err := dao.GetGroupProjects(tt.args.groupIDs, tt.args.query)
|
||||||
if (err != nil) != tt.wantErr {
|
if (err != nil) != tt.wantErr {
|
||||||
t.Errorf("GetGroupProjects() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("GetGroupProjects() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if len(got) < tt.wantSize {
|
if len(got) != tt.wantSize {
|
||||||
t.Errorf("GetGroupProjects() size: %v, want %v", len(got), tt.wantSize)
|
t.Errorf("GetGroupProjects() size: %v, want %v", len(got), tt.wantSize)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -349,7 +366,7 @@ func TestGetTotalGroupProjects(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Error occurred when AddProject: %v", err)
|
t.Errorf("Error occurred when AddProject: %v", err)
|
||||||
}
|
}
|
||||||
defer dao.DeleteProject(projectID2)
|
|
||||||
groupID, err := AddUserGroup(models.UserGroup{
|
groupID, err := AddUserGroup(models.UserGroup{
|
||||||
GroupName: "test_group_05",
|
GroupName: "test_group_05",
|
||||||
GroupType: 1,
|
GroupType: 1,
|
||||||
@ -365,8 +382,18 @@ func TestGetTotalGroupProjects(t *testing.T) {
|
|||||||
EntityType: "g",
|
EntityType: "g",
|
||||||
})
|
})
|
||||||
defer project.DeleteProjectMemberByID(pmid)
|
defer project.DeleteProjectMemberByID(pmid)
|
||||||
|
pmid2, err := project.AddProjectMember(models.Member{
|
||||||
|
ProjectID: projectID2,
|
||||||
|
EntityID: groupID,
|
||||||
|
EntityType: "g",
|
||||||
|
})
|
||||||
|
defer project.DeleteProjectMemberByID(pmid2)
|
||||||
|
if err := dao.DeleteProject(projectID2); err != nil { // deleted project should not be counted
|
||||||
|
t.Errorf("Error occurred when delete project: %v", err)
|
||||||
|
}
|
||||||
type args struct {
|
type args struct {
|
||||||
query *models.ProjectQueryParam
|
query *models.ProjectQueryParam
|
||||||
|
groupIDs []int
|
||||||
}
|
}
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
@ -375,20 +402,33 @@ func TestGetTotalGroupProjects(t *testing.T) {
|
|||||||
wantErr bool
|
wantErr bool
|
||||||
}{
|
}{
|
||||||
{"Query with group ID",
|
{"Query with group ID",
|
||||||
args{&models.ProjectQueryParam{}},
|
args{
|
||||||
1, false},
|
query: &models.ProjectQueryParam{
|
||||||
|
Member: &models.MemberQuery{
|
||||||
|
Name: "member_test_01",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
groupIDs: []int{groupID},
|
||||||
|
},
|
||||||
|
2, false},
|
||||||
{"Query without group ID",
|
{"Query without group ID",
|
||||||
args{&models.ProjectQueryParam{}},
|
args{
|
||||||
|
query: &models.ProjectQueryParam{
|
||||||
|
Member: &models.MemberQuery{
|
||||||
|
Name: "member_test_01",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
groupIDs: []int{}},
|
||||||
1, false},
|
1, false},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
got, err := dao.GetTotalGroupProjects([]int{groupID}, tt.args.query)
|
got, err := dao.GetTotalGroupProjects(tt.args.groupIDs, tt.args.query)
|
||||||
if (err != nil) != tt.wantErr {
|
if (err != nil) != tt.wantErr {
|
||||||
t.Errorf("GetGroupProjects() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("GetGroupProjects() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if got < tt.wantSize {
|
if got != tt.wantSize {
|
||||||
t.Errorf("GetGroupProjects() size: %v, want %v", got, tt.wantSize)
|
t.Errorf("GetGroupProjects() size: %v, want %v", got, tt.wantSize)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -166,7 +166,7 @@ func GetGroupProjects(groupIDs []int, query *models.ProjectQueryParam) ([]*model
|
|||||||
from project p
|
from project p
|
||||||
left join project_member pm on p.project_id = pm.project_id
|
left join project_member pm on p.project_id = pm.project_id
|
||||||
left join user_group ug on ug.id = pm.entity_id and pm.entity_type = 'g'
|
left join user_group ug on ug.id = pm.entity_id and pm.entity_type = 'g'
|
||||||
where ug.id in ( %s )`,
|
where p.deleted=false and ug.id in ( %s )`,
|
||||||
sql, groupIDCondition)
|
sql, groupIDCondition)
|
||||||
}
|
}
|
||||||
sql = sql + ` order by name`
|
sql = sql + ` order by name`
|
||||||
@ -192,7 +192,7 @@ func GetTotalGroupProjects(groupIDs []int, query *models.ProjectQueryParam) (int
|
|||||||
from project p
|
from project p
|
||||||
left join project_member pm on p.project_id = pm.project_id
|
left join project_member pm on p.project_id = pm.project_id
|
||||||
left join user_group ug on ug.id = pm.entity_id and pm.entity_type = 'g'
|
left join user_group ug on ug.id = pm.entity_id and pm.entity_type = 'g'
|
||||||
where ug.id in ( %s )) t`,
|
where p.deleted=false and ug.id in ( %s )) t`,
|
||||||
sqlCondition, groupIDCondition)
|
sqlCondition, groupIDCondition)
|
||||||
}
|
}
|
||||||
log.Debugf("query sql:%v", sql)
|
log.Debugf("query sql:%v", sql)
|
||||||
|
Loading…
Reference in New Issue
Block a user