github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/serializer/user_test.go (about)

     1  package serializer
     2  
     3  import (
     4  	"database/sql"
     5  	"testing"
     6  
     7  	"github.com/DATA-DOG/go-sqlmock"
     8  	model "github.com/cloudreve/Cloudreve/v3/models"
     9  	"github.com/cloudreve/Cloudreve/v3/pkg/cache"
    10  	"github.com/duo-labs/webauthn/webauthn"
    11  	"github.com/jinzhu/gorm"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  var mock sqlmock.Sqlmock
    16  
    17  // TestMain 初始化数据库Mock
    18  func TestMain(m *testing.M) {
    19  	var db *sql.DB
    20  	var err error
    21  	db, mock, err = sqlmock.New()
    22  	if err != nil {
    23  		panic("An error was not expected when opening a stub database connection")
    24  	}
    25  	model.DB, _ = gorm.Open("mysql", db)
    26  	defer db.Close()
    27  	m.Run()
    28  }
    29  
    30  func TestBuildUser(t *testing.T) {
    31  	asserts := assert.New(t)
    32  	user := model.User{}
    33  	mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}))
    34  	res := BuildUser(user)
    35  	asserts.NoError(mock.ExpectationsWereMet())
    36  	asserts.NotNil(res)
    37  
    38  }
    39  
    40  func TestBuildUserResponse(t *testing.T) {
    41  	asserts := assert.New(t)
    42  	user := model.User{}
    43  	res := BuildUserResponse(user)
    44  	asserts.NotNil(res)
    45  }
    46  
    47  func TestBuildUserStorageResponse(t *testing.T) {
    48  	asserts := assert.New(t)
    49  	cache.Set("pack_size_0", uint64(0), 0)
    50  
    51  	{
    52  		user := model.User{
    53  			Storage: 0,
    54  			Group:   model.Group{MaxStorage: 10},
    55  		}
    56  		res := BuildUserStorageResponse(user)
    57  		asserts.Equal(uint64(0), res.Data.(storage).Used)
    58  		asserts.Equal(uint64(10), res.Data.(storage).Total)
    59  		asserts.Equal(uint64(10), res.Data.(storage).Free)
    60  	}
    61  	{
    62  		user := model.User{
    63  			Storage: 6,
    64  			Group:   model.Group{MaxStorage: 10},
    65  		}
    66  		res := BuildUserStorageResponse(user)
    67  		asserts.Equal(uint64(6), res.Data.(storage).Used)
    68  		asserts.Equal(uint64(10), res.Data.(storage).Total)
    69  		asserts.Equal(uint64(4), res.Data.(storage).Free)
    70  	}
    71  	{
    72  		user := model.User{
    73  			Storage: 20,
    74  			Group:   model.Group{MaxStorage: 10},
    75  		}
    76  		res := BuildUserStorageResponse(user)
    77  		asserts.Equal(uint64(20), res.Data.(storage).Used)
    78  		asserts.Equal(uint64(10), res.Data.(storage).Total)
    79  		asserts.Equal(uint64(0), res.Data.(storage).Free)
    80  	}
    81  	{
    82  		user := model.User{
    83  			Storage: 6,
    84  			Group:   model.Group{MaxStorage: 10},
    85  		}
    86  		res := BuildUserStorageResponse(user)
    87  		asserts.Equal(uint64(6), res.Data.(storage).Used)
    88  		asserts.Equal(uint64(10), res.Data.(storage).Total)
    89  		asserts.Equal(uint64(4), res.Data.(storage).Free)
    90  	}
    91  }
    92  
    93  func TestBuildTagRes(t *testing.T) {
    94  	asserts := assert.New(t)
    95  	tags := []model.Tag{
    96  		{
    97  			Type:       0,
    98  			Expression: "exp",
    99  		},
   100  		{
   101  			Type:       1,
   102  			Expression: "exp",
   103  		},
   104  	}
   105  	res := buildTagRes(tags)
   106  	asserts.Len(res, 2)
   107  	asserts.Equal("", res[0].Expression)
   108  	asserts.Equal("exp", res[1].Expression)
   109  }
   110  
   111  func TestBuildWebAuthnList(t *testing.T) {
   112  	asserts := assert.New(t)
   113  	credentials := []webauthn.Credential{{}}
   114  	res := BuildWebAuthnList(credentials)
   115  	asserts.Len(res, 1)
   116  }