Files
gotes/internal/repository/notestore_test.go

60 lines
1.3 KiB
Go

package repository_test
import (
// Context imported for interface matching but not used
"context"
"fmt"
"git.hrafn.xyz/aether/gotes/internal/models"
)
type mockNoteStore struct {
Notes []models.Note
}
func (m *mockNoteStore) SaveNote(ctx context.Context, note models.Note) (models.Note, error) {
// Save a note
if note.ID == 0 {
note.ID = len(m.Notes) + 1
m.Notes = append(m.Notes, note)
return note, nil
}
// Update a note
_, index, err := m.getNoteAndIndexByID(note.ID)
if err != nil {
return models.Note{}, err
}
m.Notes[index] = note
return note, nil
}
func (m *mockNoteStore) GetNoteByID(ctx context.Context, id int) (models.Note, error) {
note, _, err := m.getNoteAndIndexByID(id)
if err != nil {
return models.Note{}, err
}
return note, nil
}
func (m *mockNoteStore) getNoteAndIndexByID(id int) (models.Note, int, error) {
for i, note := range m.Notes {
if note.ID == id {
return note, i, nil
}
}
return models.Note{}, -1, fmt.Errorf("note with ID %d not found", id)
}
func (m *mockNoteStore) GetAllNotes(ctx context.Context) ([]models.Note, error) {
return m.Notes, nil
}
func (m *mockNoteStore) DeleteNoteByID(ctx context.Context, id int) error {
_, index, err := m.getNoteAndIndexByID(id)
if err != nil {
return err
}
m.Notes = append(m.Notes[:index], m.Notes[index+1:]...)
return nil
}