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