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
@@ -13,7 +14,7 @@ module Shipit
13
14
  @client.save!
14
15
 
15
16
  assert_no_difference 'Stack.count' do
16
- post :create, params: {repo_name: 'rails', repo_owner: 'rails', environment: 'staging', branch: 'staging'}
17
+ post :create, params: { repo_name: 'rails', repo_owner: 'rails', environment: 'staging', branch: 'staging' }
17
18
  end
18
19
 
19
20
  assert_response :forbidden
@@ -22,7 +23,7 @@ module Shipit
22
23
 
23
24
  test "#create fails with invalid stack" do
24
25
  assert_no_difference "Stack.count" do
25
- post :create, params: {repo_owner: 'some', repo_name: 'owner/path'}
26
+ post :create, params: { repo_owner: 'some', repo_name: 'owner/path', branch: 'main' }
26
27
  end
27
28
  assert_response :unprocessable_entity
28
29
  assert_json 'errors', 'repository' => ['is invalid']
@@ -30,7 +31,7 @@ module Shipit
30
31
 
31
32
  test "#create creates a stack and renders it back" do
32
33
  assert_difference -> { Stack.count } do
33
- post :create, params: {repo_name: 'rails', repo_owner: 'rails', environment: 'staging', branch: 'staging'}
34
+ post :create, params: { repo_name: 'rails', repo_owner: 'rails', environment: 'staging', branch: 'staging' }
34
35
  end
35
36
 
36
37
  assert_response :ok
@@ -47,12 +48,12 @@ module Shipit
47
48
 
48
49
  assert_no_difference -> { Stack.count } do
49
50
  post :create,
50
- params: {
51
- repo_name: existing_stack.repo_name,
52
- repo_owner: existing_stack.repo_owner,
53
- environment: existing_stack.environment,
54
- branch: existing_stack.branch,
55
- }
51
+ params: {
52
+ repo_name: existing_stack.repo_name,
53
+ repo_owner: existing_stack.repo_owner,
54
+ environment: existing_stack.environment,
55
+ branch: existing_stack.branch,
56
+ }
56
57
  end
57
58
 
58
59
  assert_response :unprocessable_entity
@@ -61,9 +62,42 @@ module Shipit
61
62
  ]
62
63
  end
63
64
 
65
+ test "#update updates a stack and renders it back" do
66
+ assert_equal true, @stack.merge_queue_enabled
67
+ assert_equal false, @stack.ignore_ci
68
+ assert_equal false, @stack.continuous_deployment
69
+
70
+ patch :update, params: {
71
+ id: @stack.to_param,
72
+ merge_queue_enabled: false,
73
+ ignore_ci: true,
74
+ continuous_deployment: true,
75
+ }
76
+
77
+ assert_response :ok
78
+ @stack.reload
79
+
80
+ assert_equal false, @stack.merge_queue_enabled
81
+ assert_equal true, @stack.ignore_ci
82
+ assert_equal true, @stack.continuous_deployment
83
+ end
84
+
85
+ test "#update allows changing the branch name" do
86
+ assert_equal 'master', @stack.branch
87
+
88
+ patch :update, params: {
89
+ id: @stack.to_param,
90
+ branch: 'test',
91
+ }
92
+
93
+ assert_response :ok
94
+ @stack.reload
95
+
96
+ assert_equal 'test', @stack.branch
97
+ end
98
+
64
99
  test "#index returns a list of stacks" do
65
100
  stack = Stack.last
66
-
67
101
  get :index
68
102
  assert_response :ok
69
103
  assert_json '0.id', stack.id
@@ -72,8 +106,29 @@ module Shipit
72
106
  end
73
107
  end
74
108
 
109
+ test "#index returns a list of stacks filtered by repo if name and owner given" do
110
+ repo = shipit_repositories(:shipit)
111
+ get :index, params: { repo_owner: repo.owner, repo_name: repo.name }
112
+ assert_response :ok
113
+ assert_json do |stacks|
114
+ assert_equal stacks.size, repo.stacks.size
115
+ end
116
+ end
117
+
118
+ test "#index returns a list of stacks filtered by repo and api client" do
119
+ authenticate!(:here_come_the_walrus)
120
+
121
+ repo = shipit_repositories(:soc)
122
+
123
+ get :index, params: { repo_owner: repo.owner, repo_name: repo.name }
124
+ assert_response :ok
125
+ assert_json do |stacks|
126
+ assert_equal 0, stacks.size
127
+ end
128
+ end
129
+
75
130
  test "#index is paginable" do
76
- get :index, params: {page_size: 1}
131
+ get :index, params: { page_size: 1 }
77
132
  assert_json do |list|
78
133
  assert_instance_of Array, list
79
134
  assert_equal 1, list.size
@@ -85,7 +140,7 @@ module Shipit
85
140
  end
86
141
 
87
142
  test "the `next` link is not provided when the last page is reached" do
88
- get :index, params: {page_size: Stack.count}
143
+ get :index, params: { page_size: Stack.count }
89
144
  assert_no_link 'next'
90
145
  end
91
146
 
@@ -105,20 +160,20 @@ module Shipit
105
160
  end
106
161
 
107
162
  test "#show renders the stack" do
108
- get :show, params: {id: @stack.to_param}
163
+ get :show, params: { id: @stack.to_param }
109
164
  assert_response :ok
110
165
  assert_json 'id', @stack.id
111
166
  end
112
167
 
113
168
  test "#show returns last_deployed_at column for stack" do
114
- get :show, params: {id: @stack.to_param}
169
+ get :show, params: { id: @stack.to_param }
115
170
  assert_response :ok
116
171
  assert_json 'last_deployed_at', @stack.last_deployed_at
117
172
  end
118
173
 
119
174
  test "#destroy schedules stack deletion job" do
120
175
  assert_enqueued_with(job: DestroyStackJob) do
121
- delete :destroy, params: {id: @stack.to_param}
176
+ delete :destroy, params: { id: @stack.to_param }
122
177
  end
123
178
  assert_response :accepted
124
179
  end
@@ -128,7 +183,7 @@ module Shipit
128
183
  @client.save!
129
184
 
130
185
  assert_no_difference 'Stack.count' do
131
- delete :destroy, params: {id: @stack.to_param}
186
+ delete :destroy, params: { id: @stack.to_param }
132
187
  end
133
188
 
134
189
  assert_response :forbidden
@@ -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
  test "#index returns a list of tasks" do
12
13
  task = @stack.tasks.last
13
14
 
14
- get :index, params: {stack_id: @stack.to_param}
15
+ get :index, params: { stack_id: @stack.to_param }
15
16
  assert_response :ok
16
17
  assert_json '0.id', task.id
17
18
  end
@@ -19,18 +20,18 @@ module Shipit
19
20
  test "#show returns a task" do
20
21
  task = @stack.tasks.last
21
22
 
22
- get :show, params: {stack_id: @stack.to_param, id: task.id}
23
+ get :show, params: { stack_id: @stack.to_param, id: task.id }
23
24
  assert_response :ok
24
25
  assert_json 'id', task.id
25
26
  end
26
27
 
27
28
  test "#trigger returns 404 with unknown task" do
28
- post :trigger, params: {stack_id: @stack.to_param, task_name: 'shave_the_yak'}
29
+ post :trigger, params: { stack_id: @stack.to_param, task_name: 'shave_the_yak' }
29
30
  assert_response :not_found
30
31
  end
31
32
 
32
33
  test "#trigger triggers a custom task" do
33
- post :trigger, params: {stack_id: @stack.to_param, task_name: 'restart'}
34
+ post :trigger, params: { stack_id: @stack.to_param, task_name: 'restart' }
34
35
  assert_response :accepted
35
36
  assert_json 'type', 'task'
36
37
  assert_json 'status', 'pending'
@@ -43,15 +44,15 @@ module Shipit
43
44
  end
44
45
 
45
46
  test "#trigger refuses to trigger a task with tasks not whitelisted" do
46
- env = {'DANGEROUS_VARIABLE' => 'bar'}
47
- post :trigger, params: {stack_id: @stack.to_param, task_name: 'restart', env: env}
47
+ env = { 'DANGEROUS_VARIABLE' => 'bar' }
48
+ post :trigger, params: { stack_id: @stack.to_param, task_name: 'restart', env: env }
48
49
  assert_response :unprocessable_entity
49
50
  assert_json 'message', 'Variables DANGEROUS_VARIABLE have not been whitelisted'
50
51
  end
51
52
 
52
53
  test "#trigger triggers a task with only whitelisted env variables" do
53
- env = {'FOO' => 'bar'}
54
- post :trigger, params: {stack_id: @stack.to_param, task_name: 'restart', env: env}
54
+ env = { 'FOO' => 'bar' }
55
+ post :trigger, params: { stack_id: @stack.to_param, task_name: 'restart', env: env }
55
56
  assert_response :accepted
56
57
  assert_json 'type', 'task'
57
58
  assert_json 'status', 'pending'
@@ -64,8 +65,8 @@ module Shipit
64
65
  end
65
66
 
66
67
  test "#trigger triggers a task with explicitly passed and default variables" do
67
- env = {'WALRUS' => 'overridden value'}
68
- post :trigger, params: {stack_id: @stack.to_param, task_name: 'restart', env: env}
68
+ env = { 'WALRUS' => 'overridden value' }
69
+ post :trigger, params: { stack_id: @stack.to_param, task_name: 'restart', env: env }
69
70
  assert_response :accepted
70
71
 
71
72
  # FOO and BAR are variables with a default value
@@ -78,14 +79,14 @@ module Shipit
78
79
  end
79
80
 
80
81
  test "#trigger returns a 404 when the task doesn't exist" do
81
- post :trigger, params: {stack_id: @stack.to_param, task_name: 'doesnt_exist'}
82
+ post :trigger, params: { stack_id: @stack.to_param, task_name: 'doesnt_exist' }
82
83
  assert_response :not_found
83
84
  end
84
85
 
85
86
  test "#trigger returns 409 when a task is already running" do
86
87
  shipit_deploys(:shipit_running).update!(allow_concurrency: false, status: 'running')
87
88
  assert_predicate @stack, :active_task?
88
- post :trigger, params: {stack_id: @stack.to_param, task_name: 'restart'}
89
+ post :trigger, params: { stack_id: @stack.to_param, task_name: 'restart' }
89
90
  assert_response :conflict
90
91
  assert_json 'message', 'A task is already running.'
91
92
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require 'test_helper'
3
4
 
@@ -42,8 +43,8 @@ module Shipit
42
43
  api_client: {
43
44
  name: 'walrus_app',
44
45
  permissions: [
45
- 'read:stack',
46
- 'lock:stack',
46
+ 'read:stack',
47
+ 'lock:stack',
47
48
  ],
48
49
  },
49
50
  }
@@ -68,7 +69,7 @@ module Shipit
68
69
 
69
70
  test "#create when not valid renders new" do
70
71
  assert_no_difference "Stack.count" do
71
- post :create, params: {api_client: {name: 'walrus_app', permissions: ['invalid']}}
72
+ post :create, params: { api_client: { name: 'walrus_app', permissions: ['invalid'] } }
72
73
  end
73
74
 
74
75
  assert flash[:warning]
@@ -76,7 +77,7 @@ module Shipit
76
77
  end
77
78
 
78
79
  test "#show is success" do
79
- get :show, params: {id: @api_client.id}
80
+ get :show, params: { id: @api_client.id }
80
81
  assert_response :ok
81
82
  end
82
83
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'uri'
2
3
  require 'test_helper'
3
4
 
@@ -10,7 +11,7 @@ module Shipit
10
11
  end
11
12
 
12
13
  test ":fetch returns ok with json" do
13
- get :fetch, params: {stack_id: @stack.to_param}
14
+ get :fetch, params: { stack_id: @stack.to_param }
14
15
  assert_response :ok
15
16
  data = JSON.parse(response.body)
16
17
  assert_includes data, 'ccmenu_url'
@@ -18,12 +19,12 @@ module Shipit
18
19
 
19
20
  test ":fetch creates a read only api client" do
20
21
  assert_difference 'ApiClient.count' do
21
- get :fetch, params: {stack_id: @stack.to_param}
22
+ get :fetch, params: { stack_id: @stack.to_param }
22
23
  end
23
24
  end
24
25
 
25
26
  test ":fetch url includes api token on query string" do
26
- get :fetch, params: {stack_id: @stack.to_param}
27
+ get :fetch, params: { stack_id: @stack.to_param }
27
28
  data = JSON.parse(response.body)
28
29
  client = ApiClient.last
29
30
  query = Rack::Utils.parse_nested_query(URI(data['ccmenu_url']).query)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
@@ -12,7 +13,7 @@ module Shipit
12
13
  end
13
14
 
14
15
  test ":tail is success" do
15
- get :tail, params: {stack_id: @stack.to_param, sha: @commit.sha}
16
+ get :tail, params: { stack_id: @stack.to_param, sha: @commit.sha }
16
17
  assert_response :success
17
18
  assert_json 'output', 'foobar'
18
19
  assert_json 'url', stack_tail_commit_checks_path(@stack, sha: @commit.sha, since: 6)
@@ -21,14 +22,14 @@ module Shipit
21
22
 
22
23
  test ":tail doesn't provide another url if the task is finished" do
23
24
  @checks.status = 'success'
24
- get :tail, params: {stack_id: @stack.to_param, sha: @commit.sha}
25
+ get :tail, params: { stack_id: @stack.to_param, sha: @commit.sha }
25
26
  assert_response :success
26
27
  assert_json 'url', nil
27
28
  end
28
29
 
29
30
  test ":tail returns only the output after the provided offset" do
30
31
  @checks.status = 'success'
31
- get :tail, params: {stack_id: @stack.to_param, sha: @commit.sha, since: 5}
32
+ get :tail, params: { stack_id: @stack.to_param, sha: @commit.sha, since: 5 }
32
33
  assert_response :success
33
34
  assert_json 'output', 'r'
34
35
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
@@ -15,7 +16,7 @@ module Shipit
15
16
  patch(:update, params: {
16
17
  stack_id: @stack.to_param,
17
18
  id: @commit.id,
18
- commit: {locked: true},
19
+ commit: { locked: true },
19
20
  })
20
21
 
21
22
  assert_response(:ok)
@@ -30,7 +31,7 @@ module Shipit
30
31
  patch(:update, params: {
31
32
  stack_id: @stack.to_param,
32
33
  id: @commit.id,
33
- commit: {locked: false},
34
+ commit: { locked: false },
34
35
  })
35
36
 
36
37
  assert_response(:ok)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
@@ -12,30 +13,30 @@ module Shipit
12
13
  end
13
14
 
14
15
  test ":show is success" do
15
- get :show, params: {stack_id: @stack.to_param, id: @stack.deploys.last.id}
16
+ get :show, params: { stack_id: @stack.to_param, id: @stack.deploys.last.id }
16
17
  assert_response :success
17
18
  end
18
19
 
19
20
  test "deploys can be observed as raw text" do
20
- get :show, params: {stack_id: @stack, id: @deploy.id, format: 'txt'}
21
+ get :show, params: { stack_id: @stack, id: @deploy.id, format: 'txt' }
21
22
  assert_response :success
22
23
  assert_equal("text/plain", @response.media_type)
23
24
  end
24
25
 
25
26
  test ":new is success" do
26
- get :new, params: {stack_id: @stack.to_param, sha: @commit.sha}
27
+ get :new, params: { stack_id: @stack.to_param, sha: @commit.sha }
27
28
  assert_response :success
28
29
  end
29
30
 
30
31
  test ":new works for not yet deployed stacks" do
31
32
  @stack = shipit_stacks(:undeployed_stack)
32
- get :new, params: {stack_id: @stack.to_param, sha: @stack.commits.last.sha}
33
+ get :new, params: { stack_id: @stack.to_param, sha: @stack.commits.last.sha }
33
34
  end
34
35
 
35
36
  test ":new shows a warning if a deploy is already running" do
36
37
  shipit_deploys(:shipit_running).update!(allow_concurrency: false, status: 'running')
37
38
 
38
- get :new, params: {stack_id: @stack.to_param, sha: @commit.sha}
39
+ get :new, params: { stack_id: @stack.to_param, sha: @commit.sha }
39
40
  assert_response :success
40
41
  assert_select '.warning.concurrent-deploy h2' do |elements|
41
42
  assert_equal 'Lando Walrussian is already deploying!', elements.first.text
@@ -43,21 +44,31 @@ module Shipit
43
44
  assert_select '#new_deploy #force', 1
44
45
  end
45
46
 
47
+ test ":new selects default value" do
48
+ @stack = shipit_stacks(:shipit_undeployed)
49
+ get :new, params: { stack_id: @stack.to_param, sha: @stack.commits.last.sha }
50
+ assert_response :success
51
+
52
+ assert_select '.variables-fields option[selected=selected]' do |elements|
53
+ assert_equal 'us-central', elements.first.text
54
+ end
55
+ end
56
+
46
57
  test ":create persists a new deploy" do
47
58
  assert_difference '@stack.deploys.count', 1 do
48
- post :create, params: {stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id}}
59
+ post :create, params: { stack_id: @stack.to_param, deploy: { until_commit_id: @commit.id } }
49
60
  end
50
61
  end
51
62
 
52
63
  test ":create can receive an :env hash" do
53
- env = {'SAFETY_DISABLED' => '1'}
54
- post :create, params: {stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id, env: env}}
64
+ env = { 'SAFETY_DISABLED' => '1' }
65
+ post :create, params: { stack_id: @stack.to_param, deploy: { until_commit_id: @commit.id, env: env } }
55
66
  new_deploy = Deploy.last
56
67
  assert_equal env, new_deploy.env
57
68
  end
58
69
 
59
70
  test ":create ignore :env keys not declared in the deploy spec" do
60
- post :create, params: {stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id, env: {'H4X0R' => '1'}}}
71
+ post :create, params: { stack_id: @stack.to_param, deploy: { until_commit_id: @commit.id, env: { 'H4X0R' => '1' } } }
61
72
  new_deploy = Deploy.last
62
73
  assert_equal({}, new_deploy.env)
63
74
  end
@@ -66,7 +77,7 @@ module Shipit
66
77
  shipit_deploys(:shipit_running).update_column(:status, 'running')
67
78
 
68
79
  assert_difference '@stack.deploys.count', 1 do
69
- post :create, params: {stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id}, force: 'true'}
80
+ post :create, params: { stack_id: @stack.to_param, deploy: { until_commit_id: @commit.id }, force: 'true' }
70
81
  end
71
82
  end
72
83
 
@@ -74,26 +85,26 @@ module Shipit
74
85
  shipit_deploys(:shipit_running).update!(allow_concurrency: false, status: 'running')
75
86
 
76
87
  assert_no_difference '@stack.deploys.count' do
77
- post :create, params: {stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id}}
88
+ post :create, params: { stack_id: @stack.to_param, deploy: { until_commit_id: @commit.id } }
78
89
  end
79
90
  assert_redirected_to new_stack_deploy_path(@stack, sha: @commit.sha)
80
91
  end
81
92
 
82
93
  test ":create redirects to the new deploy" do
83
- post :create, params: {stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id}}
94
+ post :create, params: { stack_id: @stack.to_param, deploy: { until_commit_id: @commit.id } }
84
95
  new_deploy = Deploy.last
85
96
  assert_redirected_to stack_deploy_path(@stack, new_deploy)
86
97
  end
87
98
 
88
99
  test ":rollback is success" do
89
- get :rollback, params: {stack_id: @stack.to_param, id: @deploy.id}
100
+ get :rollback, params: { stack_id: @stack.to_param, id: @deploy.id }
90
101
  assert_response :success
91
102
  end
92
103
 
93
104
  test ":rollback shows a warning if a deploy is already running" do
94
105
  shipit_deploys(:shipit_running).update!(allow_concurrency: false, status: 'running')
95
106
 
96
- get :rollback, params: {stack_id: @stack.to_param, id: @deploy.id}
107
+ get :rollback, params: { stack_id: @stack.to_param, id: @deploy.id }
97
108
  assert_response :success
98
109
  assert_select '.warning.concurrent-deploy h2' do |elements|
99
110
  assert_equal 'Lando Walrussian is already deploying!', elements.first.text
@@ -118,13 +129,13 @@ module Shipit
118
129
 
119
130
  rollback_commit = @stack.commits.where(id: 2).first
120
131
 
121
- get :show, params: {stack_id: @stack, id: latest_deploy.id, format: 'html'}
132
+ get :show, params: { stack_id: @stack, id: latest_deploy.id, format: 'html' }
122
133
 
123
134
  expected_result = "Abort and Rollback to <span class=\"short-sha-no-bg\">#{rollback_commit.short_sha}</span>"
124
135
  expected_rolling_back_element = "Aborting with Rollback... to <span class=\"short-sha-no-bg\">#{rollback_commit.short_sha}</span>"
125
136
 
126
- assert_select 'span.caption--ready', {html: expected_result}, "rollback button element was not found, or did not match the expected result of '#{expected_result}'"
127
- assert_select 'span.caption--pending', {html: expected_rolling_back_element}, "ready rollback button element was not found, or did not match the expected result of '#{expected_rolling_back_element}'"
137
+ assert_select 'span.caption--ready', { html: expected_result }, "rollback button element was not found, or did not match the expected result of '#{expected_result}'"
138
+ assert_select 'span.caption--pending', { html: expected_rolling_back_element }, "ready rollback button element was not found, or did not match the expected result of '#{expected_rolling_back_element}'"
128
139
  end
129
140
 
130
141
  test ":rollback (regression) works correctly when a previous deploy is not found" do
@@ -140,17 +151,17 @@ module Shipit
140
151
 
141
152
  rollback_commit = @stack.commits.where(id: rollback_commit_id).take
142
153
 
143
- get :show, params: {stack_id: @stack, id: latest_deploy.id, format: 'html'}
154
+ get :show, params: { stack_id: @stack, id: latest_deploy.id, format: 'html' }
144
155
 
145
156
  expected_result = "Abort and Rollback to <span class=\"short-sha-no-bg\">#{rollback_commit.short_sha}</span>"
146
157
  expected_rolling_back_element = "Aborting with Rollback... to <span class=\"short-sha-no-bg\">#{rollback_commit.short_sha}</span>"
147
158
 
148
- assert_select 'span.caption--ready', {html: expected_result}, "rollback button element was not found, or did not match the expected result of '#{expected_result}'"
149
- assert_select 'span.caption--pending', {html: expected_rolling_back_element}, "ready rollback button element was not found, or did not match the expected result of '#{expected_rolling_back_element}'"
159
+ assert_select 'span.caption--ready', { html: expected_result }, "rollback button element was not found, or did not match the expected result of '#{expected_result}'"
160
+ assert_select 'span.caption--pending', { html: expected_rolling_back_element }, "ready rollback button element was not found, or did not match the expected result of '#{expected_rolling_back_element}'"
150
161
  end
151
162
 
152
163
  test ":revert redirect to the proper rollback page" do
153
- get :revert, params: {stack_id: @stack.to_param, id: shipit_deploys(:shipit2).id}
164
+ get :revert, params: { stack_id: @stack.to_param, id: shipit_deploys(:shipit2).id }
154
165
  assert_redirected_to rollback_stack_deploy_path(@stack, shipit_deploys(:shipit))
155
166
  end
156
167
  end