82 lines
1.8 KiB
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
|
|
}
|