io_test.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. package issues
  2. import (
  3. "os"
  4. "testing"
  5. "time"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. func Test_readPath_throws_not_found(t *testing.T) {
  9. _, err := readPath("doesntexist")
  10. assert.Error(t, err, "should never exist!")
  11. _, err2 := readPath("tests/asdfasdf")
  12. assert.Error(t, err2, "should never exist!")
  13. }
  14. func Test_readPath_succeeds(t *testing.T) {
  15. data, err := readPath("tests/bugs/test-1/description")
  16. if err != nil {
  17. assert.Fail(t, "function threw error, does tests/bugs/test-1 exist?")
  18. }
  19. assert.Equal(t, data, "test description\n")
  20. }
  21. func Test_IsIssue_success(t *testing.T) {
  22. val := IsIssue("tests/bugs/test-1")
  23. assert.True(t, val)
  24. }
  25. func Test_IsIssue_fail(t *testing.T) {
  26. val := IsIssue("tests/isnotabug")
  27. assert.False(t, val)
  28. }
  29. func Test_IsIssue_returns_false_on_error(t *testing.T) {
  30. val := IsIssue("willneverexist")
  31. assert.False(t, val)
  32. }
  33. func Test_IsIssueCollection_success(t *testing.T) {
  34. val := IsIssueCollection("tests/bugs/")
  35. assert.True(t, val)
  36. }
  37. func Test_IsIssueCollection_fail(t *testing.T) {
  38. val := IsIssueCollection("tests/")
  39. assert.False(t, val)
  40. }
  41. func Test_IsIssueCollection_returns_false_on_error(t *testing.T) {
  42. val := IsIssueCollection("willneverexist")
  43. assert.False(t, val)
  44. }
  45. func Test_WriteIssue_fails_on_existing(t *testing.T) {
  46. testIssue := Issue{
  47. Title: "",
  48. Path: "tests/bugs/test-1",
  49. }
  50. _, err := WriteIssue(testIssue, false)
  51. assert.Error(t, err)
  52. }
  53. func Test_WriteIssue_fails_on_bad_path(t *testing.T) {
  54. testIssue := Issue{
  55. Title: "",
  56. Path: "tests/cantexist/test",
  57. }
  58. _, err := WriteIssue(testIssue, false)
  59. assert.Error(t, err)
  60. }
  61. func Test_WriteIssue_creates_base_path(t *testing.T) {
  62. testIssue := Issue{Path: "tests/bugs/test-write1"}
  63. // clean up path
  64. err := os.RemoveAll(testIssue.Path)
  65. assert.Nil(t, err)
  66. // run test
  67. result, err := WriteIssue(testIssue, false)
  68. assert.Nil(t, err)
  69. assert.True(t, result)
  70. // clean up path
  71. err = os.RemoveAll(testIssue.Path)
  72. assert.Nil(t, err)
  73. }
  74. func Test_WriteIssue_creates_fields(t *testing.T) {
  75. testIssue := Issue{
  76. Path: "tests/bugs/test-write2",
  77. Status: Field{Path: "/status", Data: "test"},
  78. Description: Field{Path: "/description", Data: "test"},
  79. }
  80. // clean up path
  81. err := os.RemoveAll(testIssue.Path)
  82. assert.Nil(t, err)
  83. // run test
  84. result, err := WriteIssue(testIssue, false)
  85. assert.Nil(t, err)
  86. assert.True(t, result)
  87. // clean up path
  88. err = os.RemoveAll(testIssue.Path)
  89. assert.Nil(t, err)
  90. }
  91. func Test_WriteIssue_creates_variadic_fields(t *testing.T) {
  92. testIssue := Issue{
  93. Path: "tests/bugs/test-write3",
  94. Tags: VariadicField{
  95. Path: "/tags",
  96. Fields: []Field{
  97. {Path: "test1"},
  98. {Path: "test2"},
  99. },
  100. },
  101. Blockedby: VariadicField{
  102. Path: "/blockedby",
  103. Fields: []Field{
  104. {Path: "test1"},
  105. {Path: "test2"},
  106. },
  107. },
  108. }
  109. // clean up path
  110. err := os.RemoveAll(testIssue.Path)
  111. assert.Nil(t, err)
  112. // run test
  113. result, err := WriteIssue(testIssue, false)
  114. assert.Nil(t, err)
  115. assert.True(t, result)
  116. // clean up path
  117. err = os.RemoveAll(testIssue.Path)
  118. assert.Nil(t, err)
  119. }
  120. func Test_WriteIssue_overwrites(t *testing.T) {
  121. testIssue := Issue{
  122. Path: "tests/bugs/test-overwrite",
  123. Title: "test overwrite",
  124. Status: Field{Path: "/status", Data: "test"},
  125. Description: Field{Path: "/description", Data: "test"},
  126. Tags: VariadicField{
  127. Path: "/tags",
  128. Fields: []Field{
  129. {Path: "test1"},
  130. {Path: "test2"},
  131. },
  132. },
  133. Blockedby: VariadicField{
  134. Path: "/blockedby",
  135. Fields: []Field{
  136. {Path: "test1"},
  137. {Path: "test2"},
  138. },
  139. },
  140. }
  141. _, err := WriteIssue(testIssue, true)
  142. assert.Nil(t, err)
  143. }
  144. func Test_Generate_and_Read_Template(t *testing.T) {
  145. testPath := "tests/desc1"
  146. // clean up path
  147. err := os.RemoveAll(testPath)
  148. assert.Nil(t, err)
  149. err = GenerateTemplate(DescriptionTemplate, testPath)
  150. assert.Nil(t, err)
  151. lines, err := ReadTemplate(testPath)
  152. assert.Nil(t, err)
  153. assert.Equal(t, 1, len(lines))
  154. // clean up path
  155. err = os.RemoveAll(testPath)
  156. assert.Nil(t, err)
  157. }
  158. func Test_EditTemplate(t *testing.T) {
  159. testEditFunc := func(path string) error {
  160. d := []string{
  161. "title\n",
  162. "# ignore\n",
  163. "\n",
  164. "# ignore\n",
  165. "description\n",
  166. "# ignore\n",
  167. "# ignore\n",
  168. "# ignore\n",
  169. }
  170. send := ""
  171. for _, v := range d {
  172. send = send + v
  173. }
  174. err := os.WriteFile(path, []byte(send), 0755)
  175. time.Sleep(5 * time.Millisecond)
  176. return err
  177. }
  178. data, err := EditTemplate(DescriptionTemplate, testEditFunc)
  179. assert.Nil(t, err)
  180. assert.IsType(t, []string{}, data)
  181. assert.Equal(t, 4, len(data), data)
  182. }