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