From 2f035ee485d8c780396532a0d783c88dea449090 Mon Sep 17 00:00:00 2001 From: Micheal Wilkinson Date: Tue, 17 Mar 2026 21:13:11 +0000 Subject: [PATCH] Added NoteStore interface, mock and repository with Create method --- internal/models/note.go | 6 +-- internal/repository/notes.go | 2 +- internal/repository/notes_test.go | 62 +++++++++++++-------------- internal/repository/notestore.go | 3 +- internal/repository/notestore_test.go | 8 ++-- main.go | 2 +- 6 files changed, 42 insertions(+), 41 deletions(-) diff --git a/internal/models/note.go b/internal/models/note.go index 49b3b09..1292cd6 100644 --- a/internal/models/note.go +++ b/internal/models/note.go @@ -5,7 +5,7 @@ import ( ) type Note struct { - ID int `json:"id"` + ID int `json:"id"` CreatedAt time.Time `json:"created_at"` - Content string `json:"content"` -} \ No newline at end of file + Content string `json:"content"` +} diff --git a/internal/repository/notes.go b/internal/repository/notes.go index 8a77e85..e9dffbb 100644 --- a/internal/repository/notes.go +++ b/internal/repository/notes.go @@ -16,4 +16,4 @@ func NewNoteRepository(store NoteStore) *NoteRepository { func (r *NoteRepository) CreateNote(content string) (models.Note, error) { return models.Note{}, fmt.Errorf("not implemented") -} \ No newline at end of file +} diff --git a/internal/repository/notes_test.go b/internal/repository/notes_test.go index d56555b..03c87bc 100644 --- a/internal/repository/notes_test.go +++ b/internal/repository/notes_test.go @@ -4,8 +4,8 @@ import ( "testing" "testing/synctest" - "time" "fmt" + "time" "git.hrafn.xyz/aether/notes/internal/models" "git.hrafn.xyz/aether/notes/internal/repository" @@ -13,13 +13,13 @@ import ( func TestCreateNote(t *testing.T) { testCases := []struct { - name string - content string - expectedNote models.Note + name string + content string + expectedNote models.Note expectedError bool }{ { - name: "Good note", + name: "Good note", content: "This is a good note with valid content.", expectedNote: models.Note{ ID: 1, @@ -29,13 +29,13 @@ func TestCreateNote(t *testing.T) { expectedError: false, }, { - name: "Empty content", - content: "", - expectedNote: models.Note{}, + name: "Empty content", + content: "", + expectedNote: models.Note{}, expectedError: true, }, { - name: "Long content", + name: "Long content", content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", expectedNote: models.Note{ ID: 2, @@ -46,29 +46,29 @@ func TestCreateNote(t *testing.T) { }, } repo := repository.NewNoteRepository(&mockNoteStore{}) - for _, tc := range testCases { + for _, tc := range testCases { synctest.Test(t, func(t *testing.T) { - note, err := repo.CreateNote(tc.content) - if tc.expectedError { - if err == nil { - t.Errorf("expected an error but got none") - } - } else { - if err != nil { - t.Errorf("unexpected error: %v", err) - } + note, err := repo.CreateNote(tc.content) + if tc.expectedError { + if err == nil { + t.Errorf("expected an error but got none") } - if note.Content != tc.expectedNote.Content { - t.Errorf("expected content %q but got %q", tc.expectedNote.Content, note.Content) + } else { + if err != nil { + t.Errorf("unexpected error: %v", err) } - if note.ID != tc.expectedNote.ID { - t.Errorf("expected ID %d but got %d", tc.expectedNote.ID, note.ID) - } - if !note.CreatedAt.Equal(tc.expectedNote.CreatedAt) { - t.Errorf("expected CreatedAt %v but got %v", tc.expectedNote.CreatedAt, note.CreatedAt) - } - fmt.Printf("Test case '%s' passed.\n", tc.name) - }) - } - } \ No newline at end of file + } + if note.Content != tc.expectedNote.Content { + t.Errorf("expected content %q but got %q", tc.expectedNote.Content, note.Content) + } + if note.ID != tc.expectedNote.ID { + t.Errorf("expected ID %d but got %d", tc.expectedNote.ID, note.ID) + } + if !note.CreatedAt.Equal(tc.expectedNote.CreatedAt) { + t.Errorf("expected CreatedAt %v but got %v", tc.expectedNote.CreatedAt, note.CreatedAt) + } + fmt.Printf("Test case '%s' passed.\n", tc.name) + }) + } +} diff --git a/internal/repository/notestore.go b/internal/repository/notestore.go index f500b4d..a4b7632 100644 --- a/internal/repository/notestore.go +++ b/internal/repository/notestore.go @@ -3,6 +3,7 @@ package repository import ( "git.hrafn.xyz/aether/notes/internal/models" ) + type NoteStore interface { SaveNote(models.Note) (models.Note, error) -} \ No newline at end of file +} diff --git a/internal/repository/notestore_test.go b/internal/repository/notestore_test.go index f5b2d3d..b5d17c9 100644 --- a/internal/repository/notestore_test.go +++ b/internal/repository/notestore_test.go @@ -5,11 +5,11 @@ import ( ) type mockNoteStore struct { - notes []models.Note + Notes []models.Note } func (m *mockNoteStore) SaveNote(note models.Note) (models.Note, error) { - note.ID = len(m.notes) + 1 - m.notes = append(m.notes, note) + note.ID = len(m.Notes) + 1 + m.Notes = append(m.Notes, note) return note, nil -} \ No newline at end of file +} diff --git a/main.go b/main.go index 15eded0..2ca0d5e 100644 --- a/main.go +++ b/main.go @@ -6,4 +6,4 @@ import ( func main() { fmt.Println("Hello, World!") -} \ No newline at end of file +}