Initial QSfera import
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
package notes
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestFileStoreUpsertListDeleteAndPersist(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), "notes.json")
|
||||
reminderAt := int64(2000)
|
||||
|
||||
store, err := OpenFileStore(path)
|
||||
if err != nil {
|
||||
t.Fatalf("OpenFileStore() error = %v", err)
|
||||
}
|
||||
|
||||
if _, err := store.Upsert(Note{ID: "old", Title: "Old", Color: "#FFFFFF", UpdatedAt: 100}); err != nil {
|
||||
t.Fatalf("Upsert(old) error = %v", err)
|
||||
}
|
||||
if _, err := store.Upsert(Note{
|
||||
ID: "new",
|
||||
Title: "New",
|
||||
Body: "Formatted body",
|
||||
BodyFormats: []BodyFormat{{Start: 0, End: 9, Style: "bold"}},
|
||||
Owner: "owner-1",
|
||||
Collaborators: []string{"friend@example.org", "friend@example.org", " "},
|
||||
Color: "#FFF475",
|
||||
UpdatedAt: 200,
|
||||
SortOrder: 300,
|
||||
Pinned: true,
|
||||
Archived: true,
|
||||
Deleted: true,
|
||||
Checklist: true,
|
||||
Items: []Item{{ID: "item-1", Text: "Buy milk", Checked: true}},
|
||||
Labels: []string{"Home", "Errands"},
|
||||
ReminderAt: &reminderAt,
|
||||
Images: []Image{{ID: "image-1", MimeType: "image/jpeg", Base64: "abc123"}},
|
||||
Audios: []Audio{{ID: "audio-1", MimeType: "audio/mp4", Base64: "def456", DurationMillis: 1200}},
|
||||
}); err != nil {
|
||||
t.Fatalf("Upsert(new) error = %v", err)
|
||||
}
|
||||
|
||||
notes := store.List()
|
||||
if len(notes) != 2 {
|
||||
t.Fatalf("List() length = %d, want 2", len(notes))
|
||||
}
|
||||
if notes[0].ID != "new" {
|
||||
t.Fatalf("List()[0].ID = %q, want %q", notes[0].ID, "new")
|
||||
}
|
||||
if notes[0].SortOrder != 300 {
|
||||
t.Fatalf("List()[0].SortOrder = %d, want 300", notes[0].SortOrder)
|
||||
}
|
||||
if notes[0].Body != "Formatted body" || len(notes[0].BodyFormats) != 1 || notes[0].BodyFormats[0].Style != "bold" {
|
||||
t.Fatalf("List()[0] body formatting = body:%q formats:%+v, want one bold range", notes[0].Body, notes[0].BodyFormats)
|
||||
}
|
||||
if notes[0].Owner != "owner-1" || len(notes[0].Collaborators) != 1 || notes[0].Collaborators[0] != "friend@example.org" {
|
||||
t.Fatalf("List()[0] sharing = owner:%q collaborators:%+v, want one collaborator", notes[0].Owner, notes[0].Collaborators)
|
||||
}
|
||||
if !notes[0].Pinned || !notes[0].Archived || !notes[0].Deleted {
|
||||
t.Fatalf("List()[0] state = pinned:%v archived:%v deleted:%v, want all true", notes[0].Pinned, notes[0].Archived, notes[0].Deleted)
|
||||
}
|
||||
if !notes[0].Checklist || len(notes[0].Items) != 1 || notes[0].Items[0].Text != "Buy milk" || !notes[0].Items[0].Checked {
|
||||
t.Fatalf("List()[0] checklist = %+v, want one checked item", notes[0].Items)
|
||||
}
|
||||
if len(notes[0].Labels) != 2 || notes[0].Labels[0] != "Home" || notes[0].Labels[1] != "Errands" {
|
||||
t.Fatalf("List()[0] labels = %+v, want Home and Errands", notes[0].Labels)
|
||||
}
|
||||
if notes[0].ReminderAt == nil || *notes[0].ReminderAt != reminderAt {
|
||||
t.Fatalf("List()[0] ReminderAt = %v, want %d", notes[0].ReminderAt, reminderAt)
|
||||
}
|
||||
if len(notes[0].Images) != 1 || notes[0].Images[0].ID != "image-1" || notes[0].Images[0].Base64 != "abc123" {
|
||||
t.Fatalf("List()[0] images = %+v, want image-1", notes[0].Images)
|
||||
}
|
||||
if len(notes[0].Audios) != 1 || notes[0].Audios[0].ID != "audio-1" || notes[0].Audios[0].Base64 != "def456" {
|
||||
t.Fatalf("List()[0] audios = %+v, want audio-1", notes[0].Audios)
|
||||
}
|
||||
|
||||
if err := store.Delete("new"); err != nil {
|
||||
t.Fatalf("Delete(new) error = %v", err)
|
||||
}
|
||||
|
||||
reopened, err := OpenFileStore(path)
|
||||
if err != nil {
|
||||
t.Fatalf("OpenFileStore(reopen) error = %v", err)
|
||||
}
|
||||
|
||||
notes = reopened.List()
|
||||
if len(notes) != 1 {
|
||||
t.Fatalf("reopened List() length = %d, want 1", len(notes))
|
||||
}
|
||||
if notes[0].ID != "old" {
|
||||
t.Fatalf("reopened List()[0].ID = %q, want %q", notes[0].ID, "old")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user