verstak/cmd/verstak/main_test.go

82 lines
1.8 KiB
Go

package main
import (
"os"
"path/filepath"
"testing"
"verstak/internal/core/storage"
"verstak/internal/core/vault"
)
func TestInitCreatesVault(t *testing.T) {
dir := t.TempDir()
vaultPath := filepath.Join(dir, "test-vault")
if err := vault.Init(vaultPath); err != nil {
t.Fatalf("Init failed: %v", err)
}
// Check directories exist.
for _, sub := range []string{".verstak", ".verstak/trash", ".verstak/history",
".verstak/originals", ".verstak/thumbnails", ".verstak/blobs", "spaces"} {
p := filepath.Join(vaultPath, sub)
if _, err := os.Stat(p); os.IsNotExist(err) {
t.Errorf("missing: %s", p)
}
}
// Check index.db exists and is a valid SQLite database.
dbPath := filepath.Join(vaultPath, ".verstak", "index.db")
db, err := storage.Open(dbPath)
if err != nil {
t.Fatalf("open db: %v", err)
}
defer db.Close()
var count int
if err := db.QueryRow("SELECT COUNT(*) FROM nodes").Scan(&count); err != nil {
t.Fatalf("query nodes: %v", err)
}
if count != 0 {
t.Errorf("expected 0 nodes, got %d", count)
}
// Idempotent: second Init should not fail.
if err := vault.Init(vaultPath); err != nil {
t.Fatalf("second Init failed: %v", err)
}
}
func TestInitConfigYAML(t *testing.T) {
dir := t.TempDir()
vaultPath := filepath.Join(dir, "vault")
if err := vault.Init(vaultPath); err != nil {
t.Fatalf("Init: %v", err)
}
cfgPath := filepath.Join(vaultPath, ".verstak", "config.yml")
data, err := os.ReadFile(cfgPath)
if err != nil {
t.Fatalf("read config: %v", err)
}
if len(data) == 0 {
t.Fatal("config.yml empty")
}
// yaml key should be present.
if !containsString(string(data), "engine:") {
t.Errorf("config missing engine key:\n%s", string(data))
}
}
func containsString(s, sub string) bool {
for i := 0; i+len(sub) <= len(s); i++ {
if s[i:i+len(sub)] == sub {
return true
}
}
return false
}