Files
server/database/user_test.go
Jannis Mattheis c912bb8cba Delete Clients/Apps/Messages when deleting a user
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.
2018-04-01 12:26:06 +02:00

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))
}