mirror of
https://github.com/gotify/server.git
synced 2026-05-07 05:48:41 +08:00
115 lines
3.3 KiB
Go
115 lines
3.3 KiB
Go
package database
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/gotify/server/v2/model"
|
|
"github.com/gotify/server/v2/test"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/suite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func TestDatabaseSuite(t *testing.T) {
|
|
suite.Run(t, new(DatabaseSuite))
|
|
}
|
|
|
|
type DatabaseSuite struct {
|
|
suite.Suite
|
|
db *GormDatabase
|
|
tmpDir test.TmpDir
|
|
}
|
|
|
|
func (s *DatabaseSuite) BeforeTest(suiteName, testName string) {
|
|
s.tmpDir = test.NewTmpDir("gotify_databasesuite")
|
|
db, err := New("sqlite3", s.tmpDir.Path("testdb.db"), "defaultUser", "defaultPass", 5, true)
|
|
assert.Nil(s.T(), err)
|
|
s.db = db
|
|
}
|
|
|
|
func (s *DatabaseSuite) AfterTest(suiteName, testName string) {
|
|
s.db.Close()
|
|
assert.Nil(s.T(), s.tmpDir.Clean())
|
|
}
|
|
|
|
func TestInvalidDialect(t *testing.T) {
|
|
tmpDir := test.NewTmpDir("gotify_testinvaliddialect")
|
|
defer tmpDir.Clean()
|
|
_, err := New("asdf", tmpDir.Path("testdb.db"), "defaultUser", "defaultPass", 5, true)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestCreateSqliteFolder(t *testing.T) {
|
|
tmpDir := test.NewTmpDir("gotify_testcreatesqlitefolder")
|
|
defer tmpDir.Clean()
|
|
|
|
db, err := New("sqlite3", tmpDir.Path("somepath/testdb.db"), "defaultUser", "defaultPass", 5, true)
|
|
assert.Nil(t, err)
|
|
assert.DirExists(t, tmpDir.Path("somepath"))
|
|
db.Close()
|
|
}
|
|
|
|
func TestWithAlreadyExistingSqliteFolder(t *testing.T) {
|
|
tmpDir := test.NewTmpDir("gotify_testwithexistingfolder")
|
|
defer tmpDir.Clean()
|
|
|
|
db, err := New("sqlite3", tmpDir.Path("somepath/testdb.db"), "defaultUser", "defaultPass", 5, true)
|
|
assert.Nil(t, err)
|
|
assert.DirExists(t, tmpDir.Path("somepath"))
|
|
db.Close()
|
|
}
|
|
|
|
func TestPanicsOnMkdirError(t *testing.T) {
|
|
tmpDir := test.NewTmpDir("gotify_testpanicsonmkdirerror")
|
|
defer tmpDir.Clean()
|
|
mkdirAll = func(path string, perm os.FileMode) error {
|
|
return errors.New("ERROR")
|
|
}
|
|
assert.Panics(t, func() {
|
|
New("sqlite3", tmpDir.Path("somepath/test.db"), "defaultUser", "defaultPass", 5, true)
|
|
})
|
|
}
|
|
|
|
func TestMigrateSortKey(t *testing.T) {
|
|
db, err := New("sqlite3", fmt.Sprintf("file:%s?mode=memory&cache=shared", fmt.Sprint(time.Now().UnixNano())), "admin", "pw", 5, true)
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, db)
|
|
|
|
err = db.CreateApplication(&model.Application{Name: "one", Token: "one", UserID: 1})
|
|
assert.NoError(t, err)
|
|
err = db.CreateApplication(&model.Application{Name: "two", Token: "two", UserID: 1})
|
|
assert.NoError(t, err)
|
|
err = db.CreateApplication(&model.Application{Name: "three", Token: "three", UserID: 1})
|
|
assert.NoError(t, err)
|
|
err = db.CreateApplication(&model.Application{Name: "one-other", Token: "one-other", UserID: 2})
|
|
assert.NoError(t, err)
|
|
|
|
err = db.DB.Session(&gorm.Session{AllowGlobalUpdate: true}).Model(new(model.Application)).UpdateColumn("sort_key", nil).Error
|
|
assert.NoError(t, err)
|
|
|
|
err = fillMissingSortKeys(db.DB)
|
|
assert.NoError(t, err)
|
|
|
|
apps, err := db.GetApplicationsByUser(1)
|
|
assert.NoError(t, err)
|
|
|
|
assert.Len(t, apps, 3)
|
|
assert.Equal(t, apps[0].Name, "one")
|
|
assert.Equal(t, apps[0].SortKey, "a0")
|
|
assert.Equal(t, apps[1].Name, "two")
|
|
assert.Equal(t, apps[1].SortKey, "a1")
|
|
assert.Equal(t, apps[2].Name, "three")
|
|
assert.Equal(t, apps[2].SortKey, "a2")
|
|
|
|
apps, err = db.GetApplicationsByUser(2)
|
|
assert.NoError(t, err)
|
|
|
|
assert.Len(t, apps, 1)
|
|
assert.Equal(t, apps[0].Name, "one-other")
|
|
assert.Equal(t, apps[0].SortKey, "a0")
|
|
}
|