|
|
|
package serializer
|
|
|
|
|
|
|
|
import (
|
|
|
|
"database/sql"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/DATA-DOG/go-sqlmock"
|
|
|
|
model "github.com/cloudreve/Cloudreve/v3/models"
|
|
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/cache"
|
|
|
|
"github.com/duo-labs/webauthn/webauthn"
|
|
|
|
"github.com/jinzhu/gorm"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
var mock sqlmock.Sqlmock
|
|
|
|
|
|
|
|
// TestMain 初始化数据库Mock
|
|
|
|
func TestMain(m *testing.M) {
|
|
|
|
var db *sql.DB
|
|
|
|
var err error
|
|
|
|
db, mock, err = sqlmock.New()
|
|
|
|
if err != nil {
|
|
|
|
panic("An error was not expected when opening a stub database connection")
|
|
|
|
}
|
|
|
|
model.DB, _ = gorm.Open("mysql", db)
|
|
|
|
defer db.Close()
|
|
|
|
m.Run()
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBuildUser(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
user := model.User{
|
|
|
|
Policy: model.Policy{MaxSize: 1024 * 1024},
|
|
|
|
}
|
|
|
|
mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}))
|
|
|
|
res := BuildUser(user)
|
|
|
|
asserts.NoError(mock.ExpectationsWereMet())
|
|
|
|
asserts.Equal("1.00mb", res.Policy.MaxSize)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBuildUserResponse(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
user := model.User{
|
|
|
|
Policy: model.Policy{MaxSize: 1024 * 1024},
|
|
|
|
}
|
|
|
|
res := BuildUserResponse(user)
|
|
|
|
asserts.Equal("1.00mb", res.Data.(User).Policy.MaxSize)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBuildUserStorageResponse(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
cache.Set("pack_size_0", uint64(0), 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
user := model.User{
|
|
|
|
Storage: 0,
|
|
|
|
Group: model.Group{MaxStorage: 10},
|
|
|
|
}
|
|
|
|
res := BuildUserStorageResponse(user)
|
|
|
|
asserts.Equal(uint64(0), res.Data.(storage).Used)
|
|
|
|
asserts.Equal(uint64(10), res.Data.(storage).Total)
|
|
|
|
asserts.Equal(uint64(10), res.Data.(storage).Free)
|
|
|
|
}
|
|
|
|
{
|
|
|
|
user := model.User{
|
|
|
|
Storage: 6,
|
|
|
|
Group: model.Group{MaxStorage: 10},
|
|
|
|
}
|
|
|
|
res := BuildUserStorageResponse(user)
|
|
|
|
asserts.Equal(uint64(6), res.Data.(storage).Used)
|
|
|
|
asserts.Equal(uint64(10), res.Data.(storage).Total)
|
|
|
|
asserts.Equal(uint64(4), res.Data.(storage).Free)
|
|
|
|
}
|
|
|
|
{
|
|
|
|
user := model.User{
|
|
|
|
Storage: 20,
|
|
|
|
Group: model.Group{MaxStorage: 10},
|
|
|
|
}
|
|
|
|
res := BuildUserStorageResponse(user)
|
|
|
|
asserts.Equal(uint64(20), res.Data.(storage).Used)
|
|
|
|
asserts.Equal(uint64(10), res.Data.(storage).Total)
|
|
|
|
asserts.Equal(uint64(0), res.Data.(storage).Free)
|
|
|
|
}
|
|
|
|
{
|
|
|
|
user := model.User{
|
|
|
|
Storage: 6,
|
|
|
|
Group: model.Group{MaxStorage: 10},
|
|
|
|
}
|
|
|
|
res := BuildUserStorageResponse(user)
|
|
|
|
asserts.Equal(uint64(6), res.Data.(storage).Used)
|
|
|
|
asserts.Equal(uint64(10), res.Data.(storage).Total)
|
|
|
|
asserts.Equal(uint64(4), res.Data.(storage).Free)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBuildTagRes(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
tags := []model.Tag{
|
|
|
|
{
|
|
|
|
Type: 0,
|
|
|
|
Expression: "exp",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Type: 1,
|
|
|
|
Expression: "exp",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
res := buildTagRes(tags)
|
|
|
|
asserts.Len(res, 2)
|
|
|
|
asserts.Equal("", res[0].Expression)
|
|
|
|
asserts.Equal("exp", res[1].Expression)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBuildWebAuthnList(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
credentials := []webauthn.Credential{{}}
|
|
|
|
res := BuildWebAuthnList(credentials)
|
|
|
|
asserts.Len(res, 1)
|
|
|
|
}
|