diff options
| author | Paul Buetow <paul@buetow.org> | 2024-06-04 19:57:37 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-06-04 19:57:37 +0300 |
| commit | c294a9ea142fde08eadea8c0555ba95b0d68e757 (patch) | |
| tree | 714d3c5bd45b58ca5e305284082ce24c8b6c1470 /internal/server | |
| parent | 08d07b0d9d5db780f41ab783f86389f329484948 (diff) | |
unit tests pass again
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/handler/handler.go | 8 | ||||
| -rw-r--r-- | internal/server/repository/repository.go | 32 | ||||
| -rw-r--r-- | internal/server/repository/repository_test.go | 20 |
3 files changed, 35 insertions, 25 deletions
diff --git a/internal/server/handler/handler.go b/internal/server/handler/handler.go index 12c6660..8e2b867 100644 --- a/internal/server/handler/handler.go +++ b/internal/server/handler/handler.go @@ -62,12 +62,12 @@ func (h Handler) Get(w http.ResponseWriter, r *http.Request) error { return fmt.Errorf("invalid id %s", id) } - data, err := repository.Instance(h.conf.DataDir).GetBytes(id) - if err != err { - return err + entry, ok := repository.Instance(h.conf.DataDir).Get(id) + if !ok { + return fmt.Errorf("no entry with id %s found", id) } - fmt.Fprint(w, string(data)) + fmt.Fprint(w, entry.String()) return nil } diff --git a/internal/server/repository/repository.go b/internal/server/repository/repository.go index 8e84f4b..a98d50c 100644 --- a/internal/server/repository/repository.go +++ b/internal/server/repository/repository.go @@ -2,6 +2,7 @@ package repository import ( "encoding/json" + "errors" "fmt" "sync" "time" @@ -49,10 +50,11 @@ func newRepository(dataDir string, fs fs) Repository { } } -func (r Repository) put(entry types.Entry) { +func (r Repository) put(entry types.Entry) error { r.mu.Lock() defer r.mu.Unlock() r.entries[entry.ID] = entry + return entry.SaveFile(r.entryPath(entry)) } // Load repository into memory @@ -62,15 +64,19 @@ func (r Repository) load() error { return err } + var errs []error for _, filePath := range filePaths { - entry, err := types.NewEntryFromFile(filePath) + entry, err := types.NewEntryFromFile(filePath, r.fs) if err != err { - return err + errs = append(errs, err) + continue + } + if err := r.put(entry); err != nil { + errs = append(errs, err) } - r.put(entry) } - return nil + return errors.Join(errs...) } func (r Repository) List() ([]byte, error) { @@ -89,16 +95,12 @@ func (r Repository) List() ([]byte, error) { return json.Marshal(pairs) } -func (r Repository) GetBytes(id string) ([]byte, error) { - return r.fs.ReadFile(fmt.Sprintf("%s/%s", r.dataDir, id)) -} +func (r Repository) Get(id string) (types.Entry, bool) { + r.mu.Lock() + defer r.mu.Unlock() -func (r Repository) Get(id string) (types.Entry, error) { - bytes, err := r.GetBytes(id) - if err != nil { - return types.Entry{}, err - } - return types.NewEntry(bytes) + entry, ok := r.entries[id] + return entry, ok } func (r Repository) HasSameEntry(pair EntryPair) bool { @@ -123,7 +125,7 @@ func (r Repository) Merge(otherEntry types.Entry) error { entry, ok := r.entries[otherEntry.ID] if !ok { var err error - if entry, err = types.NewEntryFromCopy(otherEntry); err != nil { + if entry, err = types.NewEntryFromCopy(otherEntry, r.fs); err != nil { return err } } diff --git a/internal/server/repository/repository_test.go b/internal/server/repository/repository_test.go index 176808d..7c87efb 100644 --- a/internal/server/repository/repository_test.go +++ b/internal/server/repository/repository_test.go @@ -10,20 +10,28 @@ import ( func TestRepositoryGet(t *testing.T) { t.Parallel() - entry, _, err := twoDifferentEntries() + repo, entry, _, err := setupRepository() if err != nil { t.Error(err) return } - repo.put(entry) - t.Log(fs) - - entryGot, err := repo.Get(entry.ID) - if err != nil { + if err := repo.put(entry); err != nil { + t.Error(err) + return + } + list, err := repo.List() + if err != err { t.Error(err) return } + t.Log(string(list)) + + entryGot, ok := repo.Get(entry.ID) + if !ok { + t.Errorf("could not find entry with id %s in repo", entry.ID) + return + } if !entryGot.Equals(entry) { t.Error("expected to get", entry, "but got", entryGot) } |
