diff --git a/.gitignore b/.gitignore index 5b1adff34c9..a4194b8175d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ config.ini *.db Run vikunja -dist/ \ No newline at end of file +dist/ +cover.* \ No newline at end of file diff --git a/Featurecreep.md b/Featurecreep.md index 586daeabc47..239e8e910e9 100644 --- a/Featurecreep.md +++ b/Featurecreep.md @@ -183,6 +183,7 @@ doch auch in einer Funktion machbar sein. * [ ] Validation der ankommenden structs * [ ] Viper für config einbauen und ini rauswerfen * [ ] Docs für installationsanleitung +* [ ] Tests für Rechtekram * [ ] "Apiformat" Methoden, damit in der Ausgabe zb kein Passwort drin ist..., oder created/updated von Nutzern... oder ownerID nicht drin ist sondern nur das ownerobject * [x] Rechte überprüfen: diff --git a/Makefile b/Makefile index 58397dfe535..650fece301c 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ clean: .PHONY: test test: - go test -cover $(PACKAGES) + go test -cover -coverprofile cover.out $(PACKAGES) required-gofmt-version: @go version | grep -q '\(1.7\|1.8\|1.9\|1.10\)' || { echo "We require go version 1.7, 1.8, 1.9 or 1.10 to format code" >&2 && exit 1; } diff --git a/models/fixtures/list.yml b/models/fixtures/list.yml new file mode 100644 index 00000000000..285ac51a4e0 --- /dev/null +++ b/models/fixtures/list.yml @@ -0,0 +1,6 @@ +- + id: 1 + title: Test1 + description: Lorem Ipsum + owner_id: 1 + namespace_id: 1 \ No newline at end of file diff --git a/models/list_items_create_update.go b/models/list_items_create_update.go index b91849396f3..2f8236e9a48 100644 --- a/models/list_items_create_update.go +++ b/models/list_items_create_update.go @@ -27,6 +27,12 @@ func createOrUpdateListItem(i *ListItem, doer *User) (err error) { return ErrListItemCannotBeEmpty{} } + // Check if the list exists + _, err = GetListByID(i.ListID) + if err != nil { + return + } + // Do the update if i.ID != 0 { _, err = x.ID(i.ID).Update(i) diff --git a/models/list_items_test.go b/models/list_items_test.go new file mode 100644 index 00000000000..7bfe063d06d --- /dev/null +++ b/models/list_items_test.go @@ -0,0 +1,76 @@ +package models + +import ( + "fmt" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestListItem_Create(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + + // Fake list item + listitem := ListItem{ + Text: "Lorem", + Description: "Lorem Ipsum BACKERY", + ListID: 1, + } + + // Add one point to a list + doer, _, err := GetUserByID(1) + assert.NoError(t, err) + + assert.True(t, listitem.CanCreate(&doer)) + + err = listitem.Create(&doer) + assert.NoError(t, err) + + // Update it + listitem.Text = "Test34" + assert.True(t, listitem.CanUpdate(&doer)) + err = listitem.Update() + assert.NoError(t, err) + + // Check if it was updated + li, err := GetListItemByID(listitem.ID) + assert.NoError(t, err) + assert.Equal(t, li.Text, "Test34") + + // Delete the item + assert.True(t, listitem.CanDelete(&doer)) + err = listitem.Delete() + assert.NoError(t, err) + + // Delete a nonexistant item + listitem.ID = 0 + err = listitem.Delete() + assert.Error(t, err) + assert.True(t, IsErrListItemDoesNotExist(err)) + + // Try adding a list item with an empty text + listitem.Text = "" + err = listitem.Create(&doer) + assert.Error(t, err) + assert.True(t, IsErrListItemCannotBeEmpty(err)) + + // Try adding one to a nonexistant list + listitem.ListID = 99993939 + listitem.Text = "Lorem Ipsum" + err = listitem.Create(&doer) + assert.Error(t, err) + assert.True(t, IsErrListDoesNotExist(err)) + + // Try updating a nonexistant item + listitem.ID = 94829352 + err = listitem.Update() + assert.Error(t, err) + assert.True(t, IsErrListItemDoesNotExist(err)) + + // Try inserting an item with a nonexistant user + nUser := &User{ID: 9482385} + listitem.ListID = 1 + err = listitem.Create(nUser) + assert.Error(t, err) + fmt.Println(err) + assert.True(t, IsErrUserDoesNotExist(err)) +}