category_test.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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. //go:build integration
  5. // +build integration
  6. package tests
  7. import (
  8. "testing"
  9. miniflux "miniflux.app/client"
  10. )
  11. func TestCreateCategory(t *testing.T) {
  12. categoryName := "My category"
  13. client := createClient(t)
  14. category, err := client.CreateCategory(categoryName)
  15. if err != nil {
  16. t.Fatal(err)
  17. }
  18. if category.ID == 0 {
  19. t.Fatalf(`Invalid categoryID, got "%v"`, category.ID)
  20. }
  21. if category.UserID <= 0 {
  22. t.Fatalf(`Invalid userID, got "%v"`, category.UserID)
  23. }
  24. if category.Title != categoryName {
  25. t.Fatalf(`Invalid title, got "%v" instead of "%v"`, category.Title, categoryName)
  26. }
  27. }
  28. func TestCreateCategoryWithEmptyTitle(t *testing.T) {
  29. client := createClient(t)
  30. _, err := client.CreateCategory("")
  31. if err == nil {
  32. t.Fatal(`The category title should be mandatory`)
  33. }
  34. }
  35. func TestCannotCreateDuplicatedCategory(t *testing.T) {
  36. client := createClient(t)
  37. categoryName := "My category"
  38. _, err := client.CreateCategory(categoryName)
  39. if err != nil {
  40. t.Fatal(err)
  41. }
  42. _, err = client.CreateCategory(categoryName)
  43. if err == nil {
  44. t.Fatal(`Duplicated categories should not be allowed`)
  45. }
  46. }
  47. func TestUpdateCategory(t *testing.T) {
  48. categoryName := "My category"
  49. client := createClient(t)
  50. category, err := client.CreateCategory(categoryName)
  51. if err != nil {
  52. t.Fatal(err)
  53. }
  54. categoryName = "Updated category"
  55. category, err = client.UpdateCategory(category.ID, categoryName)
  56. if err != nil {
  57. t.Fatal(err)
  58. }
  59. if category.ID == 0 {
  60. t.Fatalf(`Invalid categoryID, got "%v"`, category.ID)
  61. }
  62. if category.UserID <= 0 {
  63. t.Fatalf(`Invalid userID, got "%v"`, category.UserID)
  64. }
  65. if category.Title != categoryName {
  66. t.Fatalf(`Invalid title, got %q instead of %q`, category.Title, categoryName)
  67. }
  68. }
  69. func TestUpdateInexistingCategory(t *testing.T) {
  70. client := createClient(t)
  71. _, err := client.UpdateCategory(4200000, "Test")
  72. if err != miniflux.ErrNotFound {
  73. t.Errorf(`Updating an inexisting category should returns a 404 instead of %v`, err)
  74. }
  75. }
  76. func TestMarkCategoryAsRead(t *testing.T) {
  77. client := createClient(t)
  78. feed, category := createFeed(t, client)
  79. results, err := client.FeedEntries(feed.ID, nil)
  80. if err != nil {
  81. t.Fatalf(`Failed to get entries: %v`, err)
  82. }
  83. if results.Total == 0 {
  84. t.Fatalf(`Invalid number of entries: %d`, results.Total)
  85. }
  86. if results.Entries[0].Status != miniflux.EntryStatusUnread {
  87. t.Fatalf(`Invalid entry status, got %q instead of %q`, results.Entries[0].Status, miniflux.EntryStatusUnread)
  88. }
  89. if err := client.MarkCategoryAsRead(category.ID); err != nil {
  90. t.Fatalf(`Failed to mark category as read: %v`, err)
  91. }
  92. results, err = client.FeedEntries(feed.ID, nil)
  93. if err != nil {
  94. t.Fatalf(`Failed to get updated entries: %v`, err)
  95. }
  96. for _, entry := range results.Entries {
  97. if entry.Status != miniflux.EntryStatusRead {
  98. t.Errorf(`Status for entry %d was %q instead of %q`, entry.ID, entry.Status, miniflux.EntryStatusRead)
  99. }
  100. }
  101. }
  102. func TestListCategories(t *testing.T) {
  103. categoryName := "My category"
  104. client := createClient(t)
  105. _, err := client.CreateCategory(categoryName)
  106. if err != nil {
  107. t.Fatal(err)
  108. }
  109. categories, err := client.Categories()
  110. if err != nil {
  111. t.Fatal(err)
  112. }
  113. if len(categories) != 2 {
  114. t.Fatalf(`Invalid number of categories, got "%v" instead of "%v"`, len(categories), 2)
  115. }
  116. if categories[0].ID == 0 {
  117. t.Fatalf(`Invalid categoryID, got "%v"`, categories[0].ID)
  118. }
  119. if categories[0].UserID <= 0 {
  120. t.Fatalf(`Invalid userID, got "%v"`, categories[0].UserID)
  121. }
  122. if categories[0].Title != "All" {
  123. t.Fatalf(`Invalid title, got "%v" instead of "%v"`, categories[0].Title, "All")
  124. }
  125. if categories[1].ID == 0 {
  126. t.Fatalf(`Invalid categoryID, got "%v"`, categories[0].ID)
  127. }
  128. if categories[1].UserID <= 0 {
  129. t.Fatalf(`Invalid userID, got "%v"`, categories[1].UserID)
  130. }
  131. if categories[1].Title != categoryName {
  132. t.Fatalf(`Invalid title, got "%v" instead of "%v"`, categories[1].Title, categoryName)
  133. }
  134. }
  135. func TestDeleteCategory(t *testing.T) {
  136. client := createClient(t)
  137. category, err := client.CreateCategory("My category")
  138. if err != nil {
  139. t.Fatal(err)
  140. }
  141. err = client.DeleteCategory(category.ID)
  142. if err != nil {
  143. t.Fatal(`Removing a category should not raise any error`)
  144. }
  145. }
  146. func TestCannotDeleteCategoryOfAnotherUser(t *testing.T) {
  147. client := createClient(t)
  148. categories, err := client.Categories()
  149. if err != nil {
  150. t.Fatal(err)
  151. }
  152. client = createClient(t)
  153. err = client.DeleteCategory(categories[0].ID)
  154. if err == nil {
  155. t.Fatal(`Removing a category that belongs to another user should be forbidden`)
  156. }
  157. }