Refactor User and DB handling #123

Merged
konrad merged 19 commits from refactor/user into master 2020-01-26 17:08:08 +00:00
8 changed files with 48 additions and 77 deletions
Showing only changes of commit 2cf1e71945 - Show all commits

View File

@ -25,6 +25,7 @@ import (
"code.vikunja.io/api/pkg/models"
migrator "code.vikunja.io/api/pkg/modules/migration"
"code.vikunja.io/api/pkg/red"
"code.vikunja.io/api/pkg/user"
"fmt"
"github.com/spf13/cobra"
"os"
@ -76,6 +77,10 @@ func initialize() {
if err != nil {
log.Fatal(err.Error())
}
err = user.InitDB()
if err != nil {
log.Fatal(err.Error())
}
err = files.SetEngine()
if err != nil {
log.Fatal(err.Error())

View File

@ -17,14 +17,14 @@
package models
import (
user2 "code.vikunja.io/api/pkg/user"
"code.vikunja.io/api/pkg/user"
"github.com/stretchr/testify/assert"
"reflect"
"testing"
)
func TestList_CreateOrUpdate(t *testing.T) {
user := &user2.User{
usr := &user.User{
ID: 1,
Username: "user1",
Email: "user1@example.com",
@ -38,7 +38,7 @@ func TestList_CreateOrUpdate(t *testing.T) {
Description: "Lorem Ipsum",
NamespaceID: 1,
}
err := list.Create(user)
err := list.Create(usr)
assert.NoError(t, err)
})
t.Run("nonexistant namespace", func(t *testing.T) {
@ -49,21 +49,21 @@ func TestList_CreateOrUpdate(t *testing.T) {
NamespaceID: 999999,
}
err := list.Create(user)
err := list.Create(usr)
assert.Error(t, err)
assert.True(t, IsErrNamespaceDoesNotExist(err))
})
t.Run("nonexistant owner", func(t *testing.T) {
initFixtures(t)
user := &user2.User{ID: 9482385}
usr := &user.User{ID: 9482385}
list := List{
Title: "test",
Description: "Lorem Ipsum",
NamespaceID: 1,
}
err := list.Create(user)
err := list.Create(usr)
assert.Error(t, err)
assert.True(t, IsErrUserDoesNotExist(err))
assert.True(t, user.IsErrUserDoesNotExist(err))
})
t.Run("existing identifier", func(t *testing.T) {
initFixtures(t)
@ -74,7 +74,7 @@ func TestList_CreateOrUpdate(t *testing.T) {
NamespaceID: 1,
}
err := list.Create(user)
err := list.Create(usr)
assert.Error(t, err)
assert.True(t, IsErrListIdentifierIsNotUnique(err))
})
@ -114,7 +114,7 @@ func TestList_CreateOrUpdate(t *testing.T) {
NamespaceID: 1,
}
err := list.Create(user)
err := list.Create(usr)
assert.Error(t, err)
assert.True(t, IsErrListIdentifierIsNotUnique(err))
})
@ -134,12 +134,12 @@ func TestList_ReadAll(t *testing.T) {
t.Run("all in namespace", func(t *testing.T) {
initFixtures(t)
// Get all lists for our namespace
lists, err := GetListsByNamespaceID(1, &user2.User{})
lists, err := GetListsByNamespaceID(1, &user.User{})
assert.NoError(t, err)
assert.Equal(t, len(lists), 2)
})
t.Run("all lists for user", func(t *testing.T) {
u := &user2.User{ID: 1}
u := &user.User{ID: 1}
list := List{}
lists3, _, _, err := list.ReadAll(u, "", 1, 50)
@ -149,10 +149,10 @@ func TestList_ReadAll(t *testing.T) {
assert.Equal(t, 16, s.Len())
})
t.Run("lists for nonexistant user", func(t *testing.T) {
user := &user2.User{ID: 999999}
usr := &user.User{ID: 999999}
list := List{}
_, _, _, err := list.ReadAll(user, "", 1, 50)
_, _, _, err := list.ReadAll(usr, "", 1, 50)
assert.Error(t, err)
assert.True(t, IsErrUserDoesNotExist(err))
assert.True(t, user.IsErrUserDoesNotExist(err))
})
}

View File

@ -90,7 +90,7 @@ func TestListUser_Create(t *testing.T) {
ListID: 2,
},
wantErr: true,
errType: IsErrUserDoesNotExist,
errType: user.IsErrUserDoesNotExist,
},
{
name: "ListUsers Create with the owner as shared user",
@ -317,7 +317,7 @@ func TestListUser_Delete(t *testing.T) {
ListID: 2,
},
wantErr: true,
errType: IsErrUserDoesNotExist,
errType: user.IsErrUserDoesNotExist,
},
{
name: "Try deleting a user which does not has access but exists",

View File

@ -62,7 +62,7 @@ func TestNamespace_Create(t *testing.T) {
dnsp2 := dummynamespace
err = dnsp2.Create(nUser)
assert.Error(t, err)
assert.True(t, IsErrUserDoesNotExist(err))
assert.True(t, user.IsErrUserDoesNotExist(err))
// Update it
allowed, err = dummynamespace.CanUpdate(doer)
@ -86,7 +86,7 @@ func TestNamespace_Create(t *testing.T) {
dummynamespace.Owner.ID = 94829838572
err = dummynamespace.Update()
assert.Error(t, err)
assert.True(t, IsErrUserDoesNotExist(err))
assert.True(t, user.IsErrUserDoesNotExist(err))
// Try updating without a name
dummynamespace.Name = ""

View File

@ -88,7 +88,7 @@ func TestNamespaceUser_Create(t *testing.T) {
NamespaceID: 2,
},
wantErr: true,
errType: IsErrUserDoesNotExist,
errType: user.IsErrUserDoesNotExist,
},
{
name: "NamespaceUsers Create with the owner as shared user",
@ -315,7 +315,7 @@ func TestNamespaceUser_Delete(t *testing.T) {
NamespaceID: 2,
},
wantErr: true,
errType: IsErrUserDoesNotExist,
errType: user.IsErrUserDoesNotExist,
},
{
name: "Try deleting a user which does not has access but exists",

View File

@ -17,13 +17,13 @@
package models
import (
user2 "code.vikunja.io/api/pkg/user"
user "code.vikunja.io/api/pkg/user"
"github.com/stretchr/testify/assert"
"testing"
)
func TestTask_Create(t *testing.T) {
user := &user2.User{
usr := &user.User{
ID: 1,
Username: "user1",
Email: "user1@example.com",
@ -38,7 +38,7 @@ func TestTask_Create(t *testing.T) {
Description: "Lorem Ipsum Dolor",
ListID: 1,
}
err := task.Create(user)
err := task.Create(usr)
assert.NoError(t, err)
// Assert getting a uid
assert.NotEmpty(t, task.UID)
@ -54,7 +54,7 @@ func TestTask_Create(t *testing.T) {
Description: "Lorem Ipsum Dolor",
ListID: 1,
}
err := task.Create(user)
err := task.Create(usr)
assert.Error(t, err)
assert.True(t, IsErrTaskCannotBeEmpty(err))
})
@ -65,13 +65,13 @@ func TestTask_Create(t *testing.T) {
Description: "Lorem Ipsum Dolor",
ListID: 9999999,
}
err := task.Create(user)
err := task.Create(usr)
assert.Error(t, err)
assert.True(t, IsErrListDoesNotExist(err))
})
t.Run("noneixtant user", func(t *testing.T) {
t.Run("noneixtant usr", func(t *testing.T) {
initFixtures(t)
nUser := &user2.User{ID: 99999999}
nUser := &user.User{ID: 99999999}
task := &Task{
Text: "Test",
Description: "Lorem Ipsum Dolor",
@ -79,7 +79,7 @@ func TestTask_Create(t *testing.T) {
}
err := task.Create(nUser)
assert.Error(t, err)
assert.True(t, IsErrUserDoesNotExist(err))
assert.True(t, user.IsErrUserDoesNotExist(err))
})
}

View File

@ -72,7 +72,7 @@ func TestTeamMember_Create(t *testing.T) {
dummyteammember.Username = "user9484"
err = dummyteammember.Create(doer)
assert.Error(t, err)
assert.True(t, IsErrUserDoesNotExist(err))
assert.True(t, user.IsErrUserDoesNotExist(err))
// Try adding a user to a team which does not exist
tm = TeamMember{TeamID: 94824, Username: "user1"}

View File

@ -17,27 +17,31 @@
package models
import (
"code.vikunja.io/api/pkg/config"
_ "code.vikunja.io/api/pkg/config" // To trigger its init() which initializes the config
"code.vikunja.io/api/pkg/db"
"code.vikunja.io/api/pkg/log"
"code.vikunja.io/api/pkg/mail"
"fmt"
"github.com/go-xorm/xorm"
"github.com/stretchr/testify/assert"
"gopkg.in/testfixtures.v2"
"os"
"path/filepath"
"testing"
)
// SetupTests takes care of seting up the db, fixtures etc.
// This is an extra function to be able to call the fixtures setup from the integration tests.
func SetupTests(pathToRoot string) {
func SetupTests() {
var err error
fixturesDir := filepath.Join(pathToRoot, "pkg", "models", "fixtures")
if err = createTestEngine(fixturesDir); err != nil {
log.Fatalf("Error creating test engine: %v\n", err)
x, err = db.CreateTestEngine()
if err != nil {
log.Fatal(err)
}
err = x.Sync2(GetTables()...)
if err != nil {
log.Fatal(err)
}
err = db.InitTestFixtures()
if err != nil {
log.Fatal(err)
}
// Start the pseudo mail queue
@ -49,44 +53,6 @@ func SetupTests(pathToRoot string) {
}
}
func createTestEngine(fixturesDir string) error {
var err error
var fixturesHelper testfixtures.Helper = &testfixtures.SQLite{}
// If set, use the config we provided instead of normal
if os.Getenv("VIKUNJA_TESTS_USE_CONFIG") == "1" {
x, err = db.CreateTestEngine()
if err != nil {
return fmt.Errorf("error getting test engine: %v", err)
}
err = initSchema(x)
if err != nil {
return err
}
if config.DatabaseType.GetString() == "mysql" {
fixturesHelper = &testfixtures.MySQL{}
}
} else {
x, err = db.CreateTestEngine()
if err != nil {
return fmt.Errorf("error getting test engine: %v", err)
}
// Sync dat shit
err = initSchema(x)
if err != nil {
return fmt.Errorf("sync database struct error: %v", err)
}
}
return db.InitFixtures(fixturesHelper, fixturesDir)
}
func initSchema(tx *xorm.Engine) error {
return tx.Sync2(GetTables()...)
}
func initFixtures(t *testing.T) {
// Init db fixtures
err := db.LoadFixtures()