mirror of
https://github.com/gotify/server.git
synced 2026-05-07 22:06:38 +08:00
sqlite3 doesn't support adding a foreign key via gorm.DB#AddForeignKey this would mean, that we have some hacky solutions for having foreign keys for sqlite and the other databases. Therefore manually deleting the referencing models seems to be the best solution. We already have interfaces for database capsuling, so no api must be adjusted.
78 lines
2.8 KiB
Go
78 lines
2.8 KiB
Go
package database
|
|
|
|
import (
|
|
"github.com/gotify/server/model"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func (s *DatabaseSuite) TestUser() {
|
|
assert.Nil(s.T(), s.db.GetUserByID(55), "not existing user")
|
|
assert.Nil(s.T(), s.db.GetUserByName("nicories"), "not existing user")
|
|
|
|
jmattheis := s.db.GetUserByID(1)
|
|
assert.NotNil(s.T(), jmattheis, "on bootup the first user should be automatically created")
|
|
|
|
users := s.db.GetUsers()
|
|
assert.Len(s.T(), users, 1)
|
|
assert.Contains(s.T(), users, jmattheis)
|
|
|
|
nicories := &model.User{Name: "nicories", Pass: []byte{1, 2, 3, 4}, Admin: false}
|
|
s.db.CreateUser(nicories)
|
|
assert.NotEqual(s.T(), 0, nicories.ID, "on create user a new id should be assigned")
|
|
|
|
assert.Equal(s.T(), nicories, s.db.GetUserByName("nicories"))
|
|
|
|
users = s.db.GetUsers()
|
|
assert.Len(s.T(), users, 2)
|
|
assert.Contains(s.T(), users, jmattheis)
|
|
assert.Contains(s.T(), users, nicories)
|
|
|
|
nicories.Name = "tom"
|
|
nicories.Pass = []byte{12}
|
|
nicories.Admin = true
|
|
s.db.UpdateUser(nicories)
|
|
tom := s.db.GetUserByID(nicories.ID)
|
|
assert.Equal(s.T(), &model.User{ID: nicories.ID, Name: "tom", Pass: []byte{12}, Admin: true}, tom)
|
|
users = s.db.GetUsers()
|
|
assert.Len(s.T(), users, 2)
|
|
|
|
s.db.DeleteUserByID(tom.ID)
|
|
users = s.db.GetUsers()
|
|
assert.Len(s.T(), users, 1)
|
|
assert.Contains(s.T(), users, jmattheis)
|
|
|
|
s.db.DeleteUserByID(jmattheis.ID)
|
|
users = s.db.GetUsers()
|
|
assert.Empty(s.T(), users)
|
|
}
|
|
|
|
func (s *DatabaseSuite) TestDeleteUserDeletesApplicationsAndClients() {
|
|
s.db.CreateUser(&model.User{Name: "nicories", ID: 10})
|
|
s.db.CreateApplication(&model.Application{ID: 100, Token: "apptoken", UserID: 10})
|
|
s.db.CreateMessage(&model.Message{ID: 1000, ApplicationID: 100})
|
|
s.db.CreateClient(&model.Client{ID: 10000, Token: "clienttoken", UserID: 10})
|
|
|
|
s.db.CreateUser(&model.User{Name: "nicories2", ID: 20})
|
|
s.db.CreateApplication(&model.Application{ID: 200, Token: "apptoken2", UserID: 20})
|
|
s.db.CreateMessage(&model.Message{ID: 2000, ApplicationID: 200})
|
|
s.db.CreateClient(&model.Client{ID: 20000, Token: "clienttoken2", UserID: 20})
|
|
|
|
s.db.DeleteUserByID(10)
|
|
|
|
assert.Nil(s.T(), s.db.GetApplicationByToken("apptoken"))
|
|
assert.Nil(s.T(), s.db.GetClientByToken("clienttoken"))
|
|
assert.Empty(s.T(), s.db.GetClientsByUser(10))
|
|
assert.Empty(s.T(), s.db.GetApplicationsByUser(10))
|
|
assert.Empty(s.T(), s.db.GetMessagesByApplication(100))
|
|
assert.Empty(s.T(), s.db.GetMessagesByUser(10))
|
|
assert.Nil(s.T(), s.db.GetMessageByID(1000))
|
|
|
|
assert.NotNil(s.T(), s.db.GetApplicationByToken("apptoken2"))
|
|
assert.NotNil(s.T(), s.db.GetClientByToken("clienttoken2"))
|
|
assert.NotEmpty(s.T(), s.db.GetClientsByUser(20))
|
|
assert.NotEmpty(s.T(), s.db.GetApplicationsByUser(20))
|
|
assert.NotEmpty(s.T(), s.db.GetMessagesByApplication(200))
|
|
assert.NotEmpty(s.T(), s.db.GetMessagesByUser(20))
|
|
assert.NotNil(s.T(), s.db.GetMessageByID(2000))
|
|
}
|