MindSift CI & Docker Release / Build, Test in Container & Push (push) Failing after 16s
112 lines
3.4 KiB
Go
112 lines
3.4 KiB
Go
package storage
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/sandrodach/mindsift/internal/domain"
|
|
)
|
|
|
|
func TestStoreLifecycle(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
dbPath := filepath.Join(tmpDir, "test_mindsift.db")
|
|
|
|
store, err := NewStore(dbPath)
|
|
if err != nil {
|
|
t.Fatalf("NewStore failed: %v", err)
|
|
}
|
|
defer store.Close()
|
|
|
|
user, err := store.EnsureDefaultUser()
|
|
if err != nil {
|
|
t.Fatalf("EnsureDefaultUser failed: %v", err)
|
|
}
|
|
if user.ID == "" {
|
|
t.Fatal("expected valid user ID")
|
|
}
|
|
|
|
// 1. Test Instant Capture
|
|
thought, err := store.CreateThought(user.ID, "Milch und Brot kaufen #einkauf #dringend", "high", "manual", "")
|
|
if err != nil {
|
|
t.Fatalf("CreateThought failed: %v", err)
|
|
}
|
|
if thought.Status != domain.StatusInbox {
|
|
t.Fatalf("expected status inbox, got %s", thought.Status)
|
|
}
|
|
if len(thought.Tags) != 2 {
|
|
t.Fatalf("expected 2 extracted hashtags, got %d", len(thought.Tags))
|
|
}
|
|
|
|
// 2. Test Tinder-Style Triage -> Convert to Document
|
|
triaged, err := store.UpdateThoughtTriage(user.ID, thought.ID, "keep", "document", "", "", "")
|
|
if err != nil {
|
|
t.Fatalf("UpdateThoughtTriage failed: %v", err)
|
|
}
|
|
if triaged.Status != domain.StatusConverted || triaged.ConvertedType != "document" || triaged.ConvertedRefID == "" {
|
|
t.Fatalf("expected converted document, got status=%s type=%s ref=%s", triaged.Status, triaged.ConvertedType, triaged.ConvertedRefID)
|
|
}
|
|
|
|
// 3. Test Shared Space & Shopping List
|
|
sp, err := store.CreateSpace(user.ID, "Test WG", "🍕", "Test Space", false)
|
|
if err != nil {
|
|
t.Fatalf("CreateSpace failed: %v", err)
|
|
}
|
|
lst, err := store.CreateList(sp.ID, "REWE Einkauf", "🛒", "shopping")
|
|
if err != nil {
|
|
t.Fatalf("CreateList failed: %v", err)
|
|
}
|
|
item, err := store.CreateListItem(lst.ID, "Hafermilch", "Kühlregal", "2L", 0)
|
|
if err != nil {
|
|
t.Fatalf("CreateListItem failed: %v", err)
|
|
}
|
|
toggled, err := store.ToggleListItem(item.ID, true, user.ID, user.DisplayName)
|
|
if err != nil || !toggled.IsCompleted {
|
|
t.Fatalf("ToggleListItem failed: %v", err)
|
|
}
|
|
|
|
// 4. Test Webhook API Key generation & validation
|
|
apiKey, err := store.CreateAPIKey(user.ID, "Home Assistant")
|
|
if err != nil {
|
|
t.Fatalf("CreateAPIKey failed: %v", err)
|
|
}
|
|
validatedUser, err := store.ValidateAPIKeyAndGetUser(apiKey.RawKey)
|
|
if err != nil || validatedUser.ID != user.ID {
|
|
t.Fatalf("ValidateAPIKeyAndGetUser failed: %v", err)
|
|
}
|
|
|
|
// 5. Test TaskLists CRUD
|
|
taskList, err := store.CreateTaskList(user.ID, sp.ID, "Haus & Garten", "🏡", "#10b981")
|
|
if err != nil || taskList.ID == "" {
|
|
t.Fatalf("CreateTaskList failed: %v", err)
|
|
}
|
|
taskLists, err := store.GetTaskLists(user.ID)
|
|
if err != nil || len(taskLists) == 0 {
|
|
t.Fatalf("GetTaskLists failed: %v", err)
|
|
}
|
|
|
|
// 6. Test Organizations & Teams
|
|
org, err := store.CreateOrganization(user.ID, "Mindsift Inc")
|
|
if err != nil || org.ID == "" {
|
|
t.Fatalf("CreateOrganization failed: %v", err)
|
|
}
|
|
team, err := store.CreateTeam(org.ID, "DevOps", "Infrastructure team")
|
|
if err != nil || team.ID == "" {
|
|
t.Fatalf("CreateTeam failed: %v", err)
|
|
}
|
|
err = store.AddTeamMember(team.ID, user.ID, "owner")
|
|
if err != nil {
|
|
t.Fatalf("AddTeamMember failed: %v", err)
|
|
}
|
|
|
|
// 7. Test System Settings
|
|
sysSettings, err := store.GetSystemSettings()
|
|
if err != nil || sysSettings.InstanceName == "" {
|
|
t.Fatalf("GetSystemSettings failed: %v", err)
|
|
}
|
|
sysSettings.SharingMode = "teams_only"
|
|
err = store.UpdateSystemSettings(sysSettings)
|
|
if err != nil {
|
|
t.Fatalf("UpdateSystemSettings failed: %v", err)
|
|
}
|
|
}
|