entry_test.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. // Copyright 2018 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. // +build integration
  5. package tests
  6. import (
  7. "testing"
  8. miniflux "miniflux.app/client"
  9. )
  10. func TestGetAllFeedEntries(t *testing.T) {
  11. client := createClient(t)
  12. feed, _ := createFeed(t, client)
  13. allResults, err := client.FeedEntries(feed.ID, nil)
  14. if err != nil {
  15. t.Fatal(err)
  16. }
  17. if allResults.Total == 0 {
  18. t.Fatal(`Invalid number of entries`)
  19. }
  20. if allResults.Entries[0].Title == "" {
  21. t.Fatal(`Invalid entry title`)
  22. }
  23. filteredResults, err := client.FeedEntries(feed.ID, &miniflux.Filter{Limit: 1, Offset: 5})
  24. if err != nil {
  25. t.Fatal(err)
  26. }
  27. if allResults.Total != filteredResults.Total {
  28. t.Fatal(`Total should always contains the total number of items regardless of filters`)
  29. }
  30. if allResults.Entries[0].ID == filteredResults.Entries[0].ID {
  31. t.Fatal(`Filtered entries should be different than previous results`)
  32. }
  33. filteredResultsByEntryID, err := client.FeedEntries(feed.ID, &miniflux.Filter{BeforeEntryID: allResults.Entries[0].ID})
  34. if err != nil {
  35. t.Fatal(err)
  36. }
  37. if filteredResultsByEntryID.Entries[0].ID == allResults.Entries[0].ID {
  38. t.Fatal(`The first entry should filtered out`)
  39. }
  40. }
  41. func TestGetAllEntries(t *testing.T) {
  42. client := createClient(t)
  43. createFeed(t, client)
  44. resultWithoutSorting, err := client.Entries(nil)
  45. if err != nil {
  46. t.Fatal(err)
  47. }
  48. if resultWithoutSorting.Total == 0 {
  49. t.Fatal(`Invalid number of entries`)
  50. }
  51. resultWithStatusFilter, err := client.Entries(&miniflux.Filter{Status: miniflux.EntryStatusRead})
  52. if err != nil {
  53. t.Fatal(err)
  54. }
  55. if resultWithStatusFilter.Total != 0 {
  56. t.Fatal(`We should have 0 read entries`)
  57. }
  58. resultWithDifferentSorting, err := client.Entries(&miniflux.Filter{Order: "published_at", Direction: "desc"})
  59. if err != nil {
  60. t.Fatal(err)
  61. }
  62. if resultWithDifferentSorting.Entries[0].Title == resultWithoutSorting.Entries[0].Title {
  63. t.Fatalf(`The items should be sorted differently "%v" vs "%v"`, resultWithDifferentSorting.Entries[0].Title, resultWithoutSorting.Entries[0].Title)
  64. }
  65. resultWithStarredEntries, err := client.Entries(&miniflux.Filter{Starred: true})
  66. if err != nil {
  67. t.Fatal(err)
  68. }
  69. if resultWithStarredEntries.Total != 0 {
  70. t.Fatalf(`We are not supposed to have starred entries yet`)
  71. }
  72. }
  73. func TestSearchEntries(t *testing.T) {
  74. client := createClient(t)
  75. categories, err := client.Categories()
  76. if err != nil {
  77. t.Fatal(err)
  78. }
  79. feedID, err := client.CreateFeed("https://github.com/miniflux/miniflux/releases.atom", categories[0].ID)
  80. if err != nil {
  81. t.Fatal(err)
  82. }
  83. if feedID == 0 {
  84. t.Fatalf(`Invalid feed ID, got %q`, feedID)
  85. }
  86. results, err := client.Entries(&miniflux.Filter{Search: "2.0.8"})
  87. if err != nil {
  88. t.Fatal(err)
  89. }
  90. if results.Total != 1 {
  91. t.Fatalf(`We should have only one entry instead of %d`, results.Total)
  92. }
  93. }
  94. func TestInvalidFilters(t *testing.T) {
  95. client := createClient(t)
  96. createFeed(t, client)
  97. _, err := client.Entries(&miniflux.Filter{Status: "invalid"})
  98. if err == nil {
  99. t.Fatal(`Using invalid status should raise an error`)
  100. }
  101. _, err = client.Entries(&miniflux.Filter{Direction: "invalid"})
  102. if err == nil {
  103. t.Fatal(`Using invalid direction should raise an error`)
  104. }
  105. _, err = client.Entries(&miniflux.Filter{Order: "invalid"})
  106. if err == nil {
  107. t.Fatal(`Using invalid order should raise an error`)
  108. }
  109. }
  110. func TestGetEntry(t *testing.T) {
  111. client := createClient(t)
  112. createFeed(t, client)
  113. result, err := client.Entries(&miniflux.Filter{Limit: 1})
  114. if err != nil {
  115. t.Fatal(err)
  116. }
  117. entry, err := client.FeedEntry(result.Entries[0].FeedID, result.Entries[0].ID)
  118. if err != nil {
  119. t.Fatal(err)
  120. }
  121. if entry.ID != result.Entries[0].ID {
  122. t.Fatal("Wrong entry returned")
  123. }
  124. entry, err = client.Entry(result.Entries[0].ID)
  125. if err != nil {
  126. t.Fatal(err)
  127. }
  128. if entry.ID != result.Entries[0].ID {
  129. t.Fatal("Wrong entry returned")
  130. }
  131. }
  132. func TestUpdateStatus(t *testing.T) {
  133. client := createClient(t)
  134. createFeed(t, client)
  135. result, err := client.Entries(&miniflux.Filter{Limit: 1})
  136. if err != nil {
  137. t.Fatal(err)
  138. }
  139. err = client.UpdateEntries([]int64{result.Entries[0].ID}, miniflux.EntryStatusRead)
  140. if err != nil {
  141. t.Fatal(err)
  142. }
  143. entry, err := client.Entry(result.Entries[0].ID)
  144. if err != nil {
  145. t.Fatal(err)
  146. }
  147. if entry.Status != miniflux.EntryStatusRead {
  148. t.Fatal("The entry status should be updated")
  149. }
  150. err = client.UpdateEntries([]int64{result.Entries[0].ID}, "invalid")
  151. if err == nil {
  152. t.Fatal(`Invalid entry status should ne be accepted`)
  153. }
  154. }
  155. func TestToggleBookmark(t *testing.T) {
  156. client := createClient(t)
  157. createFeed(t, client)
  158. result, err := client.Entries(&miniflux.Filter{Limit: 1})
  159. if err != nil {
  160. t.Fatal(err)
  161. }
  162. if result.Entries[0].Starred {
  163. t.Fatal("The entry should not be starred")
  164. }
  165. err = client.ToggleBookmark(result.Entries[0].ID)
  166. if err != nil {
  167. t.Fatal(err)
  168. }
  169. entry, err := client.Entry(result.Entries[0].ID)
  170. if err != nil {
  171. t.Fatal(err)
  172. }
  173. if !entry.Starred {
  174. t.Fatal("The entry should be starred")
  175. }
  176. }