aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/client.go6
-rw-r--r--internal/api/api.go1
-rw-r--r--internal/api/entry.go6
-rw-r--r--internal/storage/entry.go2
-rw-r--r--internal/tests/entry_test.go37
5 files changed, 48 insertions, 4 deletions
diff --git a/client/client.go b/client/client.go
index bac7bdf1..d9d7fa8c 100644
--- a/client/client.go
+++ b/client/client.go
@@ -512,6 +512,12 @@ func (c *Client) FetchCounters() (*FeedCounters, error) {
return &result, nil
}
+// FlushHistory changes all entries with the status "read" to "removed".
+func (c *Client) FlushHistory() error {
+ _, err := c.request.Put("/v1/flush-history", nil)
+ return err
+}
+
func buildFilterQueryString(path string, filter *Filter) string {
if filter != nil {
values := url.Values{}
diff --git a/internal/api/api.go b/internal/api/api.go
index 1a53336c..2da998b5 100644
--- a/internal/api/api.go
+++ b/internal/api/api.go
@@ -66,4 +66,5 @@ func Serve(router *mux.Router, store *storage.Storage, pool *worker.Pool) {
sr.HandleFunc("/entries/{entryID}/bookmark", handler.toggleBookmark).Methods(http.MethodPut)
sr.HandleFunc("/entries/{entryID}/save", handler.saveEntry).Methods(http.MethodPost)
sr.HandleFunc("/entries/{entryID}/fetch-content", handler.fetchContent).Methods(http.MethodGet)
+ sr.HandleFunc("/flush-history", handler.flushHistory).Methods(http.MethodPut, http.MethodDelete)
}
diff --git a/internal/api/entry.go b/internal/api/entry.go
index 1355fa3b..e6c00e3a 100644
--- a/internal/api/entry.go
+++ b/internal/api/entry.go
@@ -283,6 +283,12 @@ func (h *handler) fetchContent(w http.ResponseWriter, r *http.Request) {
json.OK(w, r, map[string]string{"content": entry.Content})
}
+func (h *handler) flushHistory(w http.ResponseWriter, r *http.Request) {
+ loggedUserID := request.UserID(r)
+ go h.store.FlushHistory(loggedUserID)
+ json.Accepted(w, r)
+}
+
func configureFilters(builder *storage.EntryQueryBuilder, r *http.Request) {
if beforeEntryID := request.QueryInt64Param(r, "before_entry_id", 0); beforeEntryID > 0 {
builder.BeforeEntryID(beforeEntryID)
diff --git a/internal/storage/entry.go b/internal/storage/entry.go
index e36646b4..0ddbeebf 100644
--- a/internal/storage/entry.go
+++ b/internal/storage/entry.go
@@ -442,7 +442,7 @@ func (s *Storage) ToggleBookmark(userID int64, entryID int64) error {
return nil
}
-// FlushHistory set all entries with the status "read" to "removed".
+// FlushHistory changes all entries with the status "read" to "removed".
func (s *Storage) FlushHistory(userID int64) error {
query := `
UPDATE
diff --git a/internal/tests/entry_test.go b/internal/tests/entry_test.go
index 5d9ac03e..dde5582a 100644
--- a/internal/tests/entry_test.go
+++ b/internal/tests/entry_test.go
@@ -434,9 +434,9 @@ func TestHistoryOrder(t *testing.T) {
t.Fatal(err)
}
- selectedEntry := result.Entries[2].ID
+ selectedEntryID := result.Entries[2].ID
- err = client.UpdateEntries([]int64{selectedEntry}, miniflux.EntryStatusRead)
+ err = client.UpdateEntries([]int64{selectedEntryID}, miniflux.EntryStatusRead)
if err != nil {
t.Fatal(err)
}
@@ -446,7 +446,38 @@ func TestHistoryOrder(t *testing.T) {
t.Fatal(err)
}
- if history.Entries[0].ID != selectedEntry {
+ if history.Entries[0].ID != selectedEntryID {
t.Fatal("The entry that we just read should be at the top of the history")
}
}
+
+func TestFlushHistory(t *testing.T) {
+ client := createClient(t)
+ createFeed(t, client)
+
+ result, err := client.Entries(&miniflux.Filter{Limit: 1})
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ selectedEntryID := result.Entries[0].ID
+
+ err = client.UpdateEntries([]int64{selectedEntryID}, miniflux.EntryStatusRead)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ err = client.FlushHistory()
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ history, err := client.Entries(&miniflux.Filter{Status: miniflux.EntryStatusRemoved})
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if history.Entries[0].ID != selectedEntryID {
+ t.Fatal("The entry that we just read should have the removed status")
+ }
+}