From 608f9a54cef4f081bfa245fec27e49bc237820eb Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Thu, 12 Sep 2024 22:52:55 +0300 Subject: use pending.next to determine next --- internal/config/server/server.go | 2 +- internal/server/repository/pending.go | 11 +++++++++++ internal/server/repository/pending_test.go | 18 ++++++++++++++++++ internal/server/repository/repository.go | 14 +++++++++----- internal/server/repository/repository_test.go | 11 ++++++++--- 5 files changed, 47 insertions(+), 9 deletions(-) (limited to 'internal') diff --git a/internal/config/server/server.go b/internal/config/server/server.go index 8d0d15c..209493b 100644 --- a/internal/config/server/server.go +++ b/internal/config/server/server.go @@ -43,7 +43,7 @@ func New(configFile, secretsFile string) (ServerConfig, error) { conf.EmailTo = config.Str("GOS_EMAIL_TO", conf.EmailTo) conf.EmailFrom = config.Str("GOS_EMAIL_FROM", conf.EmailFrom) conf.SocialPlatformsEnabled = config.StrSlice("GOS_SOCIAL_PLATFORMS_ENABLED", - []string{types.Mastodon, types.LinkedIn}) + []string{types.Mastodon, types.LinkedIn, types.Textfile}) conf.SMTPServer = config.Str("GOS_SMTP_SERVER", conf.SMTPServer, func() string { hostname, err := os.Hostname() diff --git a/internal/server/repository/pending.go b/internal/server/repository/pending.go index bf8a571..2245f30 100644 --- a/internal/server/repository/pending.go +++ b/internal/server/repository/pending.go @@ -35,3 +35,14 @@ func (p pending) get(platform types.PlatformName) (pendingEntries, bool) { pe, ok := p.platforms[platform] return pe, ok && len(pe) > 0 } + +func (p pending) next(platform types.PlatformName) (types.EntryID, bool) { + pe, ok := p.get(platform) + if !ok { + return "", false + } + for id := range pe { + return id, true + } + return "", false +} diff --git a/internal/server/repository/pending_test.go b/internal/server/repository/pending_test.go index 44fe84c..28563a6 100644 --- a/internal/server/repository/pending_test.go +++ b/internal/server/repository/pending_test.go @@ -46,3 +46,21 @@ func TestPendingDelete(t *testing.T) { t.Error("expected not an ok", entries) } } + +func TestPendingNext(t *testing.T) { + pending := newPending() + + id, ok := pending.next(types.LinkedIn) + if ok { + t.Error("not expected ok return status", id) + } + + pending.add(types.LinkedIn, "fooid") + id, ok = pending.next(types.LinkedIn) + if !ok { + t.Error("expected ok return status") + } + if id != "fooid" { + t.Error("expected entry ID fooid") + } +} diff --git a/internal/server/repository/repository.go b/internal/server/repository/repository.go index 25d734f..77f23ec 100644 --- a/internal/server/repository/repository.go +++ b/internal/server/repository/repository.go @@ -69,13 +69,17 @@ func (r Repository) Next(platform types.PlatformName) (types.Entry, bool) { r.mu.Lock() defer r.mu.Unlock() - for _, entry := range r.entries { - if !entry.IsShared(platform) { - return entry, true - } + id, ok := r.pending.next(platform) + if !ok { + return types.Entry{}, false // No entry found } - return types.Entry{}, false // No entry found + var entry types.Entry + entry, ok = r.entries[id] + if !ok { + panic("did not expect that!") + } + return entry, true } // Load repository into memory if not done yet. diff --git a/internal/server/repository/repository_test.go b/internal/server/repository/repository_test.go index b2f13e3..cdde29c 100644 --- a/internal/server/repository/repository_test.go +++ b/internal/server/repository/repository_test.go @@ -298,7 +298,12 @@ func TestRepositoryNext(t *testing.T) { t.Parallel() fs := make(vfs.MemoryFS) - repo := newRepository(server.ServerConfig{DataDir: "./data"}, fs) + repo := newRepository(server.ServerConfig{ + DataDir: "./data", + SocialPlatformsEnabled: []types.PlatformName{ + types.LinkedIn, types.Mastodon, types.Textfile, + }, + }, fs) entries := makeEntries(t) for _, entry := range entries { @@ -313,8 +318,8 @@ func TestRepositoryNext(t *testing.T) { t.Error("expected an unshared LinkedIn entry to be found") } - if _, ok := repo.Next("DoesNotYetExist"); !ok { - t.Error("expected an unshared DoesNotYetExist entry to be found") + if _, ok := repo.Next(types.Textfile); !ok { + t.Error("expected an unshared Textfile entry to be found") } } -- cgit v1.2.3