integration_check_mk_controller_test.rb 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. require 'test_helper'
  2. class IntegationCheckMkControllerTest < ActionDispatch::IntegrationTest
  3. setup do
  4. token = SecureRandom.urlsafe_base64(16)
  5. Setting.set('check_mk_token', token)
  6. Setting.set('check_mk_integration', true)
  7. end
  8. test '01 without token' do
  9. post '/api/v1/integration/check_mk/', params: {}
  10. assert_response(404)
  11. end
  12. test '01 invalid token & enabled feature' do
  13. post '/api/v1/integration/check_mk/invalid_token', params: {}
  14. assert_response(422)
  15. result = JSON.parse(@response.body)
  16. assert_equal(Hash, result.class)
  17. assert_equal('Invalid token!', result['error'])
  18. end
  19. test '01 invalid token & disabled feature' do
  20. Setting.set('check_mk_integration', false)
  21. post '/api/v1/integration/check_mk/invalid_token', params: {}
  22. assert_response(422)
  23. result = JSON.parse(@response.body)
  24. assert_equal(Hash, result.class)
  25. assert_equal('Feature is disable, please contact your admin to enable it!', result['error'])
  26. end
  27. test '02 ticket create & close' do
  28. params = {
  29. event_id: '123',
  30. state: 'down',
  31. host: 'some host',
  32. service: 'some service',
  33. }
  34. post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
  35. assert_response(200)
  36. result = JSON.parse(@response.body)
  37. assert_equal(Hash, result.class)
  38. assert(result['result'])
  39. assert(result['ticket_id'])
  40. assert(result['ticket_number'])
  41. ticket = Ticket.find(result['ticket_id'])
  42. assert_equal('new', ticket.state.name)
  43. assert_equal(1, ticket.articles.count)
  44. params = {
  45. event_id: '123',
  46. state: 'up',
  47. host: 'some host',
  48. service: 'some service',
  49. }
  50. post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
  51. assert_response(200)
  52. result = JSON.parse(@response.body)
  53. assert_equal(Hash, result.class)
  54. assert(result['result'])
  55. assert(result['ticket_ids'].include?(ticket.id))
  56. ticket.reload
  57. assert_equal('closed', ticket.state.name)
  58. assert_equal(2, ticket.articles.count)
  59. end
  60. test '02 ticket create & create & auto close' do
  61. params = {
  62. event_id: '123',
  63. state: 'down',
  64. host: 'some host',
  65. service: 'some service',
  66. }
  67. post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
  68. assert_response(200)
  69. result = JSON.parse(@response.body)
  70. assert_equal(Hash, result.class)
  71. assert(result['result'])
  72. assert(result['ticket_id'])
  73. assert(result['ticket_number'])
  74. ticket = Ticket.find(result['ticket_id'])
  75. assert_equal('new', ticket.state.name)
  76. assert_equal(1, ticket.articles.count)
  77. params = {
  78. event_id: '123',
  79. state: 'down',
  80. host: 'some host',
  81. service: 'some service',
  82. }
  83. post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
  84. assert_response(200)
  85. result = JSON.parse(@response.body)
  86. assert_equal(Hash, result.class)
  87. assert_equal('ticket already open, added note', result['result'])
  88. assert(result['ticket_ids'].include?(ticket.id))
  89. ticket.reload
  90. assert_equal('new', ticket.state.name)
  91. assert_equal(2, ticket.articles.count)
  92. params = {
  93. event_id: '123',
  94. state: 'up',
  95. host: 'some host',
  96. service: 'some service',
  97. }
  98. post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
  99. assert_response(200)
  100. result = JSON.parse(@response.body)
  101. assert_equal(Hash, result.class)
  102. assert(result['result'])
  103. assert(result['ticket_ids'].include?(ticket.id))
  104. ticket.reload
  105. assert_equal('closed', ticket.state.name)
  106. assert_equal(3, ticket.articles.count)
  107. end
  108. test '02 ticket close' do
  109. params = {
  110. event_id: '123',
  111. state: 'up',
  112. host: 'some host',
  113. service: 'some service',
  114. }
  115. post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
  116. assert_response(200)
  117. result = JSON.parse(@response.body)
  118. assert_equal(Hash, result.class)
  119. assert_equal('no open tickets found, ignore action', result['result'])
  120. end
  121. test '02 ticket create & create & no auto close' do
  122. Setting.set('check_mk_auto_close', false)
  123. params = {
  124. event_id: '123',
  125. state: 'down',
  126. host: 'some host',
  127. service: 'some service',
  128. }
  129. post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
  130. assert_response(200)
  131. result = JSON.parse(@response.body)
  132. assert_equal(Hash, result.class)
  133. assert(result['result'])
  134. assert(result['ticket_id'])
  135. assert(result['ticket_number'])
  136. ticket = Ticket.find(result['ticket_id'])
  137. assert_equal('new', ticket.state.name)
  138. assert_equal(1, ticket.articles.count)
  139. params = {
  140. event_id: '123',
  141. state: 'down',
  142. host: 'some host',
  143. service: 'some service',
  144. }
  145. post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
  146. assert_response(200)
  147. result = JSON.parse(@response.body)
  148. assert_equal(Hash, result.class)
  149. assert_equal('ticket already open, added note', result['result'])
  150. assert(result['ticket_ids'].include?(ticket.id))
  151. ticket.reload
  152. assert_equal('new', ticket.state.name)
  153. assert_equal(2, ticket.articles.count)
  154. params = {
  155. event_id: '123',
  156. state: 'up',
  157. host: 'some host',
  158. service: 'some service',
  159. }
  160. post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
  161. assert_response(200)
  162. result = JSON.parse(@response.body)
  163. assert_equal(Hash, result.class)
  164. assert_equal('ticket already open, added note', result['result'])
  165. assert(result['ticket_ids'].include?(ticket.id))
  166. ticket.reload
  167. assert_equal('new', ticket.state.name)
  168. assert_equal(3, ticket.articles.count)
  169. end
  170. test '02 ticket create & create & auto close - host only' do
  171. params = {
  172. event_id: '123',
  173. state: 'down',
  174. host: 'some host',
  175. }
  176. post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
  177. assert_response(200)
  178. result = JSON.parse(@response.body)
  179. assert_equal(Hash, result.class)
  180. assert(result['result'])
  181. assert(result['ticket_id'])
  182. assert(result['ticket_number'])
  183. ticket = Ticket.find(result['ticket_id'])
  184. assert_equal('new', ticket.state.name)
  185. assert_equal(1, ticket.articles.count)
  186. params = {
  187. event_id: '123',
  188. state: 'down',
  189. host: 'some host',
  190. }
  191. post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
  192. assert_response(200)
  193. result = JSON.parse(@response.body)
  194. assert_equal(Hash, result.class)
  195. assert_equal('ticket already open, added note', result['result'])
  196. assert(result['ticket_ids'].include?(ticket.id))
  197. ticket.reload
  198. assert_equal('new', ticket.state.name)
  199. assert_equal(2, ticket.articles.count)
  200. params = {
  201. event_id: '123',
  202. state: 'up',
  203. host: 'some host',
  204. }
  205. post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
  206. assert_response(200)
  207. result = JSON.parse(@response.body)
  208. assert_equal(Hash, result.class)
  209. assert(result['result'])
  210. assert(result['ticket_ids'].include?(ticket.id))
  211. ticket.reload
  212. assert_equal('closed', ticket.state.name)
  213. assert_equal(3, ticket.articles.count)
  214. end
  215. end