gitea源码

commit_status_test.go 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package commitstatus
  4. import "testing"
  5. func TestCombine(t *testing.T) {
  6. tests := []struct {
  7. name string
  8. states CommitStatusStates
  9. expected CommitStatusState
  10. }{
  11. // 0 states
  12. {
  13. name: "empty",
  14. states: CommitStatusStates{},
  15. expected: CommitStatusPending,
  16. },
  17. // 1 state
  18. {
  19. name: "pending",
  20. states: CommitStatusStates{CommitStatusPending},
  21. expected: CommitStatusPending,
  22. },
  23. {
  24. name: "success",
  25. states: CommitStatusStates{CommitStatusSuccess},
  26. expected: CommitStatusSuccess,
  27. },
  28. {
  29. name: "error",
  30. states: CommitStatusStates{CommitStatusError},
  31. expected: CommitStatusFailure,
  32. },
  33. {
  34. name: "failure",
  35. states: CommitStatusStates{CommitStatusFailure},
  36. expected: CommitStatusFailure,
  37. },
  38. {
  39. name: "warning",
  40. states: CommitStatusStates{CommitStatusWarning},
  41. expected: CommitStatusSuccess,
  42. },
  43. // 2 states
  44. {
  45. name: "pending and success",
  46. states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess},
  47. expected: CommitStatusPending,
  48. },
  49. {
  50. name: "pending and error",
  51. states: CommitStatusStates{CommitStatusPending, CommitStatusError},
  52. expected: CommitStatusFailure,
  53. },
  54. {
  55. name: "pending and failure",
  56. states: CommitStatusStates{CommitStatusPending, CommitStatusFailure},
  57. expected: CommitStatusFailure,
  58. },
  59. {
  60. name: "pending and warning",
  61. states: CommitStatusStates{CommitStatusPending, CommitStatusWarning},
  62. expected: CommitStatusPending,
  63. },
  64. {
  65. name: "success and error",
  66. states: CommitStatusStates{CommitStatusSuccess, CommitStatusError},
  67. expected: CommitStatusFailure,
  68. },
  69. {
  70. name: "success and failure",
  71. states: CommitStatusStates{CommitStatusSuccess, CommitStatusFailure},
  72. expected: CommitStatusFailure,
  73. },
  74. {
  75. name: "success and warning",
  76. states: CommitStatusStates{CommitStatusSuccess, CommitStatusWarning},
  77. expected: CommitStatusSuccess,
  78. },
  79. {
  80. name: "error and failure",
  81. states: CommitStatusStates{CommitStatusError, CommitStatusFailure},
  82. expected: CommitStatusFailure,
  83. },
  84. {
  85. name: "error and warning",
  86. states: CommitStatusStates{CommitStatusError, CommitStatusWarning},
  87. expected: CommitStatusFailure,
  88. },
  89. {
  90. name: "failure and warning",
  91. states: CommitStatusStates{CommitStatusFailure, CommitStatusWarning},
  92. expected: CommitStatusFailure,
  93. },
  94. // 3 states
  95. {
  96. name: "pending, success and warning",
  97. states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess, CommitStatusWarning},
  98. expected: CommitStatusPending,
  99. },
  100. {
  101. name: "pending, success and error",
  102. states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess, CommitStatusError},
  103. expected: CommitStatusFailure,
  104. },
  105. {
  106. name: "pending, success and failure",
  107. states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess, CommitStatusFailure},
  108. expected: CommitStatusFailure,
  109. },
  110. {
  111. name: "pending, error and failure",
  112. states: CommitStatusStates{CommitStatusPending, CommitStatusError, CommitStatusFailure},
  113. expected: CommitStatusFailure,
  114. },
  115. {
  116. name: "success, error and warning",
  117. states: CommitStatusStates{CommitStatusSuccess, CommitStatusError, CommitStatusWarning},
  118. expected: CommitStatusFailure,
  119. },
  120. {
  121. name: "success, failure and warning",
  122. states: CommitStatusStates{CommitStatusSuccess, CommitStatusFailure, CommitStatusWarning},
  123. expected: CommitStatusFailure,
  124. },
  125. {
  126. name: "error, failure and warning",
  127. states: CommitStatusStates{CommitStatusError, CommitStatusFailure, CommitStatusWarning},
  128. expected: CommitStatusFailure,
  129. },
  130. {
  131. name: "success, warning and skipped",
  132. states: CommitStatusStates{CommitStatusSuccess, CommitStatusWarning, CommitStatusSkipped},
  133. expected: CommitStatusSuccess,
  134. },
  135. // All success
  136. {
  137. name: "all success",
  138. states: CommitStatusStates{CommitStatusSuccess, CommitStatusSuccess, CommitStatusSuccess},
  139. expected: CommitStatusSuccess,
  140. },
  141. // All pending
  142. {
  143. name: "all pending",
  144. states: CommitStatusStates{CommitStatusPending, CommitStatusPending, CommitStatusPending},
  145. expected: CommitStatusPending,
  146. },
  147. {
  148. name: "all skipped",
  149. states: CommitStatusStates{CommitStatusSkipped, CommitStatusSkipped, CommitStatusSkipped},
  150. expected: CommitStatusSuccess,
  151. },
  152. // 4 states
  153. {
  154. name: "pending, success, error and warning",
  155. states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess, CommitStatusError, CommitStatusWarning},
  156. expected: CommitStatusFailure,
  157. },
  158. {
  159. name: "pending, success, failure and warning",
  160. states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess, CommitStatusFailure, CommitStatusWarning},
  161. expected: CommitStatusFailure,
  162. },
  163. {
  164. name: "pending, error, failure and warning",
  165. states: CommitStatusStates{CommitStatusPending, CommitStatusError, CommitStatusFailure, CommitStatusWarning},
  166. expected: CommitStatusFailure,
  167. },
  168. {
  169. name: "success, error, failure and warning",
  170. states: CommitStatusStates{CommitStatusSuccess, CommitStatusError, CommitStatusFailure, CommitStatusWarning},
  171. expected: CommitStatusFailure,
  172. },
  173. {
  174. name: "mixed states",
  175. states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess, CommitStatusError, CommitStatusWarning},
  176. expected: CommitStatusFailure,
  177. },
  178. {
  179. name: "mixed states with all success",
  180. states: CommitStatusStates{CommitStatusSuccess, CommitStatusSuccess, CommitStatusPending, CommitStatusWarning},
  181. expected: CommitStatusPending,
  182. },
  183. {
  184. name: "all success with warning",
  185. states: CommitStatusStates{CommitStatusSuccess, CommitStatusSuccess, CommitStatusSuccess, CommitStatusWarning},
  186. expected: CommitStatusSuccess,
  187. },
  188. }
  189. for _, tt := range tests {
  190. t.Run(tt.name, func(t *testing.T) {
  191. result := tt.states.Combine()
  192. if result != tt.expected {
  193. t.Errorf("expected %v, got %v", tt.expected, result)
  194. }
  195. })
  196. }
  197. }