mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-09-21 18:20:50 +00:00
该方法先在开头追加了 Id,随后 else 分支中又追加一次:仅传 Id 时返回
[5 5],删除接口会对同一条记录执行两次 DELETE。
if g.Id != 0 { ids = append(ids, g.Id) }
if len(g.Ids) > 0 { ... } else {
if g.Id > 0 { ids = append(ids, g.Id) } // 重复
}
去掉冗余分支,同时将首个判断由 != 0 收紧为 > 0,与 Ids 中逐个元素的
过滤条件保持一致(负数 Id 无意义)。
补充单元测试,覆盖仅 Id、仅 Ids、二者并存、含非正数、全空回退等场景。
问题由 PR #848 指出。
33 lines
927 B
Go
33 lines
927 B
Go
package dto
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
// GetIds 曾在 else 分支中重复追加 Id:仅传 Id 时返回 [5 5],
|
|
// 导致删除接口对同一条记录执行两次。
|
|
func TestGeneralDelDtoGetIds(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
dto GeneralDelDto
|
|
want []int
|
|
}{
|
|
{"仅 Id", GeneralDelDto{Id: 5}, []int{5}},
|
|
{"仅 Ids", GeneralDelDto{Ids: []int{1, 2}}, []int{1, 2}},
|
|
{"Id 与 Ids 并存", GeneralDelDto{Id: 5, Ids: []int{1, 2}}, []int{5, 1, 2}},
|
|
{"Ids 含非正数被过滤", GeneralDelDto{Ids: []int{0, -1, 3}}, []int{3}},
|
|
{"Id 为 0 视为未传", GeneralDelDto{Id: 0, Ids: []int{7}}, []int{7}},
|
|
{"全部为空时回退到 0(全量删除约定)", GeneralDelDto{}, []int{0}},
|
|
}
|
|
|
|
for _, c := range cases {
|
|
t.Run(c.name, func(t *testing.T) {
|
|
got := c.dto.GetIds()
|
|
if !reflect.DeepEqual(got, c.want) {
|
|
t.Errorf("GetIds() = %v, want %v", got, c.want)
|
|
}
|
|
})
|
|
}
|
|
}
|