package service import ( "database/sql" "errors" "testing" "cmautobuy/admin/repository" _ "modernc.org/sqlite" ) func TestDeleteInnerCodes_去重后物理删除(t *testing.T) { db, err := sql.Open("sqlite", "file:service_inner_code_delete?mode=memory&cache=shared") if err != nil { t.Fatal(err) } defer db.Close() if _, err := db.Exec(`CREATE TABLE syb_inner_code_records ( id INTEGER PRIMARY KEY,status TEXT NOT NULL,deleted_at TEXT ); INSERT INTO syb_inner_code_records(id,status) VALUES(1,'pending'),(2,'queued')`); err != nil { t.Fatal(err) } count, err := DeleteInnerCodes(db, []int64{1, 1, 2, 0, -1}) if err != nil || count != 2 { t.Fatalf("count=%d err=%v", count, err) } var remaining int if err := db.QueryRow(`SELECT COUNT(*) FROM syb_inner_code_records`).Scan(&remaining); err != nil { t.Fatal(err) } if remaining != 0 { t.Fatalf("物理删除后仍剩余 %d 条记录", remaining) } } func TestDeleteInnerCodes_回写中错误原样返回(t *testing.T) { db, err := sql.Open("sqlite", "file:service_inner_code_delete_applying?mode=memory&cache=shared") if err != nil { t.Fatal(err) } defer db.Close() if _, err := db.Exec(`CREATE TABLE syb_inner_code_records ( id INTEGER PRIMARY KEY,status TEXT NOT NULL,deleted_at TEXT ); INSERT INTO syb_inner_code_records(id,status) VALUES(1,'applying')`); err != nil { t.Fatal(err) } if _, err := DeleteInnerCodes(db, []int64{1}); !errors.Is(err, repository.ErrInnerCodeDeleteApplying) { t.Fatalf("期望正在回写错误,实际 %v", err) } }