category_test.go 4.6 KB

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