category_test.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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 "%v" instead of "%v"`, category.Title, categoryName)
  66. }
  67. }
  68. func TestMarkCategoryAsRead(t *testing.T) {
  69. client := createClient(t)
  70. feed, category := createFeed(t, client)
  71. results, err := client.FeedEntries(feed.ID, nil)
  72. if err != nil {
  73. t.Fatalf(`Failed to get entries: %v`, err)
  74. }
  75. if results.Total == 0 {
  76. t.Fatalf(`Invalid number of entries: %d`, results.Total)
  77. }
  78. if results.Entries[0].Status != miniflux.EntryStatusUnread {
  79. t.Fatalf(`Invalid entry status, got %q instead of %q`, results.Entries[0].Status, miniflux.EntryStatusUnread)
  80. }
  81. if err := client.MarkCategoryAsRead(category.ID); err != nil {
  82. t.Fatalf(`Failed to mark category as read: %v`, err)
  83. }
  84. results, err = client.FeedEntries(feed.ID, nil)
  85. if err != nil {
  86. t.Fatalf(`Failed to get updated entries: %v`, err)
  87. }
  88. for _, entry := range results.Entries {
  89. if entry.Status != miniflux.EntryStatusRead {
  90. t.Errorf(`Status for entry %d was %q instead of %q`, entry.ID, entry.Status, miniflux.EntryStatusRead)
  91. }
  92. }
  93. }
  94. func TestListCategories(t *testing.T) {
  95. categoryName := "My category"
  96. client := createClient(t)
  97. _, err := client.CreateCategory(categoryName)
  98. if err != nil {
  99. t.Fatal(err)
  100. }
  101. categories, err := client.Categories()
  102. if err != nil {
  103. t.Fatal(err)
  104. }
  105. if len(categories) != 2 {
  106. t.Fatalf(`Invalid number of categories, got "%v" instead of "%v"`, len(categories), 2)
  107. }
  108. if categories[0].ID == 0 {
  109. t.Fatalf(`Invalid categoryID, got "%v"`, categories[0].ID)
  110. }
  111. if categories[0].UserID <= 0 {
  112. t.Fatalf(`Invalid userID, got "%v"`, categories[0].UserID)
  113. }
  114. if categories[0].Title != "All" {
  115. t.Fatalf(`Invalid title, got "%v" instead of "%v"`, categories[0].Title, "All")
  116. }
  117. if categories[1].ID == 0 {
  118. t.Fatalf(`Invalid categoryID, got "%v"`, categories[0].ID)
  119. }
  120. if categories[1].UserID <= 0 {
  121. t.Fatalf(`Invalid userID, got "%v"`, categories[1].UserID)
  122. }
  123. if categories[1].Title != categoryName {
  124. t.Fatalf(`Invalid title, got "%v" instead of "%v"`, categories[1].Title, categoryName)
  125. }
  126. }
  127. func TestDeleteCategory(t *testing.T) {
  128. client := createClient(t)
  129. category, err := client.CreateCategory("My category")
  130. if err != nil {
  131. t.Fatal(err)
  132. }
  133. err = client.DeleteCategory(category.ID)
  134. if err != nil {
  135. t.Fatal(`Removing a category should not raise any error`)
  136. }
  137. }
  138. func TestCannotDeleteCategoryOfAnotherUser(t *testing.T) {
  139. client := createClient(t)
  140. categories, err := client.Categories()
  141. if err != nil {
  142. t.Fatal(err)
  143. }
  144. client = createClient(t)
  145. err = client.DeleteCategory(categories[0].ID)
  146. if err == nil {
  147. t.Fatal(`Removing a category that belongs to another user should be forbidden`)
  148. }
  149. }