Files
go-admin/common/dto/search_test.go
T
zhangwenjian 9f2dec3036 fix🐛: 修正 GeneralDelDto.GetIds 重复追加 Id
该方法先在开头追加了 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 指出。
2026-08-14 15:35:55 +08:00

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)
}
})
}
}