Files
RawMark/cmd/rawmark/examples_test.go
T

110 lines
2.6 KiB
Go

package main
import (
"io/fs"
"os"
"path/filepath"
"rawmark/deploy"
"rawmark/internal/auth"
"rawmark/internal/store"
"rawmark/internal/vault"
"testing"
)
func TestInitializeExamplesOnlyOnce(t *testing.T) {
data := t.TempDir()
v, err := vault.Open(filepath.Join(data, "vault"))
if err != nil {
t.Fatal(err)
}
st, err := store.Open(filepath.Join(data, "rawmark.db"))
if err != nil {
t.Fatal(err)
}
if err := initializeExamples(v, st); err != nil {
t.Fatal(err)
}
if ready, err := auth.New(st).IsSetUp(); err != nil || ready {
t.Fatalf("examples must not initialize credentials: %v, %v", ready, err)
}
count := 0
if err := fs.WalkDir(deploy.Examples, "data/vault", func(name string, entry fs.DirEntry, walkErr error) error {
if walkErr != nil {
return walkErr
}
if entry.IsDir() {
return nil
}
if filepath.Ext(name) != ".md" {
t.Fatalf("unexpected template file: %s", name)
}
count++
rel, err := filepath.Rel("data/vault", name)
if err != nil {
return err
}
if _, err := os.Stat(filepath.Join(v.Root(), rel)); err != nil {
return err
}
return nil
}); err != nil {
t.Fatal(err)
}
if count != 7 {
t.Fatalf("expected seven public sample notes, got %d", count)
}
// Deletion before password setup, settings reset, and process restart must not restore examples.
entries, err := os.ReadDir(v.Root())
if err != nil {
t.Fatal(err)
}
for _, entry := range entries {
if entry.Name() != ".rawmark" {
if err := os.RemoveAll(filepath.Join(v.Root(), entry.Name())); err != nil {
t.Fatal(err)
}
}
}
if err := st.ResetPreferences(); err != nil {
t.Fatal(err)
}
if err := st.Close(); err != nil {
t.Fatal(err)
}
st, err = store.Open(filepath.Join(data, "rawmark.db"))
if err != nil {
t.Fatal(err)
}
defer st.Close()
if err := initializeExamples(v, st); err != nil {
t.Fatal(err)
}
entries, err = os.ReadDir(v.Root())
if err != nil || len(entries) != 1 || entries[0].Name() != ".rawmark" {
t.Fatalf("deleted examples were restored: %v, %v", entries, err)
}
}
func TestInitializeExamplesSkipsInitializedEmptyInstance(t *testing.T) {
data := t.TempDir()
v, err := vault.Open(filepath.Join(data, "vault"))
if err != nil {
t.Fatal(err)
}
st, err := store.Open(filepath.Join(data, "rawmark.db"))
if err != nil {
t.Fatal(err)
}
defer st.Close()
if err := auth.New(st).Setup("synthetic-test-password"); err != nil {
t.Fatal(err)
}
if err := initializeExamples(v, st); err != nil {
t.Fatal(err)
}
entries, err := os.ReadDir(v.Root())
if err != nil || len(entries) != 1 || entries[0].Name() != ".rawmark" {
t.Fatalf("examples were added to an existing account: %v, %v", entries, err)
}
}