summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-09-12 22:52:55 +0300
committerPaul Buetow <paul@buetow.org>2024-09-12 22:53:21 +0300
commit608f9a54cef4f081bfa245fec27e49bc237820eb (patch)
treefd575336538f2bba3da07d5b78200affbb5cc619
parentc8bc93c24bc392287bbce65222360f740cb11814 (diff)
use pending.next to determine next
-rw-r--r--internal/config/server/server.go2
-rw-r--r--internal/server/repository/pending.go11
-rw-r--r--internal/server/repository/pending_test.go18
-rw-r--r--internal/server/repository/repository.go14
-rw-r--r--internal/server/repository/repository_test.go11
5 files changed, 47 insertions, 9 deletions
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")
}
}