github.com/erda-project/erda-infra@v1.0.9/providers/mysql/v2/tx_test.go (about) 1 // Copyright (c) 2021 Terminus, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package v2_test 16 17 //import ( 18 // "os" 19 // "path/filepath" 20 // "strconv" 21 // "testing" 22 // 23 // "gorm.io/driver/sqlite" 24 // "gorm.io/gorm" 25 // 26 // v2 "github.com/erda-project/erda-infra/providers/mysql/v2" 27 //) 28 // 29 //var dsn = filepath.Join(os.TempDir(), "gorm.db") 30 //var tx *v2.TX 31 // 32 //type User struct { 33 // Age int64 `gorm:"type:BIGINT"` 34 // Name string 35 //} 36 // 37 //func TestTX(t *testing.T) { 38 // openDB(t) 39 // defer closeDB() 40 // 41 // if err := tx.DB().AutoMigrate(new(User)); err != nil { 42 // t.Fatalf("failed to migrate user: %v", err) 43 // } 44 // 45 // var ( 46 // name = v2.Col("name") 47 // age = v2.Col("age") 48 // ) 49 // 50 // var prepare = func(t *testing.T) { 51 // var users []User 52 // for i := 0; i < 10; i++ { 53 // users = append(users, User{Age: int64(i), Name: "dspo-" + strconv.Itoa(i)}) 54 // } 55 // // INSERT INTO `users` (`age`,`name`) VALUES (0,"dspo-0"),(1,"dspo-1"),(2,"dspo-2"),(3,"dspo-3"),(4,"dspo-4"),(5,"dspo-5"),(6,"dspo-6"),(7,"dspo-7"),(8,"dspo-8"),(9,"dspo-9") 56 // if err := tx.CreateInBatches(users, len(users)); err != nil { 57 // t.Fatal(err) 58 // } 59 // total, err := tx.List(new([]User)) 60 // if err != nil { 61 // t.Fatal(err) 62 // } 63 // if total != 10 { 64 // t.Fatalf("expects total: %v, got: %v", 11, total) 65 // } 66 // } 67 // var clear = func(t *testing.T) { 68 // // DELETE FROM `users` WHERE 1=1 69 // _, err := tx.Delete(new(User), v2.Where("1=1")) 70 // if err != nil { 71 // t.Fatal(err) 72 // } 73 // total, err := tx.List(new([]User)) 74 // if err != nil { 75 // t.Fatal(err) 76 // } 77 // if total != 0 { 78 // t.Fatalf("expects total: %v, got: %v", 0, total) 79 // } 80 // } 81 // 82 // t.Run("TX.Create", func(t *testing.T) { 83 // defer t.Run("clear", clear) 84 // 85 // // INSERT INTO `users` (`age`,`name`) VALUES (10,"dspo-10") 86 // if err := tx.Create(&User{Age: 10, Name: "dspo-10"}); err != nil { 87 // t.Fatalf("failed to Create: %v", err) 88 // } 89 // var user User 90 // // SELECT * FROM `users` WHERE age = 10 AND name = "dspo-10" ORDER BY `users`.`age` LIMIT 1 91 // ok, err := tx.Get(&user, age.Is(10), name.Is("dspo-10")) 92 // if err != nil { 93 // t.Fatal(err) 94 // } 95 // if !ok { 96 // t.Fatal("not ok") 97 // } 98 // }) 99 // 100 // t.Run("TX.CreateInBatches", func(t *testing.T) { 101 // prepare(t) 102 // clear(t) 103 // }) 104 // 105 // t.Run("TX.Delete", func(t *testing.T) { 106 // prepare(t) 107 // defer clear(t) 108 // 109 // var users []User 110 // for i := 20; i < 30; i++ { 111 // users = append(users, User{Age: int64(i), Name: "six-" + strconv.Itoa(i)}) 112 // } 113 // if err := tx.CreateInBatches(users, len(users)); err != nil { 114 // t.Fatal(err) 115 // } 116 // total, err := tx.Delete(new(User), age.GreaterThan(30)) 117 // if err != nil { 118 // t.Fatal(err) 119 // } 120 // if total != 0 { 121 // t.Fatalf("expects total: %v, got: %v", 0, total) 122 // } 123 // 124 // total, err = tx.Delete(new(User), name.Like("six-%")) 125 // if err != nil { 126 // t.Fatal(err) 127 // } 128 // if total != 10 { 129 // t.Fatalf("expects total: %v, got: %v", 10, total) 130 // } 131 // }) 132 // 133 // t.Run("TX.Updates by map", func(t *testing.T) { 134 // prepare(t) 135 // defer clear(t) 136 // 137 // var user User 138 // var values = map[string]interface{}{ 139 // "name": "cmc-10", 140 // "age": int64(100), 141 // } 142 // if err := tx.Updates(&user, values, name.Is("dspo-10")); err != nil { 143 // t.Fatal(err) 144 // } 145 // if user.Name != values["name"] { 146 // t.Fatalf("expects user.Name: %v, got: %v", values["name"], user.Name) 147 // } 148 // if user.Age != values["age"].(int64) { 149 // t.Fatalf("expects user.Age: %v, got: %v", values["age"], user.Age) 150 // } 151 // }) 152 // 153 // t.Run("TX.Updates by struct", func(t *testing.T) { 154 // prepare(t) 155 // defer clear(t) 156 // 157 // var user User 158 // var values = User{ 159 // Age: 0, 160 // Name: "0", 161 // } 162 // if err := tx.Updates(&user, values, name.Is("cmc-10")); err != nil { 163 // t.Fatal(err) 164 // } 165 // if user.Age != values.Age { 166 // t.Fatalf("expects user.Age: %v, got: %v", values, user.Age) 167 // } 168 // if user.Name != values.Name { 169 // t.Fatalf("expects user.Name: %v, got: %v", values.Name, user.Name) 170 // } 171 // }) 172 // 173 // t.Run("TX.SetColumns", func(t *testing.T) { 174 // prepare(t) 175 // defer clear(t) 176 // 177 // var user User 178 // var value = User{Name: "cmc-10", Age: 10} 179 // if err := tx.SetColumns(&user, name.Is("0"), name.Set(value.Name), age.Set(value.Age)); err != nil { 180 // t.Fatal(err) 181 // } 182 // if user.Name != value.Name { 183 // t.Fatalf("expects user.Name: %v, got: %v", value.Name, user.Name) 184 // } 185 // if user.Age != value.Age { 186 // t.Fatalf("expects user.Age: %v, got: %v", value.Age, user.Age) 187 // } 188 // }) 189 // 190 // t.Run("Where", func(t *testing.T) { 191 // t.Log("ignore") 192 // }) 193 // 194 // t.Run("Wheres", func(t *testing.T) { 195 // prepare(t) 196 // defer clear(t) 197 // 198 // var user User 199 // ok, err := tx.Get(&user, v2.Wheres(map[string]interface{}{"name": "dspo-1"})) 200 // if err != nil { 201 // t.Fatal(err) 202 // } 203 // if !ok { 204 // t.Fatalf("expects ok: %v, got: %v", true, ok) 205 // } 206 // if user.Name != "dspo-1" || user.Age != 1 { 207 // t.Fatalf("expects user.Name: %v, user.Age: %v, got name: %v, age: %v", 208 // "dspo-1", 1, user.Name, user.Age) 209 // } 210 // }) 211 // 212 // t.Run("TX.List", func(t *testing.T) { 213 // prepare(t) 214 // defer clear(t) 215 // 216 // var users []User 217 // total, err := tx.List(&users) 218 // if err != nil { 219 // t.Fatal(err) 220 // } 221 // if total != 10 { 222 // t.Fatalf("expects total: %v, got: %v", 11, total) 223 // } 224 // if len(users) != 10 { 225 // t.Fatalf("expects length of users: %v, got: %v", 11, len(users)) 226 // } 227 // }) 228 // 229 // t.Run("TX.List with conditions", func(t *testing.T) { 230 // prepare(t) 231 // defer clear(t) 232 // 233 // var users []User 234 // total, err := tx.List(&users, name.Like("dspo%"), age.GreaterThan(5)) 235 // if err != nil { 236 // t.Fatal(err) 237 // } 238 // if total != 4 { 239 // t.Fatalf("expects total: %v, got: %v", 4, total) 240 // } 241 // if len(users) != 4 { 242 // t.Fatalf("expects length of users: %v, got: %v", 4, len(users)) 243 // } 244 // }) 245 // 246 // t.Run("TX.List order by DESC", func(t *testing.T) { 247 // prepare(t) 248 // defer clear(t) 249 // 250 // var users []User 251 // total, err := tx.List(&users, age.DESC()) 252 // if err != nil { 253 // t.Fatal(err) 254 // } 255 // if total != 10 { 256 // t.Fatalf("expects total: %v, got: %v", 11, total) 257 // } 258 // if users[0].Age != 9 { 259 // t.Fatalf("expects users[0].Age: %v, got: %v", 10, users[0].Age) 260 // } 261 // }) 262 // 263 // t.Run("TX.List order by ASC", func(t *testing.T) { 264 // prepare(t) 265 // defer clear(t) 266 // 267 // var users []User 268 // total, err := tx.List(&users, age.ASC()) 269 // if err != nil { 270 // t.Fatal(err) 271 // } 272 // if total != 10 { 273 // t.Fatalf("expects total: %v, got: %v", 11, total) 274 // } 275 // if users[0].Age != 0 { 276 // t.Fatalf("expects users[0].Age: %v, got: %v", 0, users[0].Age) 277 // } 278 // }) 279 // 280 // t.Run("TX.List by paging", func(t *testing.T) { 281 // prepare(t) 282 // defer clear(t) 283 // 284 // var users []User 285 // total, err := tx.List(&users, v2.Paging(5, 1)) 286 // if err != nil { 287 // t.Fatal(err) 288 // } 289 // if total != 10 { 290 // t.Fatalf("expects total: %v, got: %v", 11, total) 291 // } 292 // if len(users) != 5 { 293 // t.Fatalf("expects length of users: %v, got: %v", 5, len(users)) 294 // } 295 // 296 // if total != 10 { 297 // t.Fatalf("expects total: %v, got: %v", 11, total) 298 // } 299 // if len(users) != 5 { 300 // t.Fatalf("expects length of users: %v, got: %v", 5, len(users)) 301 // } 302 // 303 // // SELECT * FROM `users` 304 // total, err = tx.List(&users, v2.Paging(-1, 0)) 305 // if err != nil { 306 // t.Fatal(err) 307 // } 308 // if total != 10 { 309 // t.Fatalf("expects total: %v, got: %v", 10, total) 310 // } 311 // }) 312 // 313 // t.Run("TX.Get", func(t *testing.T) { 314 // prepare(t) 315 // defer clear(t) 316 // 317 // var user User 318 // ok, err := tx.Get(&user) 319 // if err != nil { 320 // t.Fatal(err) 321 // } 322 // if !ok { 323 // t.Fatalf("expects ok: %v, got: %v", true, ok) 324 // } 325 // }) 326 // 327 // t.Run("Tx.Get with conditions", func(t *testing.T) { 328 // prepare(t) 329 // defer clear(t) 330 // 331 // var user User 332 // ok, err := tx.Get(&user, name.Is("dspo-2")) 333 // if err != nil { 334 // t.Fatal(err) 335 // } 336 // if !ok { 337 // t.Fatalf("expects ok: %v, got: %v", true, ok) 338 // } 339 // 340 // ok, err = tx.Get(&user, name.Is("xxx")) 341 // if err != nil { 342 // t.Fatal(err) 343 // } 344 // if ok { 345 // t.Fatalf("expects ok: %v, got: %v", false, ok) 346 // } 347 // }) 348 // 349 // t.Run("WhereColumn.Is", func(t *testing.T) { 350 // t.Log("ignore") 351 // }) 352 // 353 // t.Run("WhereColumn.In", func(t *testing.T) { 354 // prepare(t) 355 // defer clear(t) 356 // 357 // var users []User 358 // total, err := tx.List(&users, name.In([]interface{}{"dspo-1", "dspo-2", "six-1", "six-2"})) 359 // if err != nil { 360 // t.Fatal(err) 361 // } 362 // if total != 2 { 363 // t.Fatalf("expects total: %v, got: %v", 2, total) 364 // } 365 // if len(users) != 2 { 366 // t.Fatalf("expects length of users: %v, got: %v", 2, len(users)) 367 // } 368 // }) 369 // 370 // t.Run("WhereColumn.InMap", func(t *testing.T) { 371 // prepare(t) 372 // defer clear(t) 373 // 374 // var users []User 375 // total, err := tx.List(&users, name.InMap(map[interface{}]struct{}{ 376 // "dspo-1": {}, 377 // "dspo-2": {}, 378 // "six-1": {}, 379 // "six-2": {}, 380 // })) 381 // if err != nil { 382 // t.Fatal(err) 383 // } 384 // if total != 2 { 385 // t.Fatalf("expects total: %v, got: %v", 2, total) 386 // } 387 // if len(users) != 2 { 388 // t.Fatalf("expects length of users: %v, got: %v", 2, len(users)) 389 // } 390 // }) 391 // 392 // t.Run("WhereColumn.Like", func(t *testing.T) { 393 // t.Log("ignore") 394 // }) 395 // 396 // t.Run("WhereColumn.GreaterThan", func(t *testing.T) { 397 // t.Log("ignore") 398 // }) 399 // 400 // t.Run("WhereColumn.EqGreaterThan", func(t *testing.T) { 401 // prepare(t) 402 // defer clear(t) 403 // 404 // var users []User 405 // total, err := tx.List(&users, age.EqGreaterThan(5)) 406 // if err != nil { 407 // t.Fatal(err) 408 // } 409 // if total != 5 { 410 // t.Fatalf("expects total: %v, got: %v", 5, total) 411 // } 412 // }) 413 // 414 // t.Run("WhereColumn.LessThan", func(t *testing.T) { 415 // prepare(t) 416 // defer clear(t) 417 // 418 // var users []User 419 // total, err := tx.List(&users, age.LessThan(5)) 420 // if err != nil { 421 // t.Fatal(err) 422 // } 423 // if total != 5 { 424 // t.Fatalf("expects total: %v, got: %v", 5, total) 425 // } 426 // }) 427 // 428 // t.Run("WhereColumn.EqLessThan", func(t *testing.T) { 429 // prepare(t) 430 // defer clear(t) 431 // 432 // var users []User 433 // total, err := tx.List(&users, age.EqLessThan(5)) 434 // if err != nil { 435 // t.Fatal(err) 436 // } 437 // if total != 6 { 438 // t.Fatalf("expects total: %v, got: %v", 6, total) 439 // } 440 // }) 441 // 442 // t.Run("OrderColumn.DESC", func(t *testing.T) { 443 // t.Log("ignore") 444 // }) 445 // 446 // t.Run("OrderColumn.ASC", func(t *testing.T) { 447 // t.Log("ignore") 448 // }) 449 // 450 // t.Run("SetColumn.Set", func(t *testing.T) { 451 // t.Log("ignore") 452 // }) 453 // 454 // t.Run("WhereValue.In", func(t *testing.T) { 455 // prepare(t) 456 // defer clear(t) 457 // 458 // var users []User 459 // total, err := tx.List(&users, v2.Value("dspo-1").In("name", "age")) 460 // if err != nil { 461 // t.Fatal(err) 462 // } 463 // if total != 1 { 464 // t.Fatalf("expects total: %v, got: %v", 1, total) 465 // } 466 // }) 467 // 468 // t.Run("Paging", func(t *testing.T) { 469 // t.Log("ignore") 470 // }) 471 // 472 // t.Run("OrderBy", func(t *testing.T) { 473 // prepare(t) 474 // defer clear(t) 475 // 476 // var users []User 477 // total, err := tx.List(&users, v2.OrderBy("age", v2.DESC)) 478 // if err != nil { 479 // t.Fatal(err) 480 // } 481 // if total != 10 { 482 // t.Fatalf("expect total: %v, got: %v", 10, total) 483 // } 484 // if users[0].Name != "dspo-9" || users[0].Age != 9 { 485 // t.Fatalf("expects user[0].Name: %v, user[0].Age: %v, got name: %v, age: %v", 486 // "dspo-0", 0, users[0].Name, users[0].Age) 487 // } 488 // 489 // _, err = tx.List(&users, v2.OrderBy("age", v2.ASC)) 490 // if err != nil { 491 // t.Fatal(err) 492 // } 493 // if users[0].Name != "dspo-0" || users[0].Age != 0 { 494 // t.Fatalf("expects user[0].Name: %v, user[0].Age: %v, got name: %v, age: %v", 495 // "dspo-0", 0, users[0].Name, users[0].Age) 496 // } 497 // }) 498 //} 499 // 500 //func openDB(t *testing.T) { 501 // if tx != nil { 502 // return 503 // } 504 // closeDB() 505 // db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{}) 506 // if err != nil { 507 // t.Fatalf("failed to open %s: %v", dsn, err) 508 // } 509 // tx = v2.NewTx(db.Debug()) 510 //} 511 // 512 //func closeDB() { 513 // os.Remove(dsn) 514 //}