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,22 +1,23 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
4
- class MergePullRequestsJobTest < ActiveSupport::TestCase
5
+ class ProcessMergeRequestsJobTest < ActiveSupport::TestCase
5
6
  setup do
6
7
  @stack = shipit_stacks(:shipit)
7
- @job = MergePullRequestsJob.new
8
+ @job = ProcessMergeRequestsJob.new
8
9
 
9
- @pending_pr = shipit_pull_requests(:shipit_pending)
10
- @unmergeable_pr = shipit_pull_requests(:shipit_pending_unmergeable)
11
- @not_ready_pr = shipit_pull_requests(:shipit_pending_not_mergeable_yet)
12
- @closed_pr = shipit_pull_requests(:shipit_pending_closed)
13
- @merged_pr = shipit_pull_requests(:shipit_pending_merged)
14
- @expired_pr = shipit_pull_requests(:shipit_pending_expired)
15
- @mergable_pending_ci = shipit_pull_requests(:shipit_mergeable_pending_ci)
10
+ @pending_pr = shipit_merge_requests(:shipit_pending)
11
+ @unmergeable_pr = shipit_merge_requests(:shipit_pending_unmergeable)
12
+ @not_ready_pr = shipit_merge_requests(:shipit_pending_not_mergeable_yet)
13
+ @closed_pr = shipit_merge_requests(:shipit_pending_closed)
14
+ @merged_pr = shipit_merge_requests(:shipit_pending_merged)
15
+ @expired_pr = shipit_merge_requests(:shipit_pending_expired)
16
+ @mergable_pending_ci = shipit_merge_requests(:shipit_mergeable_pending_ci)
16
17
  end
17
18
 
18
19
  test "#perform rejects unmergeable PRs and merge the others" do
19
- PullRequest.any_instance.stubs(:refresh!)
20
+ MergeRequest.any_instance.stubs(:refresh!)
20
21
  stub_request(:put, "#{@pending_pr.api_url}/merge").to_return(status: %w(200 OK), body: {
21
22
  sha: "6dcb09b5b57875f334f61aebed695e2e4193db5e",
22
23
  merged: true,
@@ -34,7 +35,7 @@ module Shipit
34
35
  end
35
36
 
36
37
  test "#perform rejects PRs if the merge attempt fails" do
37
- PullRequest.any_instance.stubs(:refresh!)
38
+ MergeRequest.any_instance.stubs(:refresh!)
38
39
  stub_request(:put, "#{@pending_pr.api_url}/merge").to_return(status: %w(405 Method not allowed), body: {
39
40
  message: "Pull Request is not mergeable",
40
41
  documentation_url: "https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button",
@@ -46,24 +47,24 @@ module Shipit
46
47
  end
47
48
 
48
49
  test "#perform rejects PRs but do not attempt to merge any if the stack doesn't allow merges" do
49
- PullRequest.any_instance.stubs(:refresh!)
50
+ MergeRequest.any_instance.stubs(:refresh!)
50
51
  @stack.update!(lock_reason: 'Maintenance')
51
52
  @job.perform(@stack)
52
53
  assert_predicate @pending_pr.reload, :pending?
53
54
  end
54
55
 
55
56
  test "#perform revalidate PRs but do not attempt to merge any if the stack doesn't allow merges" do
56
- PullRequest.any_instance.stubs(:refresh!)
57
+ MergeRequest.any_instance.stubs(:refresh!)
57
58
  @stack.update!(lock_reason: 'Maintenance')
58
59
  @job.perform(@stack)
59
60
  assert_predicate @expired_pr.reload, :revalidating?
60
61
  end
61
62
 
62
63
  test "#perform schedules a new job if the first PR in the queue is not mergeable yet" do
63
- PullRequest.any_instance.stubs(:refresh!)
64
+ MergeRequest.any_instance.stubs(:refresh!)
64
65
 
65
66
  @pending_pr.update!(mergeable: nil)
66
- assert_enqueued_with(job: MergePullRequestsJob) do
67
+ assert_enqueued_with(job: ProcessMergeRequestsJob) do
67
68
  @job.perform(@stack)
68
69
  end
69
70
  assert_predicate @pending_pr.reload, :pending?
@@ -71,21 +72,21 @@ module Shipit
71
72
 
72
73
  test "#perform cancels merge requests for closed PRs" do
73
74
  @pending_pr.cancel!
74
- PullRequest.any_instance.stubs(:refresh!)
75
+ MergeRequest.any_instance.stubs(:refresh!)
75
76
  @job.perform(@stack)
76
77
  assert_predicate @closed_pr.reload, :canceled?
77
78
  end
78
79
 
79
80
  test "#perform cancels merge requests for manually merged PRs" do
80
81
  @pending_pr.cancel!
81
- PullRequest.any_instance.stubs(:refresh!)
82
+ MergeRequest.any_instance.stubs(:refresh!)
82
83
  @job.perform(@stack)
83
84
  assert_predicate @merged_pr.reload, :canceled?
84
85
  end
85
86
 
86
87
  test "#perform does not reject pull requests with pending statuses" do
87
88
  @pending_pr.cancel!
88
- PullRequest.any_instance.stubs(:refresh!)
89
+ MergeRequest.any_instance.stubs(:refresh!)
89
90
  @job.perform(@stack)
90
91
  refute_predicate @mergable_pending_ci.reload, :rejected?
91
92
  refute_predicate @mergable_pending_ci.reload, :merged?
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ module Shipit
5
+ class ReapDeadTasksJobTest < ActiveSupport::TestCase
6
+ setup do
7
+ Task.where(status: Task::ACTIVE_STATUSES).update_all(status: 'success')
8
+
9
+ not_recently = Shipit::Task.recently_created_at - 1.minute
10
+ @deploy = shipit_deploys(:shipit)
11
+ @deploy.status = 'success'
12
+ @deploy.created_at = not_recently
13
+ @deploy.save!
14
+
15
+ @rollback = @deploy.build_rollback
16
+ @rollback.status = 'running'
17
+ @rollback.created_at = not_recently
18
+ @rollback.save!
19
+
20
+ @zombie_deploy = shipit_deploys(:shipit2)
21
+ @zombie_deploy.status = 'running'
22
+ @zombie_deploy.created_at = not_recently
23
+ @zombie_deploy.save!
24
+ end
25
+
26
+ test 'reaps only zombie tasks' do
27
+ refute_predicate @zombie_deploy, :error?
28
+
29
+ Shipit::Deploy.any_instance.expects(:alive?).returns(false)
30
+ Shipit::Rollback.any_instance.expects(:alive?).returns(true)
31
+ ReapDeadTasksJob.perform_now
32
+
33
+ @zombie_deploy.reload
34
+ assert_predicate @zombie_deploy, :error?
35
+
36
+ @deploy.reload
37
+ assert_predicate @deploy, :finished?
38
+
39
+ @rollback.reload
40
+ assert_predicate @rollback, :running?
41
+ end
42
+
43
+ test "does reap recently created tasks" do
44
+ Task.where(status: Task::ACTIVE_STATUSES).update_all(status: 'success')
45
+ recently = Time.current
46
+ @deploy = shipit_deploys(:shipit)
47
+ @deploy.created_at = recently
48
+ @deploy.status = 'running'
49
+ @deploy.save!
50
+ Shipit::Deploy.any_instance.expects(:alive?).never
51
+
52
+ ReapDeadTasksJob.perform_now
53
+
54
+ @deploy.reload
55
+ assert_predicate @deploy, :running?
56
+ end
57
+
58
+ test 'reaps zombie aborting tasks' do
59
+ deploy = shipit_deploys(:shipit2)
60
+ deploy.status = 'aborting'
61
+ deploy.save!
62
+
63
+ ReapDeadTasksJob.perform_now
64
+
65
+ assert_predicate deploy.reload, :error?
66
+ end
67
+ end
68
+ end
@@ -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
@@ -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
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class DeployCommandsTest < ActiveSupport::TestCase
6
+ test "#env includes the stack's pull request labels" do
7
+ stack = shipit_stacks(:review_stack)
8
+ deploy = stack.trigger_continuous_delivery
9
+ stack.pull_request.labels = ["wip", "bug"]
10
+
11
+ env = Shipit::DeployCommands.new(deploy).env
12
+
13
+ assert_equal env["WIP"], "true"
14
+ assert_equal env["BUG"], "true"
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class TaskCommandsTest < ActiveSupport::TestCase
6
+ test "#env includes a ReviewStack's pull request labels" do
7
+ stack = shipit_stacks(:review_stack)
8
+ stack.pull_request.labels = ["wip", "bug"]
9
+ task = shipit_tasks(:shipit_restart)
10
+ task.stack = stack
11
+
12
+ env = Shipit::TaskCommands.new(task).env
13
+
14
+ assert_equal env["WIP"], "true"
15
+ assert_equal env["BUG"], "true"
16
+ end
17
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ module Shipit
5
+ class SameSiteCookieMiddlewareTest < ActiveSupport::TestCase
6
+ def app
7
+ Rack::Lint.new(lambda { |_env|
8
+ response = Rack::Response.new("", 200, "Content-Type" => "text/yaml")
9
+
10
+ response.set_cookie("session_test", value: "session_test", domain: ".test.com", path: "/")
11
+ response.set_cookie("another_cookie", value: "123abc", domain: ".test.com", path: "/")
12
+ response.finish
13
+ })
14
+ end
15
+
16
+ def env_for_url(url)
17
+ env = Rack::MockRequest.env_for(url)
18
+ env
19
+ end
20
+
21
+ def middleware
22
+ Shipit::SameSiteCookieMiddleware.new(app)
23
+ end
24
+
25
+ test 'SameSite cookie attributes should be added on SSL' do
26
+ env = env_for_url("https://test.com/")
27
+
28
+ _status, headers, _body = middleware.call(env)
29
+
30
+ assert_includes headers['Set-Cookie'], 'SameSite'
31
+ end
32
+
33
+ test 'SameSite cookie attributes should be added when multiple cookies are present' do
34
+ env = env_for_url("https://test.com/")
35
+
36
+ _status, headers, _body = middleware.call(env)
37
+
38
+ session_cookie, other_cookie = headers['Set-Cookie'].split("\n")
39
+
40
+ assert_includes session_cookie, 'SameSite'
41
+ assert_includes other_cookie, 'SameSite'
42
+ end
43
+
44
+ test 'SameSite cookie attributes should not be added on non SSL requests' do
45
+ env = env_for_url("http://test.com/")
46
+
47
+ _status, headers, _body = middleware.call(env)
48
+
49
+ assert_not_includes headers['Set-Cookie'], 'SameSite'
50
+ end
51
+ end
52
+ end
@@ -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
  require 'tmpdir'
3
4
 
@@ -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
 
12
13
  test 'creation on GitHub' do
13
14
  response = stub(id: 44, url: 'https://example.com')
14
- @author.github_api.expects(:create_deployment_status).with(
15
+ @author.github_api.class.any_instance.expects(:create_deployment_status).with(
15
16
  @deployment.api_url,
16
17
  'in_progress',
17
18
  accept: "application/vnd.github.flash-preview+json",
@@ -32,7 +33,7 @@ module Shipit
32
33
  status = deployment.statuses.create!(status: 'success')
33
34
  status.stubs(:description).returns('desc' * limit)
34
35
  create_status_response = stub(id: 'abcd', url: 'https://github.com/status/abcd')
35
- status.author.github_api.expects(:create_deployment_status).with do |*_args, **kwargs|
36
+ status.author.github_api.class.any_instance.expects(:create_deployment_status).with do |_url, _status, kwargs|
36
37
  kwargs[:description].size <= limit
37
38
  end.returns(create_status_response)
38
39
 
@@ -46,7 +47,7 @@ module Shipit
46
47
  stack = status.stack
47
48
  stack.deploy_url = "stack-deploy-url"
48
49
  create_status_response = stub(id: 'abcd', url: 'https://github.com/status/abcd')
49
- status.author.github_api.expects(:create_deployment_status).with do |*_args, **kwargs|
50
+ status.author.github_api.class.any_instance.expects(:create_deployment_status).with do |_url, _status, kwargs|
50
51
  kwargs[:environment_url] == 'stack-deploy-url'
51
52
  end.returns(create_status_response)
52
53
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  module Shipit
@@ -24,7 +25,7 @@ module Shipit
24
25
  from_sha: 'f890fd8b5f2be05d1fedb763a3605ee461c39074',
25
26
  to_sha: '467578b362bf2b4df5903e1c7960929361c3435a',
26
27
  },
27
- },
28
+ }.to_json,
28
29
  ).returns(deployment_response)
29
30
 
30
31
  @deployment.create_on_github!
@@ -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
  stub_request(:get, "https://api.github.com/user/emails").to_return(
13
14
  status: %w(200 OK),
14
15
  body: {}.to_json,
15
- headers: {"Content-Type" => "application/json"},
16
+ headers: { "Content-Type" => "application/json" },
16
17
  )
17
18
  end
18
19
 
@@ -68,6 +69,39 @@ module Shipit
68
69
  refute_predicate commit, :revert?
69
70
  end
70
71
 
72
+ test '.create_from_github truncates long messages' do
73
+ message = 'ABCDEFGHIJ' * 7000
74
+
75
+ assert_difference -> { Commit.count }, +1 do
76
+ @stack.commits.create_from_github!(
77
+ resource(
78
+ sha: '2adaad1ad30c235d3a6e7981dfc1742f7ecb1e85',
79
+ author: {},
80
+ committer: {},
81
+ commit: {
82
+ author: {
83
+ name: 'Lando Walrussian',
84
+ email: 'walrus@shopify.com',
85
+ date: Time.now,
86
+ },
87
+ committer: {
88
+ name: 'Lando Walrussian',
89
+ email: 'walrus@shopify.com',
90
+ date: Time.now,
91
+ },
92
+ message: message,
93
+ },
94
+ ),
95
+ )
96
+ end
97
+
98
+ max_message_size = Shipit::Commit.columns_hash["message"].limit
99
+ commit = Commit.last
100
+
101
+ refute_predicate commit.message, :blank?
102
+ assert(commit.message.length <= Shipit::Commit.columns_hash["message"].limit) if max_message_size
103
+ end
104
+
71
105
  test '.create_from_github handle PRs merged by another Shipit stacks' do
72
106
  assert_difference -> { Commit.count }, +1 do
73
107
  @stack.commits.create_from_github!(
@@ -96,12 +130,53 @@ module Shipit
96
130
  assert_equal shipit_users(:walrus), commit.author
97
131
  end
98
132
 
133
+ test '.create_from_github stores pull_request_head_sha' do
134
+ assert_difference -> { Commit.count }, +1 do
135
+ @stack.commits.create_from_github!(
136
+ resource(
137
+ sha: '2adaad1ad30c235d3a6e7981dfc1742f7ecb1e85',
138
+ author: {},
139
+ committer: {},
140
+ commit: {
141
+ author: {
142
+ name: 'Shipit',
143
+ email: '',
144
+ date: Time.now,
145
+ },
146
+ committer: {
147
+ name: 'Shipit',
148
+ email: '',
149
+ date: Time.now,
150
+ },
151
+ message: "Merge pull request #62 from shipit-engine/yoloshipit\n\nyoloshipit!",
152
+ },
153
+ parents: [
154
+ { sha: "1864542e3d2f8a41916a2dec0f2b4d3c1bf4899b", url: '', html_url: '' },
155
+ { sha: "63d7e03e517fd2ae1caeb1b7a9f21767f84d671a", url: '', html_url: '' },
156
+ ],
157
+ ),
158
+ )
159
+ end
160
+
161
+ commit = Commit.last
162
+ assert_equal '63d7e03e517fd2ae1caeb1b7a9f21767f84d671a', commit.pull_request_head_sha
163
+ end
164
+
99
165
  test "#message= truncates the message" do
100
166
  skip unless Shipit::Commit.columns_hash['message'].limit
101
167
  limit = Shipit::Commit.columns_hash['message'].limit
102
168
 
103
169
  @commit.update!(message: 'a' * limit * 2)
104
- assert_equal limit, @commit.message.size
170
+ assert_equal limit, @commit.message.bytesize
171
+ end
172
+
173
+ test "#message= truncates multibyte messages" do
174
+ skip unless Shipit::Commit.columns_hash['message'].limit
175
+ limit = Shipit::Commit.columns_hash['message'].limit
176
+
177
+ @commit.update!(message: '国' * limit)
178
+ assert_operator @commit.message.length, :<=, limit
179
+ assert_operator @commit.message.bytesize, :<=, limit
105
180
  end
106
181
 
107
182
  test "#pull_request? detect pull request based on message format" do
@@ -275,6 +350,8 @@ module Shipit
275
350
  output: mock(
276
351
  title: 'Tests build ran successfully',
277
352
  ),
353
+ completed_at: Time.now,
354
+ started_at: Time.now - 1.minute,
278
355
  )
279
356
  response = mock(
280
357
  check_runs: [check_run],
@@ -395,10 +472,10 @@ module Shipit
395
472
  commit = shipit_commits(:second)
396
473
  assert_predicate commit.status, :group?
397
474
  assert_equal 3, commit.status.size
398
- commit.stack.update!(cached_deploy_spec: DeploySpec.new('ci' => {'hide' => [
475
+ commit.stack.update!(cached_deploy_spec: DeploySpec.new('ci' => { 'hide' => [
399
476
  'Travis CI',
400
477
  'metrics/coveralls',
401
- ]}))
478
+ ] }))
402
479
  commit.reload
403
480
  refute_predicate commit.status, :group?
404
481
  end
@@ -528,7 +605,7 @@ module Shipit
528
605
  'error' => %w(success),
529
606
  }
530
607
  expected_webhook_transitions.each do |initial_state, firing_states|
531
- initial_status_attributes = {state: initial_state, description: 'abc', context: 'ci/travis'}
608
+ initial_status_attributes = { state: initial_state, description: 'abc', context: 'ci/travis' }
532
609
  (expected_webhook_transitions.keys - %w(unknown)).each do |new_state|
533
610
  should_fire = firing_states.include?(new_state)
534
611
  action = should_fire ? 'fires' : 'does not fire'
@@ -547,7 +624,7 @@ module Shipit
547
624
  end
548
625
  assert_equal initial_state, commit.state
549
626
 
550
- expected_status_attributes = {state: new_state, description: initial_state, context: 'ci/travis'}
627
+ expected_status_attributes = { state: new_state, description: initial_state, context: 'ci/travis' }
551
628
  add_status = lambda do
552
629
  attrs = expected_status_attributes.merge(created_at: 1.day.ago.to_s(:db))
553
630
  commit.create_status_from_github!(OpenStruct.new(attrs))
@@ -612,7 +689,7 @@ module Shipit
612
689
  end
613
690
  end
614
691
 
615
- test "#add_status schedule a MergePullRequests job if the commit transition to `pending` or `success`" do
692
+ test "#add_status schedule a MergeMergeRequests job if the commit transition to `pending` or `success`" do
616
693
  commit = shipit_commits(:second)
617
694
  github_status = OpenStruct.new(
618
695
  state: 'success',
@@ -622,7 +699,7 @@ module Shipit
622
699
  )
623
700
 
624
701
  assert_equal 'failure', commit.state
625
- assert_enqueued_with(job: MergePullRequestsJob, args: [@commit.stack]) do
702
+ assert_enqueued_with(job: ProcessMergeRequestsJob, args: [@commit.stack]) do
626
703
  commit.create_status_from_github!(github_status)
627
704
  assert_equal 'success', commit.state
628
705
  end
@@ -663,12 +740,12 @@ module Shipit
663
740
  sha: '5590fd8b5f2be05d1fedb763a3605ee461c39074',
664
741
  message: "Merge pull request #62 from shipit-engine/yoloshipit\n\nyoloshipit!",
665
742
  )
666
- pull_request = shipit_pull_requests(:shipit_pending)
743
+ merge_request = shipit_merge_requests(:shipit_pending)
667
744
 
668
745
  assert_predicate commit, :pull_request?
669
746
  assert_equal 62, commit.pull_request_number
670
- assert_equal pull_request.title, commit.pull_request_title
671
- assert_equal pull_request, commit.pull_request
747
+ assert_equal merge_request.title, commit.pull_request_title
748
+ assert_equal merge_request, commit.merge_request
672
749
  end
673
750
 
674
751
  test "merge commits infer pull request number and title from the message if it's not a known pull request" do
@@ -684,7 +761,7 @@ module Shipit
684
761
  assert_predicate commit, :pull_request?
685
762
  assert_equal 99, commit.pull_request_number
686
763
  assert_equal 'yoloshipit!', commit.pull_request_title
687
- assert_nil commit.pull_request
764
+ assert_nil commit.merge_request
688
765
  end
689
766
 
690
767
  test "the merge requester if known overrides the commit author" do
@@ -713,7 +790,7 @@ module Shipit
713
790
  refute_predicate commit, :pull_request?
714
791
  assert_nil commit.pull_request_number
715
792
  assert_nil commit.pull_request_title
716
- assert_nil commit.pull_request
793
+ assert_nil commit.merge_request
717
794
  end
718
795
 
719
796
  test "#revert? returns false if the message doesn't follow the revert convention" do
@@ -772,12 +849,12 @@ module Shipit
772
849
  test "when merged via the queue, deploy_requested_at is merge_requested_at" do
773
850
  commit = shipit_commits(:cyclimse_merged)
774
851
  assert_predicate commit, :pull_request?
775
- assert_equal commit.pull_request, shipit_pull_requests(:cyclimse_pending_merged)
776
- assert_equal commit.deploy_requested_at, commit.pull_request.merge_requested_at
852
+ assert_equal commit.merge_request, shipit_merge_requests(:cyclimse_pending_merged)
853
+ assert_equal commit.deploy_requested_at, commit.merge_request.merge_requested_at
777
854
  end
778
855
 
779
856
  test "when merged manually after being queued, deploy_requested_at is created_at" do
780
- pr = shipit_pull_requests(:cyclimse_pending_merged)
857
+ pr = shipit_merge_requests(:cyclimse_pending_merged)
781
858
  pr.cancel!
782
859
  commit = shipit_commits(:cyclimse_merged)
783
860
  assert_equal commit.deploy_requested_at, commit.created_at
@@ -804,9 +881,9 @@ module Shipit
804
881
 
805
882
  def expect_hook_emit(commit, event, status_attributes, &block)
806
883
  matches = lambda do |payload|
807
- assert_equal commit, payload[:commit]
808
- assert_equal commit.stack, payload[:stack]
809
- assert_equal status_attributes[:state], payload[:status]
884
+ assert_equal(commit, payload[:commit])
885
+ assert_equal(commit.stack, payload[:stack])
886
+ assert_equal(status_attributes[:state], payload[:status])
810
887
  end
811
888
  expect_hook(event, commit.stack, matches, &block)
812
889
  end