diff --git a/pkg/modules/migration/create_from_structure.go b/pkg/modules/migration/create_from_structure.go index 312941f54..58f78010c 100644 --- a/pkg/modules/migration/create_from_structure.go +++ b/pkg/modules/migration/create_from_structure.go @@ -59,6 +59,7 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err // First create the related tasks if they does not exist for _, rt := range tasks { if rt.ID == 0 { + rt.ListID = t.ListID err = rt.Create(user) if err != nil { return diff --git a/pkg/modules/migration/create_from_structure_test.go b/pkg/modules/migration/create_from_structure_test.go new file mode 100644 index 000000000..73a0eb666 --- /dev/null +++ b/pkg/modules/migration/create_from_structure_test.go @@ -0,0 +1,80 @@ +// Vikunja is a todo-list application to facilitate your life. +// Copyright 2018-2020 Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package migration + +import ( + "code.vikunja.io/api/pkg/db" + "code.vikunja.io/api/pkg/files" + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/user" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestInsertFromStructure(t *testing.T) { + u := &user.User{ + ID: 1, + } + t.Run("normal", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + testStructure := []*models.NamespaceWithLists{ + { + Namespace: models.Namespace{ + Name: "Test1", + Description: "Lorem Ipsum", + }, + Lists: []*models.List{ + { + Title: "Testlist1", + Description: "Something", + Tasks: []*models.Task{ + { + Text: "Task1", + Description: "Lorem", + }, + { + Text: "Task with related tasks", + RelatedTasks: map[models.RelationKind][]*models.Task{ + models.RelationKindSubtask: { + { + Text: "Related to task with related task", + Description: "As subtask", + }, + }, + }, + }, + { + Text: "Task with attachments", + Attachments: []*models.TaskAttachment{ + { + File: &files.File{ + Name: "testfile", + Size: 4, + FileContent: []byte{1, 2, 3, 4}, + }, + }, + }, + }, + }, + }, + }, + }, + } + err := InsertFromStructure(testStructure, u) + assert.NoError(t, err) + }) +} diff --git a/pkg/modules/migration/main_test.go b/pkg/modules/migration/main_test.go new file mode 100644 index 000000000..75e6462ae --- /dev/null +++ b/pkg/modules/migration/main_test.go @@ -0,0 +1,40 @@ +// Vikunja is a todo-list application to facilitate your life. +// Copyright 2018-2020 Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package migration + +import ( + "code.vikunja.io/api/pkg/config" + "code.vikunja.io/api/pkg/files" + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/user" + "os" + "testing" +) + +// TestMain is the main test function used to bootstrap the test env +func TestMain(m *testing.M) { + // Set default config + config.InitDefaultConfig() + // We need to set the root path even if we're not using the config, otherwise fixtures are not loaded correctly + config.ServiceRootpath.Set(os.Getenv("VIKUNJA_SERVICE_ROOTPATH")) + + // Some tests use the file engine, so we'll need to initialize that + files.InitTests() + user.InitTests() + models.SetupTests() + os.Exit(m.Run()) +}