github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/sqlx/gen/test/user_test.go (about)

     1  package test
     2  
     3  import (
     4  	"testing"
     5  
     6  	_ "github.com/go-sql-driver/mysql"
     7  	"github.com/google/uuid"
     8  	"github.com/sirupsen/logrus"
     9  	"github.com/stretchr/testify/assert"
    10  
    11  	"github.com/artisanhe/tools/courier/enumeration"
    12  	"github.com/artisanhe/tools/sqlx"
    13  )
    14  
    15  var db *sqlx.DB
    16  
    17  func init() {
    18  	logrus.SetLevel(logrus.DebugLevel)
    19  	db, _ = sqlx.Open("logger:mysql", "root:root@tcp(localhost:3306)/?charset=utf8&parseTime=true&interpolateParams=true&autocommit=true&loc=Local")
    20  }
    21  
    22  func TestUserCRUD(t *testing.T) {
    23  	tt := assert.New(t)
    24  
    25  	DBTest.MigrateTo(db, false)
    26  	DBTest.MigrateTo(db, false)
    27  
    28  	defer func() {
    29  		err := db.Do(DBTest.Drop()).Err()
    30  		tt.Nil(err)
    31  	}()
    32  
    33  	{
    34  		user := User{}
    35  		user.Name = uuid.New().String()
    36  
    37  		err := user.Create(db)
    38  		tt.Nil(err)
    39  		tt.Equal(uint64(1), user.ID)
    40  
    41  		user.Gender = GenderMale
    42  		{
    43  			err := user.CreateOnDuplicateWithUpdateFields(db, []string{"Gender"})
    44  			tt.Nil(err)
    45  		}
    46  		{
    47  			userForFetch := User{
    48  				Name: user.Name,
    49  			}
    50  			err := userForFetch.FetchByName(db)
    51  			tt.Nil(err)
    52  
    53  			tt.Equal(user.Gender, userForFetch.Gender)
    54  		}
    55  		{
    56  			{
    57  				userForDelete := User{
    58  					Name: user.Name,
    59  				}
    60  				err := userForDelete.SoftDeleteByName(db)
    61  				tt.Nil(err)
    62  
    63  				userForSelect := User{
    64  					Name: user.Name,
    65  				}
    66  				stmt := userForSelect.T().Select().Where(userForSelect.Fields().Name.Eq(userForSelect.Name))
    67  				errForSelect := db.Do(stmt).Scan(&userForSelect).Err()
    68  				tt.Nil(errForSelect)
    69  				tt.Equal(enumeration.BOOL__FALSE, userForSelect.Enabled)
    70  
    71  				{
    72  					err := user.Create(db)
    73  					tt.Nil(err)
    74  					tt.Equal(uint64(3), user.ID)
    75  
    76  					userForDelete := User{}
    77  					errForSoftDelete := userForDelete.SoftDeleteByName(db)
    78  					tt.Nil(errForSoftDelete)
    79  
    80  					users := []User{}
    81  					fieldsOfUser := userForSelect.Fields()
    82  					stmt := user.T().Select().Where(fieldsOfUser.Enabled.Eq(enumeration.BOOL__FALSE))
    83  					errForSelect := db.Do(stmt).Scan(&users).Err()
    84  					tt.Nil(errForSelect)
    85  					tt.Len(users, 1)
    86  					tt.Equal(uint64(1), users[0].ID)
    87  				}
    88  			}
    89  		}
    90  	}
    91  }
    92  
    93  func TestUserList(t *testing.T) {
    94  	tt := assert.New(t)
    95  
    96  	DBTest.MigrateTo(db, false)
    97  	defer func() {
    98  		err := db.Do(DBTest.Drop()).Err()
    99  		tt.Nil(err)
   100  	}()
   101  
   102  	createUser := func() {
   103  		user := User{}
   104  		user.Name = uuid.New().String()
   105  		err := user.Create(db)
   106  		tt.Nil(err)
   107  	}
   108  
   109  	for i := 0; i < 10; i++ {
   110  		createUser()
   111  	}
   112  
   113  	list := UserList{}
   114  	count, err := list.FetchList(db, -1, -1)
   115  	tt.Nil(err)
   116  	tt.Equal(int32(10), count)
   117  	tt.Len(list, 10)
   118  
   119  	names := []string{}
   120  	for _, user := range list {
   121  		names = append(names, user.Name)
   122  	}
   123  
   124  	{
   125  
   126  		list2 := UserList{}
   127  		err := list2.BatchFetchByNameList(db, names)
   128  		tt.Nil(err)
   129  		tt.Len(list, 10)
   130  	}
   131  
   132  }