shipit-engine 0.30.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +19 -4
  3. data/Rakefile +4 -2
  4. data/app/assets/images/magic-solid.svg +1 -0
  5. data/app/assets/javascripts/shipit/repositories_search.js.coffee +60 -0
  6. data/app/assets/javascripts/shipit/{search.js.coffee → stack_search.js.coffee} +0 -0
  7. data/app/assets/stylesheets/_pages/_deploy.scss +0 -2
  8. data/app/assets/stylesheets/_pages/_repositories.scss +148 -0
  9. data/app/assets/stylesheets/_pages/_stacks.scss +19 -3
  10. data/app/assets/stylesheets/merge_status.scss +0 -3
  11. data/app/assets/stylesheets/shipit.scss +1 -0
  12. data/app/controllers/concerns/shipit/active_model_serializers_patch.rb +1 -0
  13. data/app/controllers/concerns/shipit/api/cacheable.rb +1 -0
  14. data/app/controllers/concerns/shipit/api/paginable.rb +3 -2
  15. data/app/controllers/concerns/shipit/api/rendering.rb +5 -4
  16. data/app/controllers/concerns/shipit/authentication.rb +3 -2
  17. data/app/controllers/concerns/shipit/pagination.rb +2 -1
  18. data/app/controllers/shipit/api/base_controller.rb +11 -6
  19. data/app/controllers/shipit/api/ccmenu_controller.rb +2 -1
  20. data/app/controllers/shipit/api/commits_controller.rb +2 -1
  21. data/app/controllers/shipit/api/deploys_controller.rb +6 -3
  22. data/app/controllers/shipit/api/hooks_controller.rb +6 -5
  23. data/app/controllers/shipit/api/locks_controller.rb +5 -4
  24. data/app/controllers/shipit/api/merge_requests_controller.rb +37 -0
  25. data/app/controllers/shipit/api/outputs_controller.rb +2 -1
  26. data/app/controllers/shipit/api/release_statuses_controller.rb +3 -2
  27. data/app/controllers/shipit/api/rollbacks_controller.rb +34 -0
  28. data/app/controllers/shipit/api/stacks_controller.rb +32 -5
  29. data/app/controllers/shipit/api/tasks_controller.rb +6 -5
  30. data/app/controllers/shipit/api_clients_controller.rb +4 -3
  31. data/app/controllers/shipit/ccmenu_url_controller.rb +4 -3
  32. data/app/controllers/shipit/commit_checks_controller.rb +2 -1
  33. data/app/controllers/shipit/commits_controller.rb +2 -1
  34. data/app/controllers/shipit/deploys_controller.rb +4 -3
  35. data/app/controllers/shipit/github_authentication_controller.rb +4 -3
  36. data/app/controllers/shipit/merge_requests_controller.rb +31 -0
  37. data/app/controllers/shipit/merge_status_controller.rb +31 -30
  38. data/app/controllers/shipit/release_statuses_controller.rb +3 -2
  39. data/app/controllers/shipit/repositories_controller.rb +74 -0
  40. data/app/controllers/shipit/rollbacks_controller.rb +3 -2
  41. data/app/controllers/shipit/shipit_controller.rb +2 -1
  42. data/app/controllers/shipit/stacks_controller.rb +24 -9
  43. data/app/controllers/shipit/status_controller.rb +2 -1
  44. data/app/controllers/shipit/tasks_controller.rb +7 -6
  45. data/app/controllers/shipit/webhooks_controller.rb +26 -6
  46. data/app/helpers/shipit/chunks_helper.rb +3 -2
  47. data/app/helpers/shipit/deploys_helper.rb +4 -3
  48. data/app/helpers/shipit/github_url_helper.rb +9 -0
  49. data/app/helpers/shipit/merge_status_helper.rb +1 -0
  50. data/app/helpers/shipit/shipit_helper.rb +1 -1
  51. data/app/helpers/shipit/stacks_helper.rb +5 -0
  52. data/app/helpers/shipit/tasks_helper.rb +1 -0
  53. data/app/jobs/shipit/background_job.rb +4 -0
  54. data/app/jobs/shipit/background_job/unique.rb +1 -0
  55. data/app/jobs/shipit/cache_deploy_spec_job.rb +1 -0
  56. data/app/jobs/shipit/chunk_rollup_job.rb +4 -0
  57. data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
  58. data/app/jobs/shipit/continuous_delivery_job.rb +2 -1
  59. data/app/jobs/shipit/create_on_github_job.rb +7 -1
  60. data/app/jobs/shipit/create_release_statuses_job.rb +1 -0
  61. data/app/jobs/shipit/deferred_touch_job.rb +4 -0
  62. data/app/jobs/shipit/deliver_hook_job.rb +2 -1
  63. data/app/jobs/shipit/destroy_job.rb +1 -0
  64. data/app/jobs/shipit/destroy_repository_job.rb +24 -0
  65. data/app/jobs/shipit/destroy_stack_job.rb +3 -2
  66. data/app/jobs/shipit/emit_event_job.rb +2 -1
  67. data/app/jobs/shipit/fetch_commit_stats_job.rb +1 -0
  68. data/app/jobs/shipit/fetch_deployed_revision_job.rb +1 -0
  69. data/app/jobs/shipit/github_sync_job.rb +15 -10
  70. data/app/jobs/shipit/mark_deploy_healthy_job.rb +1 -0
  71. data/app/jobs/shipit/perform_commit_checks_job.rb +1 -0
  72. data/app/jobs/shipit/perform_task_job.rb +5 -92
  73. data/app/jobs/shipit/process_merge_requests_job.rb +32 -0
  74. data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
  75. data/app/jobs/shipit/reap_dead_tasks_job.rb +21 -0
  76. data/app/jobs/shipit/refresh_check_runs_job.rb +1 -0
  77. data/app/jobs/shipit/refresh_github_user_job.rb +1 -0
  78. data/app/jobs/shipit/refresh_merge_request_job.rb +11 -0
  79. data/app/jobs/shipit/refresh_statuses_job.rb +1 -0
  80. data/app/jobs/shipit/setup_github_hook_job.rb +1 -0
  81. data/app/jobs/shipit/update_estimated_deploy_duration_job.rb +1 -0
  82. data/app/jobs/shipit/update_github_last_deployed_ref_job.rb +5 -4
  83. data/app/models/concerns/shipit/deferred_touch.rb +4 -3
  84. data/app/models/shipit/anonymous_user.rb +15 -2
  85. data/app/models/shipit/api_client.rb +3 -2
  86. data/app/models/shipit/application_record.rb +2 -1
  87. data/app/models/shipit/check_run.rb +41 -4
  88. data/app/models/shipit/command_line_user.rb +5 -0
  89. data/app/models/shipit/commit.rb +42 -24
  90. data/app/models/shipit/commit_checks.rb +15 -13
  91. data/app/models/shipit/commit_deployment.rb +6 -5
  92. data/app/models/shipit/commit_deployment_status.rb +5 -4
  93. data/app/models/shipit/commit_message.rb +1 -0
  94. data/app/models/shipit/delivery.rb +4 -3
  95. data/app/models/shipit/deploy.rb +23 -28
  96. data/app/models/shipit/deploy_spec.rb +38 -7
  97. data/app/models/shipit/deploy_spec/bundler_discovery.rb +1 -0
  98. data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
  99. data/app/models/shipit/deploy_spec/file_system.rb +20 -7
  100. data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -0
  101. data/app/models/shipit/deploy_spec/lerna_discovery.rb +13 -4
  102. data/app/models/shipit/deploy_spec/npm_discovery.rb +5 -4
  103. data/app/models/shipit/deploy_spec/pypi_discovery.rb +1 -0
  104. data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
  105. data/app/models/shipit/deploy_stats.rb +2 -1
  106. data/app/models/shipit/duration.rb +5 -2
  107. data/app/models/shipit/ephemeral_commit_checks.rb +1 -0
  108. data/app/models/shipit/github_hook.rb +2 -1
  109. data/app/models/shipit/github_status.rb +2 -1
  110. data/app/models/shipit/hook.rb +34 -7
  111. data/app/models/shipit/membership.rb +3 -2
  112. data/app/models/shipit/merge_request.rb +304 -0
  113. data/app/models/shipit/output_chunk.rb +7 -2
  114. data/app/models/shipit/provisioning_handler.rb +32 -0
  115. data/app/models/shipit/provisioning_handler/base.rb +30 -0
  116. data/app/models/shipit/provisioning_handler/unregistered_provisioning_handler.rb +35 -0
  117. data/app/models/shipit/pull_request.rb +28 -266
  118. data/app/models/shipit/pull_request_assignment.rb +10 -0
  119. data/app/models/shipit/record.rb +18 -0
  120. data/app/models/shipit/release_status.rb +4 -3
  121. data/app/models/shipit/repository.rb +71 -6
  122. data/app/models/shipit/review_stack.rb +130 -0
  123. data/app/models/shipit/review_stack_provisioning_queue.rb +39 -0
  124. data/app/models/shipit/rollback.rb +1 -0
  125. data/app/models/shipit/stack.rb +144 -44
  126. data/app/models/shipit/status.rb +3 -2
  127. data/app/models/shipit/status/common.rb +7 -6
  128. data/app/models/shipit/status/group.rb +2 -1
  129. data/app/models/shipit/status/missing.rb +2 -1
  130. data/app/models/shipit/status/unknown.rb +2 -1
  131. data/app/models/shipit/task.rb +98 -12
  132. data/app/models/shipit/task_definition.rb +1 -0
  133. data/app/models/shipit/task_execution_strategy/base.rb +20 -0
  134. data/app/models/shipit/task_execution_strategy/default.rb +109 -0
  135. data/app/models/shipit/team.rb +6 -3
  136. data/app/models/shipit/undeployed_commit.rb +1 -0
  137. data/app/models/shipit/unlimited_api_client.rb +1 -0
  138. data/app/models/shipit/user.rb +19 -8
  139. data/app/models/shipit/variable_definition.rb +1 -0
  140. data/app/models/shipit/webhooks.rb +11 -0
  141. data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +1 -0
  142. data/app/models/shipit/webhooks/handlers/handler.rb +1 -0
  143. data/app/models/shipit/webhooks/handlers/membership_handler.rb +1 -0
  144. data/app/models/shipit/webhooks/handlers/pull_request/assigned_handler.rb +74 -0
  145. data/app/models/shipit/webhooks/handlers/pull_request/closed_handler.rb +68 -0
  146. data/app/models/shipit/webhooks/handlers/pull_request/edited_handler.rb +74 -0
  147. data/app/models/shipit/webhooks/handlers/pull_request/label_capturing_handler.rb +127 -0
  148. data/app/models/shipit/webhooks/handlers/pull_request/labeled_handler.rb +106 -0
  149. data/app/models/shipit/webhooks/handlers/pull_request/opened_handler.rb +83 -0
  150. data/app/models/shipit/webhooks/handlers/pull_request/reopened_handler.rb +88 -0
  151. data/app/models/shipit/webhooks/handlers/pull_request/review_stack_adapter.rb +103 -0
  152. data/app/models/shipit/webhooks/handlers/pull_request/unlabeled_handler.rb +107 -0
  153. data/app/models/shipit/webhooks/handlers/push_handler.rb +5 -1
  154. data/app/models/shipit/webhooks/handlers/status_handler.rb +1 -0
  155. data/app/serializers/concerns/shipit/conditional_attributes.rb +1 -0
  156. data/app/serializers/shipit/anonymous_user_serializer.rb +1 -0
  157. data/app/serializers/shipit/command_line_user_serializer.rb +1 -0
  158. data/app/serializers/shipit/commit_serializer.rb +1 -0
  159. data/app/serializers/shipit/deploy_serializer.rb +8 -1
  160. data/app/serializers/shipit/hook_serializer.rb +1 -0
  161. data/app/serializers/shipit/merge_request_serializer.rb +21 -0
  162. data/app/serializers/shipit/pull_request_serializer.rb +6 -8
  163. data/app/serializers/shipit/review_stack_serializer.rb +7 -0
  164. data/app/serializers/shipit/rollback_serializer.rb +1 -0
  165. data/app/serializers/shipit/short_commit_serializer.rb +1 -0
  166. data/app/serializers/shipit/stack_serializer.rb +8 -6
  167. data/app/serializers/shipit/tail_task_serializer.rb +11 -2
  168. data/app/serializers/shipit/task_serializer.rb +2 -17
  169. data/app/serializers/shipit/user_serializer.rb +6 -1
  170. data/app/validators/ascii_only_validator.rb +1 -0
  171. data/app/validators/subset_validator.rb +2 -1
  172. data/app/views/layouts/merge_status.html.erb +1 -1
  173. data/app/views/layouts/shipit.html.erb +1 -1
  174. data/app/views/shipit/_variables.html.erb +1 -1
  175. data/app/views/shipit/ccmenu/project.xml.builder +2 -1
  176. data/app/views/shipit/deploys/show.html.erb +2 -2
  177. data/app/views/shipit/merge_requests/_merge_request.html.erb +29 -0
  178. data/app/views/shipit/{pull_requests → merge_requests}/index.html.erb +2 -2
  179. data/app/views/shipit/merge_requests/merge_requests/_pull_request.html.erb +29 -0
  180. data/app/views/shipit/merge_requests/merge_requests/index.html.erb +20 -0
  181. data/app/views/shipit/merge_status/_merge_queue_button.html.erb +3 -3
  182. data/app/views/shipit/merge_status/backlogged.html.erb +1 -1
  183. data/app/views/shipit/merge_status/failure.html.erb +1 -1
  184. data/app/views/shipit/merge_status/locked.html.erb +1 -1
  185. data/app/views/shipit/merge_status/success.html.erb +2 -2
  186. data/app/views/shipit/repositories/_header.html.erb +19 -0
  187. data/app/views/shipit/repositories/index.html.erb +31 -0
  188. data/app/views/shipit/repositories/new.html.erb +23 -0
  189. data/app/views/shipit/repositories/settings.html.erb +53 -0
  190. data/app/views/shipit/repositories/show.html.erb +30 -0
  191. data/app/views/shipit/stacks/_banners.html.erb +15 -1
  192. data/app/views/shipit/stacks/_header.html.erb +20 -7
  193. data/app/views/shipit/stacks/_stack.html.erb +8 -0
  194. data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
  195. data/app/views/shipit/stacks/index.html.erb +3 -2
  196. data/app/views/shipit/stacks/new.html.erb +1 -1
  197. data/app/views/shipit/stacks/settings.html.erb +5 -5
  198. data/app/views/shipit/stacks/show.html.erb +1 -1
  199. data/app/views/shipit/tasks/_task_output.html.erb +1 -1
  200. data/app/views/shipit/tasks/show.html.erb +1 -1
  201. data/config/initializers/inflections.rb +2 -1
  202. data/config/locales/en.yml +4 -3
  203. data/config/routes.rb +25 -7
  204. data/config/secrets.development.example.yml +24 -0
  205. data/config/secrets.development.shopify.yml +20 -9
  206. data/db/migrate/20200226211925_add_index_to_tasks_status.rb +5 -0
  207. data/db/migrate/20200427135152_add_pull_request_head_sha_to_commit.rb +5 -0
  208. data/db/migrate/20200615181558_add_rollback_once_aborted_to.rb +5 -0
  209. data/db/migrate/20200706145406_add_review_stacks.rb +12 -0
  210. data/db/migrate/20200804144639_rename_pull_request_to_merge_request.rb +7 -0
  211. data/db/migrate/20200804161512_rename_commits_pull_request_id_to_merge_request_id.rb +5 -0
  212. data/db/migrate/20200813134712_recreate_shipit_pull_requests.rb +22 -0
  213. data/db/migrate/20200813194056_create_pull_request_assignments.rb +8 -0
  214. data/db/migrate/20201001125502_add_provision_pr_stacks_flag_to_repositories.rb +7 -0
  215. data/db/migrate/20201008145809_add_retry_attempt_to_tasks.rb +5 -0
  216. data/db/migrate/20201008152744_add_max_retries_to_tasks.rb +5 -0
  217. data/db/migrate/20210325194053_remove_stacks_branch_default.rb +5 -0
  218. data/db/migrate/20210504200438_add_github_updated_at_to_check_runs.rb +5 -0
  219. data/lib/shipit.rb +61 -17
  220. data/lib/shipit/cast_value.rb +1 -0
  221. data/lib/shipit/command.rb +20 -21
  222. data/lib/shipit/commands.rb +14 -6
  223. data/lib/shipit/csv_serializer.rb +1 -0
  224. data/lib/shipit/deploy_commands.rb +1 -0
  225. data/lib/shipit/engine.rb +9 -2
  226. data/lib/shipit/environment_variables.rb +11 -1
  227. data/lib/shipit/first_parent_commits_iterator.rb +1 -0
  228. data/lib/shipit/flock.rb +9 -1
  229. data/lib/shipit/github_app.rb +15 -12
  230. data/lib/shipit/github_http_cache_middleware.rb +1 -0
  231. data/lib/shipit/null_serializer.rb +1 -0
  232. data/lib/shipit/octokit_check_runs.rb +3 -2
  233. data/lib/shipit/octokit_iterator.rb +4 -3
  234. data/lib/shipit/paginator.rb +3 -2
  235. data/lib/shipit/review_stack_commands.rb +8 -0
  236. data/lib/shipit/rollback_commands.rb +1 -0
  237. data/lib/shipit/same_site_cookie_middleware.rb +29 -0
  238. data/lib/shipit/simple_message_verifier.rb +3 -2
  239. data/lib/shipit/stack_commands.rb +37 -7
  240. data/lib/shipit/stat.rb +1 -0
  241. data/lib/shipit/task_commands.rb +23 -16
  242. data/lib/shipit/version.rb +2 -1
  243. data/lib/snippets/publish-lerna-independent-packages +35 -34
  244. data/lib/snippets/publish-lerna-independent-packages-legacy +39 -0
  245. data/lib/snippets/release-gem +5 -1
  246. data/lib/tasks/cron.rake +13 -2
  247. data/lib/tasks/dev.rake +3 -2
  248. data/lib/tasks/shipit.rake +15 -14
  249. data/lib/tasks/teams.rake +1 -0
  250. data/test/controllers/api/base_controller_test.rb +3 -2
  251. data/test/controllers/api/ccmenu_controller_test.rb +9 -8
  252. data/test/controllers/api/commits_controller_test.rb +3 -2
  253. data/test/controllers/api/deploys_controller_test.rb +32 -14
  254. data/test/controllers/api/hooks_controller_test.rb +8 -7
  255. data/test/controllers/api/locks_controller_test.rb +7 -6
  256. data/test/controllers/api/{pull_requests_controller_test.rb → merge_requests_controller_test.rb} +17 -16
  257. data/test/controllers/api/outputs_controller_test.rb +3 -1
  258. data/test/controllers/api/release_statuses_controller_test.rb +2 -1
  259. data/test/controllers/api/rollback_controller_test.rb +113 -0
  260. data/test/controllers/api/stacks_controller_test.rb +71 -16
  261. data/test/controllers/api/tasks_controller_test.rb +13 -12
  262. data/test/controllers/api_clients_controller_test.rb +5 -4
  263. data/test/controllers/ccmenu_controller_test.rb +4 -3
  264. data/test/controllers/commit_checks_controller_test.rb +4 -3
  265. data/test/controllers/commits_controller_test.rb +3 -2
  266. data/test/controllers/deploys_controller_test.rb +32 -21
  267. data/test/controllers/github_authentication_controller_test.rb +1 -0
  268. data/test/controllers/merge_requests_controller_test.rb +32 -0
  269. data/test/controllers/merge_status_controller_test.rb +7 -6
  270. data/test/controllers/release_statuses_controller_test.rb +3 -2
  271. data/test/controllers/repositories_controller_test.rb +71 -0
  272. data/test/controllers/rollbacks_controller_test.rb +9 -8
  273. data/test/controllers/stacks_controller_test.rb +41 -19
  274. data/test/controllers/status_controller_test.rb +1 -0
  275. data/test/controllers/tasks_controller_test.rb +32 -19
  276. data/test/controllers/webhooks_controller_test.rb +33 -17
  277. data/test/dummy/app/assets/config/manifest.js +3 -0
  278. data/test/dummy/config/application.rb +7 -2
  279. data/test/dummy/config/database.yml +9 -0
  280. data/test/dummy/config/environments/development.rb +3 -4
  281. data/test/dummy/config/environments/test.rb +2 -5
  282. data/test/dummy/config/secrets_double_github_app.yml +79 -0
  283. data/test/dummy/db/schema.rb +59 -17
  284. data/test/dummy/db/seeds.rb +2 -1
  285. data/test/fixtures/payloads/check_suite_master.json +4 -32
  286. data/test/fixtures/payloads/invalid_pull_request.json +117 -0
  287. data/test/fixtures/payloads/provision_disabled_pull_request.json +454 -0
  288. data/test/fixtures/payloads/pull_request_assigned.json +480 -0
  289. data/test/fixtures/payloads/pull_request_closed.json +454 -0
  290. data/test/fixtures/payloads/pull_request_labeled.json +461 -0
  291. data/test/fixtures/payloads/pull_request_opened.json +454 -0
  292. data/test/fixtures/payloads/pull_request_reopened.json +454 -0
  293. data/test/fixtures/payloads/pull_request_unlabeled.json +454 -0
  294. data/test/fixtures/payloads/pull_request_with_no_repo.json +454 -0
  295. data/test/fixtures/payloads/push_master.json +1 -1
  296. data/test/fixtures/payloads/push_not_master.json +1 -1
  297. data/test/fixtures/shipit/commits.yml +31 -3
  298. data/test/fixtures/shipit/hooks.yml +1 -0
  299. data/test/fixtures/shipit/merge_requests.yml +141 -0
  300. data/test/fixtures/shipit/pull_request_assignments.yml +3 -0
  301. data/test/fixtures/shipit/pull_requests.yml +10 -131
  302. data/test/fixtures/shipit/repositories.yml +5 -0
  303. data/test/fixtures/shipit/stacks.yml +235 -14
  304. data/test/fixtures/shipit/statuses.yml +9 -0
  305. data/test/fixtures/shipit/tasks.yml +4 -1
  306. data/test/fixtures/shipit/users.yml +7 -0
  307. data/test/fixtures/timeout +2 -1
  308. data/test/helpers/api_helper.rb +1 -0
  309. data/test/helpers/fixture_aliases_helper.rb +1 -0
  310. data/test/helpers/hooks_helper.rb +2 -1
  311. data/test/helpers/json_helper.rb +20 -12
  312. data/test/helpers/links_helper.rb +4 -3
  313. data/test/helpers/payloads_helper.rb +5 -0
  314. data/test/helpers/queries_helper.rb +3 -2
  315. data/test/jobs/cache_deploy_spec_job_test.rb +2 -1
  316. data/test/jobs/chunk_rollup_job_test.rb +16 -1
  317. data/test/jobs/deliver_hook_job_test.rb +1 -0
  318. data/test/jobs/destroy_repository_job_test.rb +27 -0
  319. data/test/jobs/destroy_stack_job_test.rb +1 -0
  320. data/test/jobs/emit_event_job_test.rb +2 -1
  321. data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
  322. data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
  323. data/test/jobs/github_sync_job_test.rb +3 -1
  324. data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
  325. data/test/jobs/perform_task_job_test.rb +12 -11
  326. data/test/jobs/{merge_pull_requests_job_test.rb → process_merge_requests_job_test.rb} +19 -18
  327. data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
  328. data/test/jobs/reap_dead_tasks_job_test.rb +68 -0
  329. data/test/jobs/refresh_github_user_job_test.rb +1 -0
  330. data/test/jobs/refresh_status_job_test.rb +1 -0
  331. data/test/jobs/unique_job_test.rb +1 -0
  332. data/test/jobs/update_github_last_deployed_ref_job_test.rb +1 -0
  333. data/test/lib/shipit/deploy_commands_test.rb +16 -0
  334. data/test/lib/shipit/task_commands_test.rb +17 -0
  335. data/test/middleware/same_site_cookie_middleware_test.rb +52 -0
  336. data/test/models/api_client_test.rb +1 -0
  337. data/test/models/commit_checks_test.rb +1 -0
  338. data/test/models/commit_deployment_status_test.rb +4 -3
  339. data/test/models/commit_deployment_test.rb +2 -1
  340. data/test/models/commits_test.rb +96 -19
  341. data/test/models/delivery_test.rb +2 -1
  342. data/test/models/deploy_spec_test.rb +110 -65
  343. data/test/models/deploy_stats_test.rb +1 -0
  344. data/test/models/deploys_test.rb +197 -36
  345. data/test/models/duration_test.rb +1 -0
  346. data/test/models/github_hook_test.rb +1 -0
  347. data/test/models/hook_test.rb +47 -10
  348. data/test/models/membership_test.rb +1 -0
  349. data/test/models/{pull_request_test.rb → merge_request_test.rb} +53 -37
  350. data/test/models/pull_request_assignment_test.rb +16 -0
  351. data/test/models/release_statuses_test.rb +1 -0
  352. data/test/models/rollbacks_test.rb +1 -0
  353. data/test/models/shipit/check_run_test.rb +125 -5
  354. data/test/models/shipit/provisioning_handler/base_test.rb +33 -0
  355. data/test/models/shipit/provisioning_handler/unregistered_provisioning_handler_test.rb +49 -0
  356. data/test/models/shipit/provisioning_handler_test.rb +64 -0
  357. data/test/models/shipit/pull_request_test.rb +52 -0
  358. data/test/models/shipit/repository_test.rb +6 -1
  359. data/test/models/shipit/review_stack_provision_status_test.rb +77 -0
  360. data/test/models/shipit/review_stack_provisioning_queue_test.rb +63 -0
  361. data/test/models/shipit/review_stack_test.rb +91 -0
  362. data/test/models/{stacks_test.rb → shipit/stacks_test.rb} +121 -16
  363. data/test/models/shipit/webhooks/handlers/pull_request/assigned_handler_test.rb +45 -0
  364. data/test/models/shipit/webhooks/handlers/pull_request/closed_handler_test.rb +192 -0
  365. data/test/models/shipit/webhooks/handlers/pull_request/edited_handler_test.rb +47 -0
  366. data/test/models/shipit/webhooks/handlers/pull_request/label_capturing_handler_test.rb +209 -0
  367. data/test/models/shipit/webhooks/handlers/pull_request/labeled_handler_test.rb +332 -0
  368. data/test/models/shipit/webhooks/handlers/pull_request/opened_handler_test.rb +238 -0
  369. data/test/models/shipit/webhooks/handlers/pull_request/reopened_handler_test.rb +282 -0
  370. data/test/models/shipit/webhooks/handlers/pull_request/review_stack_adapter_test.rb +107 -0
  371. data/test/models/shipit/webhooks/handlers/pull_request/unlabeled_handler_test.rb +324 -0
  372. data/test/models/shipit/{wehbooks → webhooks}/handlers_test.rb +1 -0
  373. data/test/models/status/group_test.rb +1 -0
  374. data/test/models/status/missing_test.rb +1 -0
  375. data/test/models/status_test.rb +1 -0
  376. data/test/models/task_definitions_test.rb +9 -8
  377. data/test/models/tasks_test.rb +81 -1
  378. data/test/models/team_test.rb +4 -2
  379. data/test/models/undeployed_commits_test.rb +1 -0
  380. data/test/models/users_test.rb +13 -5
  381. data/test/serializers/shipit/pull_request_serializer_test.rb +29 -0
  382. data/test/test_command_integration.rb +3 -2
  383. data/test/test_helper.rb +49 -31
  384. data/test/unit/anonymous_user_serializer_test.rb +14 -0
  385. data/test/unit/command_test.rb +16 -10
  386. data/test/unit/commands_test.rb +1 -0
  387. data/test/unit/commit_serializer_test.rb +16 -0
  388. data/test/unit/csv_serializer_test.rb +3 -2
  389. data/test/unit/deploy_commands_test.rb +75 -18
  390. data/test/unit/deploy_serializer_test.rb +17 -0
  391. data/test/unit/environment_variables_test.rb +5 -4
  392. data/test/unit/github_app_test.rb +3 -3
  393. data/test/unit/github_apps_test.rb +416 -0
  394. data/test/unit/github_url_helper_test.rb +6 -0
  395. data/test/unit/rollback_commands_test.rb +2 -1
  396. data/test/unit/shipit_deployment_checks_test.rb +77 -0
  397. data/test/unit/shipit_helper_test.rb +17 -0
  398. data/test/unit/shipit_task_execution_strategy_test.rb +47 -0
  399. data/test/unit/shipit_test.rb +15 -0
  400. data/test/unit/user_serializer_test.rb +14 -0
  401. data/test/unit/variable_definition_test.rb +1 -0
  402. metadata +320 -178
  403. data/app/controllers/shipit/api/pull_requests_controller.rb +0 -36
  404. data/app/controllers/shipit/pull_requests_controller.rb +0 -30
  405. data/app/jobs/shipit/merge_pull_requests_job.rb +0 -31
  406. data/app/jobs/shipit/refresh_pull_request_job.rb +0 -10
  407. data/app/views/shipit/pull_requests/_pull_request.html.erb +0 -29
  408. data/test/controllers/pull_requests_controller_test.rb +0 -31
  409. data/test/fixtures/shipit/output_chunks.yml +0 -47
  410. data/test/models/output_chunk_test.rb +0 -20
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ module Shipit
5
+ class MergeRequestsControllerTest < ActionController::TestCase
6
+ setup do
7
+ @stack = shipit_stacks(:shipit)
8
+ @pr = shipit_merge_requests(:shipit_pending)
9
+ session[:user_id] = shipit_users(:walrus).id
10
+ end
11
+
12
+ test "#index shows pending pull requests" do
13
+ get :index, params: { stack_id: @stack.to_param }
14
+ assert_response :success
15
+ assert_select '.pr-list .pr', @stack.merge_requests.pending.count
16
+ end
17
+
18
+ test "#add can enqueue a pull request" do
19
+ assert_difference -> { MergeRequest.count }, +1 do
20
+ post :create, params: { stack_id: @stack.to_param, number_or_url: '#5' }
21
+ end
22
+ assert_redirected_to stack_merge_requests_path(@stack)
23
+ end
24
+
25
+ test "#destroy can cancel a pending pull request" do
26
+ assert_predicate @pr, :pending?
27
+ delete :destroy, params: { stack_id: @stack.to_param, id: @pr.id }
28
+ assert_redirected_to stack_merge_requests_path(@stack)
29
+ assert_predicate @pr.reload, :canceled?
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
@@ -9,27 +10,27 @@ module Shipit
9
10
  end
10
11
 
11
12
  test "GET show" do
12
- get :show, params: {referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master'}
13
+ get :show, params: { referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master' }
13
14
  assert_response :ok
14
15
  assert_includes response.body, 'Ready to ship!'
15
16
  end
16
17
 
17
18
  test "GET show when there is no matching stacks" do
18
- get :show, params: {referrer: 'https://github.com/Shopify/unknown-repo/pull/42', branch: 'master'}
19
+ get :show, params: { referrer: 'https://github.com/Shopify/unknown-repo/pull/42', branch: 'master' }
19
20
  assert_response :ok
20
21
  assert_predicate response.body, :blank?
21
22
  end
22
23
 
23
24
  test "GET anonymous show returns a login message" do
24
25
  session.delete(:user_id)
25
- get :show, params: {referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master'}
26
+ get :show, params: { referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master' }
26
27
  assert_response :ok
27
28
  assert_includes response.body.downcase, 'please log in'
28
29
  end
29
30
 
30
31
  test "GET anonymous show when there is no matching stack is blank" do
31
32
  session.delete(:user_id)
32
- get :show, params: {referrer: 'https://github.com/Shopify/unknown-repo/pull/42', branch: 'master'}
33
+ get :show, params: { referrer: 'https://github.com/Shopify/unknown-repo/pull/42', branch: 'master' }
33
34
  assert_response :ok
34
35
  assert_predicate response.body, :blank?
35
36
  end
@@ -47,7 +48,7 @@ module Shipit
47
48
  merge_queue_enabled: true,
48
49
  )
49
50
 
50
- get :show, params: {referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master'}
51
+ get :show, params: { referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master' }
51
52
  assert_response :ok
52
53
  assert_includes response.body, 'shipit-engine/foo'
53
54
  end
@@ -66,7 +67,7 @@ module Shipit
66
67
  merge_queue_enabled: true,
67
68
  )
68
69
 
69
- get :show, params: {referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master'}
70
+ get :show, params: { referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master' }
70
71
  assert_response :ok
71
72
  assert_includes response.body, 'locked'
72
73
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
@@ -10,7 +11,7 @@ module Shipit
10
11
 
11
12
  test ":create allow users to append release statuses and mark the deploy as success" do
12
13
  assert_difference -> { ReleaseStatus.count }, +1 do
13
- post :create, params: {stack_id: @stack, deploy_id: @deploy.id, status: 'success'}
14
+ post :create, params: { stack_id: @stack, deploy_id: @deploy.id, status: 'success' }
14
15
  assert_response :created
15
16
  end
16
17
 
@@ -23,7 +24,7 @@ module Shipit
23
24
 
24
25
  test ":create allow users to append release statuses and mark the deploy as faulty" do
25
26
  assert_difference -> { ReleaseStatus.count }, +1 do
26
- post :create, params: {stack_id: @stack, deploy_id: @deploy.id, status: 'failure'}
27
+ post :create, params: { stack_id: @stack, deploy_id: @deploy.id, status: 'failure' }
27
28
  assert_response :created
28
29
  end
29
30
 
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ module Shipit
5
+ class RepositoriesControllerTest < ActionController::TestCase
6
+ setup do
7
+ @routes = Shipit::Engine.routes
8
+ @repository = shipit_repositories(:shipit)
9
+ session[:user_id] = shipit_users(:walrus).id
10
+ end
11
+
12
+ test "GitHub authentication is mandatory" do
13
+ session[:user_id] = nil
14
+ get :index
15
+ assert_redirected_to '/github/auth/github?origin=http%3A%2F%2Ftest.host%2Frepositories'
16
+ end
17
+
18
+ test "current_user must be a member of at least a Shipit.github_teams" do
19
+ session[:user_id] = shipit_users(:bob).id
20
+ Shipit.stubs(:github_teams).returns([shipit_teams(:cyclimse_cooks), shipit_teams(:shopify_developers)])
21
+ get :index
22
+ assert_response :forbidden
23
+ assert_equal(
24
+ 'You must be a member of cyclimse/cooks or shopify/developers to access this application.',
25
+ response.body,
26
+ )
27
+ end
28
+
29
+ test "#show is success" do
30
+ get :show, params: { id: @repository.to_param }
31
+ assert_response :ok
32
+ end
33
+
34
+ test "#create creates a repository and redirects to it" do
35
+ assert_difference "Repository.count" do
36
+ post :create, params: {
37
+ repository: {
38
+ name: 'valid',
39
+ owner: 'repository',
40
+ },
41
+ }
42
+ end
43
+ assert_redirected_to repository_path(Repository.last)
44
+ end
45
+
46
+ test "#create when not valid renders new" do
47
+ assert_no_difference "Repository.count" do
48
+ post :create, params: {
49
+ repository: {
50
+ owner: 'some',
51
+ name: 'owner/path',
52
+ },
53
+ }
54
+ end
55
+ assert_response :success
56
+ end
57
+
58
+ test "#destroy enqueues a DestroyRepositoryJob" do
59
+ assert_enqueued_with(job: DestroyRepositoryJob, args: [@repository]) do
60
+ delete :destroy, params: { id: @repository.to_param }
61
+ end
62
+
63
+ assert_redirected_to repositories_path
64
+ end
65
+
66
+ test "#settings is success" do
67
+ get :settings, params: { id: @repository.to_param }
68
+ assert_response :success
69
+ end
70
+ end
71
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
@@ -11,37 +12,37 @@ module Shipit
11
12
 
12
13
  test ":create persists a new rollback" do
13
14
  assert_difference '@stack.rollbacks.count', 1 do
14
- post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}}
15
+ post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id } }
15
16
  end
16
17
  end
17
18
 
18
19
  test ":create can receive an :env hash" do
19
- env = {'SAFETY_DISABLED' => '1'}
20
- post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id, env: env}}
20
+ env = { 'SAFETY_DISABLED' => '1' }
21
+ post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id, env: env } }
21
22
  new_rollback = Rollback.last
22
23
  assert_equal env, new_rollback.env
23
24
  end
24
25
 
25
26
  test ":create ignore :env keys not declared in the deploy spec" do
26
- post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id, env: {'H4X0R' => '1'}}}
27
+ post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id, env: { 'H4X0R' => '1' } } }
27
28
  new_rollback = Rollback.last
28
29
  assert_equal({}, new_rollback.env)
29
30
  end
30
31
 
31
32
  test ":create redirects to the new deploy" do
32
- post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}}
33
+ post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id } }
33
34
  assert_redirected_to stack_deploy_path(@stack, Rollback.last)
34
35
  end
35
36
 
36
37
  test ":create locks deploys" do
37
- post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}}
38
+ post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id } }
38
39
  assert @stack.reload.locked?
39
40
  end
40
41
 
41
42
  test ":create redirects back to the :new page if there is an active deploy" do
42
43
  shipit_deploys(:shipit_running).update!(allow_concurrency: false, status: 'running')
43
44
  assert_no_difference '@stack.deploys.count' do
44
- post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}}
45
+ post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id } }
45
46
  end
46
47
  assert_redirected_to rollback_stack_deploy_path(@stack, @deploy)
47
48
  end
@@ -49,7 +50,7 @@ module Shipit
49
50
  test ":create with `force` option ignore the active deploys" do
50
51
  shipit_deploys(:shipit_running).update_column(:status, 'running')
51
52
  assert_difference '@stack.deploys.count', 1 do
52
- post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}, force: 'true'}
53
+ post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id }, force: 'true' }
53
54
  end
54
55
  assert_redirected_to stack_deploy_path(@stack, Rollback.last)
55
56
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
@@ -46,13 +47,32 @@ module Shipit
46
47
  )
47
48
  end
48
49
 
50
+ test "#index list all stacks" do
51
+ get :index, params: { show_archived: true }
52
+ assert_response :ok
53
+ assert_select ".stack", count: Stack.count
54
+ end
55
+
56
+ test "#index list all not archived stacks" do
57
+ get :index
58
+ assert_response :ok
59
+ assert_select ".stack", count: Stack.not_archived.count
60
+ end
61
+
62
+ test "#index list a repo stacks if the :repo params is passed" do
63
+ repo = shipit_repositories(:shipit)
64
+ get :index, params: { repo: repo.full_name }
65
+ assert_response :ok
66
+ assert_select ".stack", count: repo.stacks.count
67
+ end
68
+
49
69
  test "#show is success" do
50
- get :show, params: {id: @stack.to_param}
70
+ get :show, params: { id: @stack.to_param }
51
71
  assert_response :ok
52
72
  end
53
73
 
54
74
  test "#show with faulty and validating deploys is success" do
55
- get :show, params: {id: shipit_stacks(:shipit_canaries).to_param}
75
+ get :show, params: { id: shipit_stacks(:shipit_canaries).to_param }
56
76
  assert_response :ok
57
77
  end
58
78
 
@@ -60,18 +80,18 @@ module Shipit
60
80
  @stack = shipit_stacks(:check_runs)
61
81
  assert_not_equal 0, CheckRun.where(stack_id: @stack.id).count
62
82
 
63
- get :show, params: {id: @stack.to_param}
83
+ get :show, params: { id: @stack.to_param }
64
84
  assert_response :ok
65
85
  end
66
86
 
67
87
  test "#show handles locked stacks without a lock_author" do
68
88
  @stack.update!(lock_reason: "I am a lock with no author")
69
- get :show, params: {id: @stack.to_param}
89
+ get :show, params: { id: @stack.to_param }
70
90
  end
71
91
 
72
92
  test "#show auto-links URLs in lock reason" do
73
93
  @stack.update!(lock_reason: 'http://google.com')
74
- get :show, params: {id: @stack.to_param}
94
+ get :show, params: { id: @stack.to_param }
75
95
  assert_response :ok
76
96
  assert_select 'a[href="http://google.com"]'
77
97
  end
@@ -93,38 +113,38 @@ module Shipit
93
113
 
94
114
  test "#create when not valid renders new" do
95
115
  assert_no_difference "Stack.count" do
96
- post :create, params: {stack: {repo_owner: 'some', repo_name: 'owner/path'}}
116
+ post :create, params: { stack: { repo_owner: 'some', repo_name: 'owner/path' } }
97
117
  end
98
118
  assert_response :success
99
119
  end
100
120
 
101
121
  test "#destroy enqueues a DestroyStackJob" do
102
122
  assert_enqueued_with(job: DestroyStackJob, args: [@stack]) do
103
- delete :destroy, params: {id: @stack.to_param}
123
+ delete :destroy, params: { id: @stack.to_param }
104
124
  end
105
125
  assert_redirected_to stacks_path
106
126
  end
107
127
 
108
128
  test "#settings is success" do
109
- get :settings, params: {id: @stack.to_param}
129
+ get :settings, params: { id: @stack.to_param }
110
130
  assert_response :success
111
131
  end
112
132
 
113
133
  test "#statistics is success" do
114
- get :statistics, params: {id: @stack.to_param}
134
+ get :statistics, params: { id: @stack.to_param }
115
135
  assert_response :success
116
136
  end
117
137
 
118
138
  test "#statistics redirects to #show if no deploys are present" do
119
139
  @stack.deploys.destroy_all
120
- get :statistics, params: {id: @stack.to_param}
140
+ get :statistics, params: { id: @stack.to_param }
121
141
  assert_redirected_to stack_path(@stack)
122
142
  end
123
143
 
124
144
  test "#update allows to lock the stack" do
125
145
  refute @stack.locked?
126
146
 
127
- patch :update, params: {id: @stack.to_param, stack: {lock_reason: 'Went out to eat some chips!'}}
147
+ patch :update, params: { id: @stack.to_param, stack: { lock_reason: 'Went out to eat some chips!' } }
128
148
  @stack.reload
129
149
  assert @stack.locked?
130
150
  assert_equal shipit_users(:walrus), @stack.lock_author
@@ -134,7 +154,7 @@ module Shipit
134
154
  @stack.update!(lock_reason: 'Went out to eat some chips!')
135
155
  assert @stack.locked?
136
156
 
137
- patch :update, params: {id: @stack.to_param, stack: {lock_reason: ''}}
157
+ patch :update, params: { id: @stack.to_param, stack: { lock_reason: '' } }
138
158
  @stack.reload
139
159
  refute @stack.locked?
140
160
  assert_instance_of AnonymousUser, @stack.lock_author
@@ -144,7 +164,7 @@ module Shipit
144
164
  refute @stack.archived?
145
165
  refute @stack.locked?
146
166
 
147
- patch :update, params: {id: @stack.to_param, stack: {archived: "true"}}
167
+ patch :update, params: { id: @stack.to_param, stack: { archived: "true" } }
148
168
  @stack.reload
149
169
  assert @stack.archived?
150
170
  assert @stack.locked?
@@ -157,10 +177,12 @@ module Shipit
157
177
  assert @stack.locked?
158
178
  assert @stack.archived?
159
179
 
160
- patch :update, params: {id: @stack.to_param, stack: {archived: "false"}}
180
+ patch :update, params: { id: @stack.to_param, stack: { archived: "false" } }
161
181
  @stack.reload
162
182
  refute @stack.archived?
163
183
  refute @stack.locked?
184
+ assert_nil @stack.locked_since
185
+ assert_nil @stack.lock_reason
164
186
  assert_instance_of AnonymousUser, @stack.lock_author
165
187
  end
166
188
 
@@ -170,7 +192,7 @@ module Shipit
170
192
  assert_enqueued_with(job: RefreshStatusesJob, args: [stack_id: @stack.id]) do
171
193
  assert_enqueued_with(job: RefreshCheckRunsJob, args: [stack_id: @stack.id]) do
172
194
  assert_enqueued_with(job: GithubSyncJob, args: [stack_id: @stack.id]) do
173
- post :refresh, params: {id: @stack.to_param}
195
+ post :refresh, params: { id: @stack.to_param }
174
196
  end
175
197
  end
176
198
  end
@@ -180,23 +202,23 @@ module Shipit
180
202
 
181
203
  test "#clear_git_cache queues a ClearGitCacheJob" do
182
204
  assert_enqueued_with(job: ClearGitCacheJob, args: [@stack]) do
183
- post :clear_git_cache, params: {id: @stack.to_param}
205
+ post :clear_git_cache, params: { id: @stack.to_param }
184
206
  end
185
207
  assert_redirected_to stack_settings_path(@stack)
186
208
  end
187
209
 
188
210
  test "#clear_git_cache displays a flash message" do
189
- post :clear_git_cache, params: {id: @stack.to_param}
211
+ post :clear_git_cache, params: { id: @stack.to_param }
190
212
  assert_equal 'Git Cache clearing scheduled', flash[:success]
191
213
  end
192
214
 
193
215
  test "#update redirects to return_to parameter" do
194
- patch :update, params: {id: @stack.to_param, stack: {ignore_ci: false}, return_to: stack_path(@stack)}
216
+ patch :update, params: { id: @stack.to_param, stack: { ignore_ci: false }, return_to: stack_path(@stack) }
195
217
  assert_redirected_to stack_path(@stack)
196
218
  end
197
219
 
198
220
  test "#lookup redirects to the canonical URL" do
199
- get :lookup, params: {id: @stack.id}
221
+ get :lookup, params: { id: @stack.id }
200
222
  assert_redirected_to stack_path(@stack)
201
223
  end
202
224
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
@@ -11,7 +12,7 @@ module Shipit
11
12
  end
12
13
 
13
14
  test "tasks defined in the shipit.yml can be displayed" do
14
- get :new, params: {stack_id: @stack, definition_id: @definition.id}
15
+ get :new, params: { stack_id: @stack, definition_id: @definition.id }
15
16
  assert_response :ok
16
17
  end
17
18
 
@@ -20,7 +21,7 @@ module Shipit
20
21
 
21
22
  assert_predicate @stack, :active_task?
22
23
  assert_no_difference -> { @stack.tasks.count } do
23
- post :create, params: {stack_id: @stack, definition_id: @definition.id}
24
+ post :create, params: { stack_id: @stack, definition_id: @definition.id }
24
25
  end
25
26
  assert_redirected_to new_stack_tasks_path(@stack, @definition)
26
27
  end
@@ -30,7 +31,7 @@ module Shipit
30
31
 
31
32
  assert_predicate @stack, :active_task?
32
33
  assert_difference -> { @stack.tasks.count } do
33
- post :create, params: {stack_id: @stack, definition_id: @definition.id, force: 'true'}
34
+ post :create, params: { stack_id: @stack, definition_id: @definition.id, force: 'true' }
34
35
  end
35
36
  assert_redirected_to stack_task_path(@stack, Task.last)
36
37
  end
@@ -38,26 +39,26 @@ module Shipit
38
39
  test "tasks defined in the shipit.yml can be triggered while the stack is being deployed if specified as such" do
39
40
  @definition = @stack.find_task_definition('flush_cache')
40
41
  assert_difference -> { @stack.tasks.count } do
41
- post :create, params: {stack_id: @stack, definition_id: @definition.id}
42
+ post :create, params: { stack_id: @stack, definition_id: @definition.id }
42
43
  end
43
44
  assert_redirected_to stack_task_path(@stack, Task.last)
44
45
  end
45
46
 
46
47
  test "tasks with variables defined in the shipit.yml can be triggered with their variables set" do
47
- env = {"FOO" => "0"}
48
+ env = { "FOO" => "0" }
48
49
 
49
- post :create, params: {stack_id: @stack, definition_id: @definition.id, task: {env: env}, force: 'true'}
50
+ post :create, params: { stack_id: @stack, definition_id: @definition.id, task: { env: env }, force: 'true' }
50
51
 
51
52
  assert_redirected_to stack_tasks_path(@stack, Task.last)
52
53
  end
53
54
 
54
55
  test "triggered tasks can be observed" do
55
- get :show, params: {stack_id: @stack, id: @task.id}
56
+ get :show, params: { stack_id: @stack, id: @task.id }
56
57
  assert_response :ok
57
58
  end
58
59
 
59
60
  test "triggered tasks can be observed as raw text" do
60
- get :show, params: {stack_id: @stack, id: @task.id}, format: 'txt'
61
+ get :show, params: { stack_id: @stack, id: @task.id }, format: 'txt'
61
62
  assert_response :success
62
63
  assert_equal("text/plain", @response.media_type)
63
64
  end
@@ -65,7 +66,7 @@ module Shipit
65
66
  test ":abort call abort! on the deploy" do
66
67
  @task = shipit_deploys(:shipit_running)
67
68
  @task.ping
68
- post :abort, params: {stack_id: @stack.to_param, id: @task.id}
69
+ post :abort, params: { stack_id: @stack.to_param, id: @task.id }
69
70
 
70
71
  @task.reload
71
72
  assert_response :success
@@ -77,7 +78,7 @@ module Shipit
77
78
  test ":abort schedule the rollback if `rollback` is present" do
78
79
  @task = shipit_deploys(:shipit_running)
79
80
  @task.ping
80
- post :abort, params: {stack_id: @stack.to_param, id: @task.id, rollback: 'true'}
81
+ post :abort, params: { stack_id: @stack.to_param, id: @task.id, rollback: 'true' }
81
82
 
82
83
  @task.reload
83
84
  assert_response :success
@@ -87,31 +88,43 @@ module Shipit
87
88
  end
88
89
 
89
90
  test ":index list the stack deploys" do
90
- get :index, params: {stack_id: @stack.to_param}
91
+ get :index, params: { stack_id: @stack.to_param }
91
92
  assert_response :success
92
93
  assert_select '.task-list .task', @stack.tasks.count
93
94
  end
94
95
 
95
96
  test ":index paginates with the `since` parameter" do
96
- get :index, params: {stack_id: @stack.to_param, since: @stack.tasks.last.id}
97
+ get :index, params: { stack_id: @stack.to_param, since: @stack.tasks.last.id }
97
98
  assert_response :success
98
99
  assert_select '.task-list .task', @stack.tasks.count - 1
99
100
  end
100
101
 
101
102
  test ":tail returns the task status, output, and next url" do
102
103
  @task = shipit_deploys(:shipit_running)
103
- last_chunk = @task.chunks.last
104
+ @task.write("dummy output")
105
+ last_chunk = @task.chunk_output.bytesize
104
106
 
105
- get :tail, params: {stack_id: @stack.to_param, id: @task.id, last_id: last_chunk.id}, format: :json
107
+ get :tail, params: { stack_id: @stack.to_param, id: @task.id }, format: :json
106
108
  assert_response :success
107
109
  assert_json_keys %w(url status output)
108
110
  assert_json 'status', @task.status
111
+ assert_json 'output', @task.chunk_output
112
+ assert_json 'url', "/shopify/shipit-engine/production/tasks/#{@task.id}/tail?last_byte=#{last_chunk}"
113
+ end
114
+
115
+ test ":tail can handle last_byte as string" do
116
+ @task = shipit_deploys(:shipit_running)
117
+ @task.write("dummy output")
118
+
119
+ get :tail, params: { stack_id: @stack.to_param, id: @task.id, last_byte: "50" }, format: :json
120
+ assert_response :success
121
+ assert_json_keys %w(url status output)
109
122
  end
110
123
 
111
124
  test ":tail doesn't returns the next url if the task is finished" do
112
125
  @task = shipit_deploys(:shipit)
113
126
 
114
- get :tail, params: {stack_id: @stack.to_param, id: @task.id}, format: :json
127
+ get :tail, params: { stack_id: @stack.to_param, id: @task.id }, format: :json
115
128
  assert_response :success
116
129
  assert_no_json 'url'
117
130
  end
@@ -119,7 +132,7 @@ module Shipit
119
132
  test ":tail returns the rollback url if the task have been aborted" do
120
133
  @task = shipit_deploys(:shipit_aborted)
121
134
 
122
- get :tail, params: {stack_id: @stack.to_param, id: @task.id}, format: :json
135
+ get :tail, params: { stack_id: @stack.to_param, id: @task.id }, format: :json
123
136
  assert_response :success
124
137
  assert_json_keys %w(status output rollback_url)
125
138
  end
@@ -127,7 +140,7 @@ module Shipit
127
140
  test ":lookup returns stack task url if the task is an instance of Task" do
128
141
  @task = shipit_tasks(:shipit_restart)
129
142
 
130
- get :lookup, params: {id: @task.id}
143
+ get :lookup, params: { id: @task.id }
131
144
 
132
145
  assert_redirected_to stack_task_path(@task.stack, @task)
133
146
  end
@@ -135,7 +148,7 @@ module Shipit
135
148
  test ":lookup returns stack deploy url if the task is an instance of Deploy" do
136
149
  @task = shipit_tasks(:shipit)
137
150
 
138
- get :lookup, params: {id: @task.id}
151
+ get :lookup, params: { id: @task.id }
139
152
 
140
153
  assert_redirected_to stack_deploy_path(@task.stack, @task)
141
154
  end
@@ -143,7 +156,7 @@ module Shipit
143
156
  test ":lookup returns stack deploy url if the task is an instance of Rollback" do
144
157
  @task = shipit_tasks(:shipit_rollback)
145
158
 
146
- get :lookup, params: {id: @task.id}
159
+ get :lookup, params: { id: @task.id }
147
160
 
148
161
  assert_redirected_to stack_deploy_path(@task.stack, @task)
149
162
  end