feat(release): v0.1.0

commit 06ed2c3cbe
Author: adminoo <git@kadath.corp>
Date:   Tue Feb 3 11:34:24 2026 +0100

    fix: changed detected by scanner but no updated by render layer

commit 01dcaf882a
Author: adminoo <git@kadath.corp>
Date:   Tue Feb 3 10:19:05 2026 +0100

    feat: VERSION bumb

commit 229223f77a
Author: adminoo <git@kadath.corp>
Date:   Tue Feb 3 09:53:08 2026 +0100

    feat: filter and search by tag

commit cb11e34798
Author: adminoo <git@kadath.corp>
Date:   Tue Feb 3 09:41:03 2026 +0100

    feat: tag system

commit 3f5cf0d673
Author: adminoo <git@kadath.corp>
Date:   Tue Feb 3 09:15:29 2026 +0100

    feat: sqlite storage draft

commit d6617cec02
Author: adminoo <git@kadath.corp>
Date:   Tue Feb 3 09:04:11 2026 +0100

    feat: metadata draft

commit 7238d02a13
Author: adminoo <git@kadath.corp>
Date:   Mon Feb 2 10:18:42 2026 +0100

    fix: body overflowing

commit 16ff836274
Author: adminoo <git@kadath.corp>
Date:   Mon Feb 2 10:09:01 2026 +0100

    feat: tests for http handlers and render package

commit 36ac3f03aa
Author: adminoo <git@kadath.corp>
Date:   Mon Feb 2 09:45:29 2026 +0100

    feat: Dark theme, placeholder metadata panel

commit e6923fa4f5
Author: adminoo <git@kadath.corp>
Date:   Sun Feb 1 18:26:59 2026 +0100

    fix: uneeded func + uneeded bogus note creation logic

commit 4458ba2d15
Author: adminoo <git@kadath.corp>
Date:   Sun Feb 1 18:26:21 2026 +0100

    feat: log when changing note states

commit 92a6f84540
Author: adminoo <git@kadath.corp>
Date:   Sun Feb 1 16:55:40 2026 +0100

    possibly first working draft

commit e27aadc603
Author: adminoo <git@kadath.corp>
Date:   Sun Feb 1 11:55:16 2026 +0100

    draft shits
This commit is contained in:
2026-02-03 12:01:17 +01:00
parent d17ed8c650
commit 9d1254244f
27 changed files with 2940 additions and 0 deletions

View File

@ -0,0 +1,87 @@
package note
import (
"testing"
)
func TestExtractTitle(t *testing.T) {
cases := []struct {
name string
markdown string
want string
}{
{
name: "first h1 becomes title",
markdown: "# My Note\n\nSome content",
want: "My Note",
},
{
name: "no h1 uses filename",
markdown: "## Just h2\n\nContent",
want: "", // or filename from context
},
{
name: "multiple h1s takes first",
markdown: "# First\n\n# Second",
want: "First",
},
{
name: "h1 with formatting",
markdown: "# **Bold** and *italic* title",
want: "Bold and italic title",
},
{
name: "empty file",
markdown: "",
want: "",
},
}
for _, tt := range cases {
t.Run(tt.name, func(t *testing.T) {
got := ExtractTitle(tt.markdown)
if got != tt.want {
t.Errorf("got %q, want %q", got, tt.want)
}
})
}
}
func TestGenerateNoteID(t *testing.T) {
tests := []struct {
name string
path string
want string // SHA-256 hash
}{
{
name: "consistent hashing",
path: "notes/test.md",
want: "110bab5b8f",
},
{
name: "different paths different ids",
path: "notes/other.md",
want: "858d15849b",
},
{
name: "root folder as 'current folder'",
path: ".",
want: "cdb4ee2aea",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := GenerateNoteID(tt.path)
if got != tt.want {
t.Errorf("got %q, want %q", got, tt.want)
}
// Test consistency
got2 := GenerateNoteID(tt.path)
if got != got2 {
t.Error("same path should produce same ID")
}
})
}
}