commit 78d6c27c8940da32a6de8e64327c86f74fdaa2eb Author: adminoo <git@kadath.corp> Date: Wed Feb 4 12:59:22 2026 +0100 feat: freebsd log rotation config thingie commit 55af4e6c70122e679272ed247c26e04b1247f694 Author: adminoo <git@kadath.corp> Date: Wed Feb 4 12:58:43 2026 +0100 feat: embed templates, static resolution commit 29c917f929a7378ec29c54315ee2e9f420747787 Author: adminoo <git@kadath.corp> Date: Wed Feb 4 10:44:34 2026 +0100 feat: set log file path commit 294fd3d1549979eab63587ceec6ff5d0978e9afc Author: adminoo <git@kadath.corp> Date: Wed Feb 4 10:23:53 2026 +0100 feat: logging HTTP request commit c9ae80b240d58e1abed7ae3b7b2c3b283a31f1a1 Author: adminoo <git@kadath.corp> Date: Wed Feb 4 09:54:05 2026 +0100 feat: freebsd-specific compile target and scripts commit 86ca154dedd19aa1fe5f571c445dcf17a8396bfa Author: adminoo <git@kadath.corp> Date: Wed Feb 4 09:25:16 2026 +0100 feat: mobile friendly CSS commit 199f4319e0b08a4b6d595d7eb3effb6db6c7beec Author: adminoo <git@kadath.corp> Date: Wed Feb 4 09:25:03 2026 +0100 feat: persisting rendered note commit 865e258237e45d7c542685a4653bcad3c5af259d Author: adminoo <git@kadath.corp> Date: Wed Feb 4 08:06:38 2026 +0100 fix: grouping notes by folder commit 242d1d074c92461f38212b033c7a9e383f9dc550 Author: adminoo <git@kadath.corp> Date: Tue Feb 3 16:52:50 2026 +0100 feat: storage layer logic - Prune notes from db not matching current folder structure at start - Detect file system deletion on start by comparing in-db notes - Prevent updating of in-db notes at start if modification time is not newer - Delete by path commit d75d46bc1ab22bd990d0fdc307e571fe52f0dd99 Author: adminoo <git@kadath.corp> Date: Tue Feb 3 15:27:07 2026 +0100 feat: group notes by root folders commit e1e25a938e717599332f7b40a449d9bb854b673a Author: adminoo <git@kadath.corp> Date: Tue Feb 3 14:24:37 2026 +0100 feat: size in kilobytes commit 61220272a2df2b66c2b8e356ba359ed01de3bd12 Author: adminoo <git@kadath.corp> Date: Tue Feb 3 14:19:40 2026 +0100 feat: styling inputs
108 lines
2.2 KiB
Go
108 lines
2.2 KiB
Go
package scanner
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"donniemarko/internal/note"
|
|
)
|
|
|
|
func TestScanner_DetectsNewFile(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
scanner := NewScanner(tmpDir)
|
|
|
|
scanner.Scan() // Initial scan
|
|
|
|
os.WriteFile(filepath.Join(tmpDir, "new.md"), []byte("# New"), 0644)
|
|
|
|
changes, _ := scanner.Scan()
|
|
|
|
if len(changes) != 1 || changes[0].Type != Created {
|
|
t.Error("should detect new file")
|
|
}
|
|
}
|
|
|
|
func TestScanner_DetectChanges(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
filePath := filepath.Join(tmpDir, "test.md")
|
|
|
|
// Initial state
|
|
os.WriteFile(filePath, []byte("# Original"), 0644)
|
|
|
|
scanner := NewScanner(tmpDir)
|
|
changes, _ := scanner.Scan()
|
|
originalModTime := changes[0].ModTime
|
|
|
|
// Wait and modify
|
|
time.Sleep(10 * time.Millisecond)
|
|
os.WriteFile(filePath, []byte("# Modified"), 0644)
|
|
|
|
changes, _ = scanner.Scan()
|
|
newModTime := changes[0].ModTime
|
|
|
|
if !newModTime.After(originalModTime) {
|
|
t.Error("should detect file modification")
|
|
}
|
|
|
|
if changes[0].Type != Modified {
|
|
t.Errorf("Last state should be modified, got '%v'\n", changes[0].Type)
|
|
}
|
|
|
|
newPath := filepath.Join(tmpDir, "test_renamed.md")
|
|
os.Rename(filePath, newPath)
|
|
changes, _ = scanner.Scan()
|
|
|
|
if changes[0].Path != newPath {
|
|
t.Errorf("Should find renamed file '%s'. Got '%s'\n", newPath, changes[0].Path)
|
|
}
|
|
}
|
|
|
|
func TestScanner_SeedExisting_PrunesMissing(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
sc := NewScanner(tmpDir)
|
|
|
|
n := note.NewNote()
|
|
n.Path = "missing.md"
|
|
n.UpdatedAt = time.Now()
|
|
|
|
sc.SeedExisting([]*note.Note{n})
|
|
|
|
changes, err := sc.Scan()
|
|
if err != nil {
|
|
t.Fatalf("scan error: %v", err)
|
|
}
|
|
|
|
if len(changes) != 1 {
|
|
t.Fatalf("expected 1 change, got %d", len(changes))
|
|
}
|
|
if changes[0].Type != Deleted {
|
|
t.Fatalf("expected Deleted change, got %v", changes[0].Type)
|
|
}
|
|
}
|
|
|
|
func TestScanner_SeedExisting_KeepsExisting(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
filePath := filepath.Join(tmpDir, "kept.md")
|
|
|
|
os.WriteFile(filePath, []byte("# Kept"), 0644)
|
|
|
|
sc := NewScanner(tmpDir)
|
|
|
|
n := note.NewNote()
|
|
n.Path = "kept.md"
|
|
n.UpdatedAt = time.Now()
|
|
|
|
sc.SeedExisting([]*note.Note{n})
|
|
|
|
changes, err := sc.Scan()
|
|
if err != nil {
|
|
t.Fatalf("scan error: %v", err)
|
|
}
|
|
|
|
if len(changes) != 0 {
|
|
t.Fatalf("expected 0 changes, got %d", len(changes))
|
|
}
|
|
}
|