shipit-engine 0.38.0 → 0.40.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 (323) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +48 -4
  3. data/Rakefile +2 -1
  4. data/app/assets/javascripts/shipit/continuous_delivery_schedule.js.coffee +15 -0
  5. data/app/controllers/concerns/shipit/active_model_serializers_patch.rb +1 -0
  6. data/app/controllers/concerns/shipit/api/cacheable.rb +1 -0
  7. data/app/controllers/concerns/shipit/api/paginable.rb +3 -2
  8. data/app/controllers/concerns/shipit/api/rendering.rb +1 -0
  9. data/app/controllers/concerns/shipit/authentication.rb +1 -0
  10. data/app/controllers/concerns/shipit/pagination.rb +3 -2
  11. data/app/controllers/shipit/api/base_controller.rb +12 -10
  12. data/app/controllers/shipit/api/ccmenu_controller.rb +2 -1
  13. data/app/controllers/shipit/api/commits_controller.rb +2 -3
  14. data/app/controllers/shipit/api/deploys_controller.rb +6 -1
  15. data/app/controllers/shipit/api/hooks_controller.rb +4 -3
  16. data/app/controllers/shipit/api/locks_controller.rb +1 -0
  17. data/app/controllers/shipit/api/merge_requests_controller.rb +6 -5
  18. data/app/controllers/shipit/api/outputs_controller.rb +1 -0
  19. data/app/controllers/shipit/api/release_statuses_controller.rb +2 -1
  20. data/app/controllers/shipit/api/rollbacks_controller.rb +1 -0
  21. data/app/controllers/shipit/api/stacks_controller.rb +15 -14
  22. data/app/controllers/shipit/api/tasks_controller.rb +6 -5
  23. data/app/controllers/shipit/api_clients_controller.rb +6 -7
  24. data/app/controllers/shipit/ccmenu_url_controller.rb +3 -2
  25. data/app/controllers/shipit/commit_checks_controller.rb +2 -1
  26. data/app/controllers/shipit/commits_controller.rb +1 -0
  27. data/app/controllers/shipit/continuous_delivery_schedules_controller.rb +42 -0
  28. data/app/controllers/shipit/deploys_controller.rb +6 -5
  29. data/app/controllers/shipit/github_authentication_controller.rb +6 -0
  30. data/app/controllers/shipit/merge_requests_controller.rb +1 -0
  31. data/app/controllers/shipit/merge_status_controller.rb +30 -26
  32. data/app/controllers/shipit/release_statuses_controller.rb +1 -0
  33. data/app/controllers/shipit/repositories_controller.rb +4 -7
  34. data/app/controllers/shipit/rollbacks_controller.rb +2 -1
  35. data/app/controllers/shipit/shipit_controller.rb +1 -0
  36. data/app/controllers/shipit/stacks_controller.rb +27 -31
  37. data/app/controllers/shipit/status_controller.rb +1 -0
  38. data/app/controllers/shipit/tasks_controller.rb +3 -1
  39. data/app/controllers/shipit/webhooks_controller.rb +2 -1
  40. data/app/helpers/shipit/api_clients_helper.rb +1 -0
  41. data/app/helpers/shipit/chunks_helper.rb +3 -1
  42. data/app/helpers/shipit/deploys_helper.rb +7 -3
  43. data/app/helpers/shipit/github_url_helper.rb +5 -4
  44. data/app/helpers/shipit/merge_status_helper.rb +1 -0
  45. data/app/helpers/shipit/shipit_helper.rb +11 -10
  46. data/app/helpers/shipit/stacks_helper.rb +10 -11
  47. data/app/helpers/shipit/tasks_helper.rb +2 -1
  48. data/app/jobs/shipit/background_job/unique.rb +3 -2
  49. data/app/jobs/shipit/background_job.rb +9 -1
  50. data/app/jobs/shipit/cache_deploy_spec_job.rb +2 -1
  51. data/app/jobs/shipit/chunk_rollup_job.rb +1 -0
  52. data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
  53. data/app/jobs/shipit/continuous_delivery_job.rb +5 -0
  54. data/app/jobs/shipit/create_on_github_job.rb +1 -0
  55. data/app/jobs/shipit/create_release_statuses_job.rb +2 -0
  56. data/app/jobs/shipit/deferred_touch_job.rb +1 -0
  57. data/app/jobs/shipit/deliver_hook_job.rb +1 -0
  58. data/app/jobs/shipit/destroy_job.rb +1 -0
  59. data/app/jobs/shipit/destroy_repository_job.rb +1 -0
  60. data/app/jobs/shipit/destroy_stack_job.rb +36 -15
  61. data/app/jobs/shipit/emit_event_job.rb +1 -0
  62. data/app/jobs/shipit/fetch_commit_stats_job.rb +1 -0
  63. data/app/jobs/shipit/fetch_deployed_revision_job.rb +1 -0
  64. data/app/jobs/shipit/github_sync_job.rb +4 -2
  65. data/app/jobs/shipit/mark_deploy_healthy_job.rb +1 -0
  66. data/app/jobs/shipit/perform_commit_checks_job.rb +1 -0
  67. data/app/jobs/shipit/perform_task_job.rb +1 -0
  68. data/app/jobs/shipit/process_merge_requests_job.rb +2 -0
  69. data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
  70. data/app/jobs/shipit/reap_dead_tasks_job.rb +1 -0
  71. data/app/jobs/shipit/refresh_check_runs_job.rb +1 -0
  72. data/app/jobs/shipit/refresh_github_user_job.rb +1 -0
  73. data/app/jobs/shipit/refresh_merge_request_job.rb +1 -0
  74. data/app/jobs/shipit/refresh_statuses_job.rb +1 -0
  75. data/app/jobs/shipit/setup_github_hook_job.rb +1 -0
  76. data/app/jobs/shipit/update_estimated_deploy_duration_job.rb +1 -0
  77. data/app/jobs/shipit/update_github_last_deployed_ref_job.rb +6 -7
  78. data/app/models/concerns/shipit/deferred_touch.rb +5 -2
  79. data/app/models/shipit/anonymous_user.rb +4 -5
  80. data/app/models/shipit/api_client.rb +5 -3
  81. data/app/models/shipit/application_record.rb +1 -0
  82. data/app/models/shipit/check_run.rb +7 -6
  83. data/app/models/shipit/command_line_user.rb +4 -5
  84. data/app/models/shipit/commit.rb +46 -32
  85. data/app/models/shipit/commit_checks.rb +4 -2
  86. data/app/models/shipit/commit_deployment.rb +7 -5
  87. data/app/models/shipit/commit_deployment_status.rb +5 -3
  88. data/app/models/shipit/commit_message.rb +2 -0
  89. data/app/models/shipit/continuous_delivery_schedule.rb +84 -0
  90. data/app/models/shipit/delivery.rb +5 -4
  91. data/app/models/shipit/deploy.rb +46 -26
  92. data/app/models/shipit/deploy_spec/bundler_discovery.rb +3 -1
  93. data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
  94. data/app/models/shipit/deploy_spec/file_system.rb +48 -17
  95. data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +4 -3
  96. data/app/models/shipit/deploy_spec/lerna_discovery.rb +32 -31
  97. data/app/models/shipit/deploy_spec/npm_discovery.rb +18 -13
  98. data/app/models/shipit/deploy_spec/pypi_discovery.rb +5 -4
  99. data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
  100. data/app/models/shipit/deploy_spec.rb +25 -30
  101. data/app/models/shipit/deploy_stats.rb +6 -1
  102. data/app/models/shipit/duration.rb +5 -3
  103. data/app/models/shipit/ephemeral_commit_checks.rb +8 -7
  104. data/app/models/shipit/github_hook.rb +1 -0
  105. data/app/models/shipit/github_status.rb +1 -0
  106. data/app/models/shipit/hook.rb +9 -7
  107. data/app/models/shipit/membership.rb +1 -0
  108. data/app/models/shipit/merge_request.rb +26 -16
  109. data/app/models/shipit/output_chunk.rb +1 -0
  110. data/app/models/shipit/provisioning_handler.rb +1 -0
  111. data/app/models/shipit/pull_request.rb +2 -2
  112. data/app/models/shipit/record.rb +1 -0
  113. data/app/models/shipit/release_status.rb +4 -3
  114. data/app/models/shipit/repository.rb +12 -11
  115. data/app/models/shipit/review_stack.rb +3 -1
  116. data/app/models/shipit/review_stack_provisioning_queue.rb +2 -2
  117. data/app/models/shipit/rollback.rb +2 -0
  118. data/app/models/shipit/stack.rb +71 -60
  119. data/app/models/shipit/status/common.rb +1 -0
  120. data/app/models/shipit/status/group.rb +5 -3
  121. data/app/models/shipit/status/missing.rb +2 -1
  122. data/app/models/shipit/status/unknown.rb +1 -0
  123. data/app/models/shipit/status.rb +5 -4
  124. data/app/models/shipit/task.rb +40 -31
  125. data/app/models/shipit/task_definition.rb +10 -7
  126. data/app/models/shipit/task_execution_strategy/default.rb +13 -13
  127. data/app/models/shipit/team.rb +13 -12
  128. data/app/models/shipit/undeployed_commit.rb +8 -3
  129. data/app/models/shipit/unlimited_api_client.rb +2 -2
  130. data/app/models/shipit/user.rb +23 -16
  131. data/app/models/shipit/variable_definition.rb +2 -1
  132. data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +1 -0
  133. data/app/models/shipit/webhooks/handlers/handler.rb +1 -0
  134. data/app/models/shipit/webhooks/handlers/membership_handler.rb +1 -0
  135. data/app/models/shipit/webhooks/handlers/pull_request/assigned_handler.rb +10 -10
  136. data/app/models/shipit/webhooks/handlers/pull_request/closed_handler.rb +1 -1
  137. data/app/models/shipit/webhooks/handlers/pull_request/edited_handler.rb +10 -10
  138. data/app/models/shipit/webhooks/handlers/pull_request/label_capturing_handler.rb +2 -2
  139. data/app/models/shipit/webhooks/handlers/pull_request/labeled_handler.rb +2 -2
  140. data/app/models/shipit/webhooks/handlers/pull_request/reopened_handler.rb +1 -1
  141. data/app/models/shipit/webhooks/handlers/pull_request/review_stack_adapter.rb +3 -3
  142. data/app/models/shipit/webhooks/handlers/pull_request/unlabeled_handler.rb +1 -1
  143. data/app/models/shipit/webhooks/handlers/push_handler.rb +2 -1
  144. data/app/models/shipit/webhooks/handlers/status_handler.rb +1 -0
  145. data/app/models/shipit/webhooks.rb +3 -2
  146. data/app/serializers/concerns/shipit/conditional_attributes.rb +1 -0
  147. data/app/serializers/shipit/anonymous_user_serializer.rb +1 -0
  148. data/app/serializers/shipit/command_line_user_serializer.rb +1 -0
  149. data/app/serializers/shipit/commit_serializer.rb +2 -1
  150. data/app/serializers/shipit/deploy_serializer.rb +1 -0
  151. data/app/serializers/shipit/hook_serializer.rb +1 -0
  152. data/app/serializers/shipit/merge_request_serializer.rb +2 -1
  153. data/app/serializers/shipit/rollback_serializer.rb +1 -0
  154. data/app/serializers/shipit/short_commit_serializer.rb +1 -0
  155. data/app/serializers/shipit/stack_serializer.rb +4 -3
  156. data/app/serializers/shipit/tail_task_serializer.rb +4 -1
  157. data/app/serializers/shipit/task_serializer.rb +1 -0
  158. data/app/serializers/shipit/user_serializer.rb +1 -0
  159. data/app/validators/ascii_only_validator.rb +4 -3
  160. data/app/validators/subset_validator.rb +1 -0
  161. data/app/views/shipit/_variables.html.erb +1 -1
  162. data/app/views/shipit/ccmenu/project.xml.builder +2 -1
  163. data/app/views/shipit/continuous_delivery_schedules/show.html.erb +59 -0
  164. data/app/views/shipit/merge_status/failure.html.erb +1 -1
  165. data/app/views/shipit/missing_settings.html.erb +1 -1
  166. data/app/views/shipit/stacks/_settings_form.erb +1 -0
  167. data/config/initializers/inflections.rb +1 -0
  168. data/config/locales/en.yml +1 -0
  169. data/config/routes.rb +21 -18
  170. data/config/secrets.development.example.yml +1 -1
  171. data/config/secrets.development.shopify.yml +1 -1
  172. data/db/migrate/20240821003007_add_continuous_delivery_schedules.rb +13 -0
  173. data/db/migrate/20250207203053_embiggen_github_ids.rb +8 -0
  174. data/lib/shipit/cast_value.rb +1 -0
  175. data/lib/shipit/command.rb +29 -9
  176. data/lib/shipit/commands.rb +4 -2
  177. data/lib/shipit/csv_serializer.rb +3 -0
  178. data/lib/shipit/deploy_commands.rb +2 -1
  179. data/lib/shipit/engine.rb +6 -5
  180. data/lib/shipit/environment_variables.rb +2 -0
  181. data/lib/shipit/first_parent_commits_iterator.rb +2 -3
  182. data/lib/shipit/flock.rb +11 -9
  183. data/lib/shipit/github_app.rb +14 -16
  184. data/lib/shipit/github_http_cache_middleware.rb +1 -0
  185. data/lib/shipit/null_serializer.rb +1 -0
  186. data/lib/shipit/octokit_check_runs.rb +2 -3
  187. data/lib/shipit/octokit_iterator.rb +2 -0
  188. data/lib/shipit/paginator.rb +1 -0
  189. data/lib/shipit/rollback_commands.rb +2 -1
  190. data/lib/shipit/same_site_cookie_middleware.rb +1 -0
  191. data/lib/shipit/simple_message_verifier.rb +1 -0
  192. data/lib/shipit/stack_commands.rb +35 -27
  193. data/lib/shipit/stat.rb +1 -0
  194. data/lib/shipit/task_commands.rb +7 -6
  195. data/lib/shipit/version.rb +2 -1
  196. data/lib/shipit.rb +30 -17
  197. data/lib/tasks/cron.rake +2 -1
  198. data/lib/tasks/dev.rake +3 -2
  199. data/lib/tasks/shipit.rake +3 -2
  200. data/lib/tasks/teams.rake +3 -2
  201. data/test/controllers/api/base_controller_test.rb +1 -0
  202. data/test/controllers/api/ccmenu_controller_test.rb +4 -3
  203. data/test/controllers/api/commits_controller_test.rb +1 -0
  204. data/test/controllers/api/deploys_controller_test.rb +26 -1
  205. data/test/controllers/api/hooks_controller_test.rb +6 -5
  206. data/test/controllers/api/locks_controller_test.rb +1 -0
  207. data/test/controllers/api/merge_requests_controller_test.rb +1 -0
  208. data/test/controllers/api/outputs_controller_test.rb +1 -0
  209. data/test/controllers/api/release_statuses_controller_test.rb +4 -3
  210. data/test/controllers/api/rollback_controller_test.rb +3 -2
  211. data/test/controllers/api/stacks_controller_test.rb +13 -12
  212. data/test/controllers/api/tasks_controller_test.rb +7 -6
  213. data/test/controllers/api_clients_controller_test.rb +10 -10
  214. data/test/controllers/ccmenu_controller_test.rb +1 -0
  215. data/test/controllers/commit_checks_controller_test.rb +1 -0
  216. data/test/controllers/commits_controller_test.rb +9 -8
  217. data/test/controllers/continuous_delivery_schedules_controller_test.rb +66 -0
  218. data/test/controllers/deploys_controller_test.rb +4 -2
  219. data/test/controllers/github_authentication_controller_test.rb +6 -4
  220. data/test/controllers/merge_requests_controller_test.rb +1 -0
  221. data/test/controllers/merge_status_controller_test.rb +5 -4
  222. data/test/controllers/release_statuses_controller_test.rb +1 -0
  223. data/test/controllers/repositories_controller_test.rb +6 -5
  224. data/test/controllers/rollbacks_controller_test.rb +3 -2
  225. data/test/controllers/stacks_controller_test.rb +8 -6
  226. data/test/controllers/status_controller_test.rb +1 -0
  227. data/test/controllers/tasks_controller_test.rb +13 -5
  228. data/test/controllers/webhooks_controller_test.rb +10 -9
  229. data/test/dummy/config/application.rb +2 -1
  230. data/test/dummy/config/initializers/0_load_development_secrets.rb +2 -2
  231. data/test/dummy/config/secrets.development.json +3 -0
  232. data/test/dummy/config/secrets.test.json +21 -0
  233. data/test/dummy/db/schema.rb +33 -6
  234. data/test/fixtures/shipit/commits.yml +7 -7
  235. data/test/fixtures/shipit/stacks.yml +4 -10
  236. data/test/fixtures/shipit/tasks.yml +3 -3
  237. data/test/helpers/api_helper.rb +2 -3
  238. data/test/helpers/fixture_aliases_helper.rb +1 -0
  239. data/test/helpers/hooks_helper.rb +1 -0
  240. data/test/helpers/json_helper.rb +4 -3
  241. data/test/helpers/links_helper.rb +2 -1
  242. data/test/helpers/payloads_helper.rb +1 -0
  243. data/test/helpers/queries_helper.rb +4 -3
  244. data/test/jobs/cache_deploy_spec_job_test.rb +3 -2
  245. data/test/jobs/chunk_rollup_job_test.rb +3 -2
  246. data/test/jobs/deliver_hook_job_test.rb +1 -0
  247. data/test/jobs/destroy_repository_job_test.rb +1 -0
  248. data/test/jobs/destroy_stack_job_test.rb +12 -0
  249. data/test/jobs/emit_event_job_test.rb +1 -0
  250. data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
  251. data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
  252. data/test/jobs/github_sync_job_test.rb +22 -21
  253. data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
  254. data/test/jobs/perform_task_job_test.rb +3 -3
  255. data/test/jobs/process_merge_requests_job_test.rb +7 -6
  256. data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
  257. data/test/jobs/reap_dead_tasks_job_test.rb +1 -0
  258. data/test/jobs/refresh_github_user_job_test.rb +1 -0
  259. data/test/jobs/refresh_status_job_test.rb +1 -0
  260. data/test/jobs/shipit/background_job_test.rb +35 -0
  261. data/test/jobs/shipit/continuous_delivery_job_test.rb +31 -0
  262. data/test/jobs/unique_job_test.rb +3 -1
  263. data/test/jobs/update_github_last_deployed_ref_job_test.rb +1 -0
  264. data/test/middleware/same_site_cookie_middleware_test.rb +2 -2
  265. data/test/models/api_client_test.rb +1 -0
  266. data/test/models/commit_checks_test.rb +2 -1
  267. data/test/models/commit_deployment_status_test.rb +2 -2
  268. data/test/models/commit_deployment_test.rb +4 -3
  269. data/test/models/commits_test.rb +72 -70
  270. data/test/models/delivery_test.rb +3 -2
  271. data/test/models/deploy_spec_test.rb +113 -109
  272. data/test/models/deploy_stats_test.rb +1 -0
  273. data/test/models/deploys_test.rb +65 -56
  274. data/test/models/duration_test.rb +1 -1
  275. data/test/models/github_hook_test.rb +1 -0
  276. data/test/models/hook_test.rb +7 -4
  277. data/test/models/membership_test.rb +1 -0
  278. data/test/models/merge_request_test.rb +26 -20
  279. data/test/models/release_statuses_test.rb +2 -1
  280. data/test/models/rollbacks_test.rb +4 -3
  281. data/test/models/shipit/check_run_test.rb +16 -15
  282. data/test/models/shipit/continuous_delivery_schedule_test.rb +109 -0
  283. data/test/models/shipit/deploy_spec/file_system_test.rb +54 -10
  284. data/test/models/shipit/pull_request_test.rb +9 -9
  285. data/test/models/shipit/repository_test.rb +3 -2
  286. data/test/models/shipit/review_stack_provisioning_queue_test.rb +2 -2
  287. data/test/models/shipit/{stacks_test.rb → stack_test.rb} +48 -34
  288. data/test/models/shipit/webhooks/handlers/pull_request/closed_handler_test.rb +36 -34
  289. data/test/models/shipit/webhooks/handlers/pull_request/label_capturing_handler_test.rb +28 -28
  290. data/test/models/shipit/webhooks/handlers/pull_request/labeled_handler_test.rb +42 -42
  291. data/test/models/shipit/webhooks/handlers/pull_request/opened_handler_test.rb +33 -33
  292. data/test/models/shipit/webhooks/handlers/pull_request/reopened_handler_test.rb +37 -37
  293. data/test/models/shipit/webhooks/handlers/pull_request/review_stack_adapter_test.rb +1 -1
  294. data/test/models/shipit/webhooks/handlers/pull_request/unlabeled_handler_test.rb +44 -42
  295. data/test/models/shipit/webhooks/handlers_test.rb +1 -0
  296. data/test/models/status/group_test.rb +3 -2
  297. data/test/models/status/missing_test.rb +1 -0
  298. data/test/models/status_test.rb +2 -1
  299. data/test/models/task_definitions_test.rb +7 -6
  300. data/test/models/tasks_test.rb +5 -4
  301. data/test/models/team_test.rb +5 -4
  302. data/test/models/undeployed_commits_test.rb +10 -9
  303. data/test/models/users_test.rb +29 -20
  304. data/test/test_command_integration.rb +1 -1
  305. data/test/test_helper.rb +12 -10
  306. data/test/unit/anonymous_user_serializer_test.rb +1 -0
  307. data/test/unit/command_test.rb +10 -1
  308. data/test/unit/commands_test.rb +1 -0
  309. data/test/unit/commit_serializer_test.rb +1 -0
  310. data/test/unit/csv_serializer_test.rb +3 -2
  311. data/test/unit/deploy_commands_test.rb +33 -23
  312. data/test/unit/deploy_serializer_test.rb +1 -0
  313. data/test/unit/environment_variables_test.rb +2 -1
  314. data/test/unit/github_app_test.rb +11 -10
  315. data/test/unit/github_apps_test.rb +19 -18
  316. data/test/unit/github_url_helper_test.rb +1 -0
  317. data/test/unit/line_buffer_test.rb +1 -1
  318. data/test/unit/rollback_commands_test.rb +2 -1
  319. data/test/unit/shipit_helper_test.rb +1 -0
  320. data/test/unit/shipit_test.rb +47 -1
  321. data/test/unit/user_serializer_test.rb +1 -0
  322. data/test/unit/variable_definition_test.rb +4 -3
  323. metadata +61 -47
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -18,15 +19,15 @@ module Shipit
18
19
 
19
20
  test "#perform rejects unmergeable PRs and merge the others" do
20
21
  MergeRequest.any_instance.stubs(:refresh!)
21
- stub_request(:put, "#{@pending_pr.api_url}/merge").to_return(status: %w(200 OK), body: {
22
+ stub_request(:put, "#{@pending_pr.api_url}/merge").to_return(status: %w[200 OK], body: {
22
23
  sha: "6dcb09b5b57875f334f61aebed695e2e4193db5e",
23
24
  merged: true,
24
- message: "Pull Request successfully merged",
25
+ message: "Pull Request successfully merged"
25
26
  }.to_json)
26
27
  branch_url = "https://api.github.com/repos/shopify/shipit-engine/git/refs/heads/feature-62"
27
- stub_request(:delete, branch_url).to_return(status: %w(204 No content))
28
+ stub_request(:delete, branch_url).to_return(status: %w[204 No content])
28
29
  pulls_url = "https://api.github.com/repos/shopify/shipit-engine/pulls?base=feature-62"
29
- stub_request(:get, pulls_url).to_return(status: %w(200 OK), body: '[]')
30
+ stub_request(:get, pulls_url).to_return(status: %w[200 OK], body: '[]')
30
31
 
31
32
  @job.perform(@stack)
32
33
 
@@ -36,9 +37,9 @@ module Shipit
36
37
 
37
38
  test "#perform rejects PRs if the merge attempt fails" do
38
39
  MergeRequest.any_instance.stubs(:refresh!)
39
- stub_request(:put, "#{@pending_pr.api_url}/merge").to_return(status: %w(405 Method not allowed), body: {
40
+ stub_request(:put, "#{@pending_pr.api_url}/merge").to_return(status: %w[405 Method not allowed], body: {
40
41
  message: "Pull Request is not mergeable",
41
- documentation_url: "https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button",
42
+ documentation_url: "https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button"
42
43
  }.to_json)
43
44
 
44
45
  @job.perform(@stack)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ module Shipit
6
+ class BackgroundJobTest < ActiveSupport::TestCase
7
+ setup do
8
+ @stack = shipit_stacks(:shipit)
9
+ @last_commit = @stack.commits.last
10
+ @job = CacheDeploySpecJob.new
11
+ @user = shipit_users(:walrus)
12
+ end
13
+
14
+ test "#perform retries on Octokit secondary rate limit exceptions" do
15
+ freeze_time do
16
+ Octokit::Forbidden.any_instance.expects(:response_headers)
17
+ .returns({ "Retry-After" => 45 })
18
+
19
+ Shipit.github.api.expects(:user).with(@user.github_id).raises(Octokit::TooManyRequests)
20
+
21
+ assert_enqueued_with(job: BackgroundStubJob, at: Time.now + 45.seconds) do
22
+ BackgroundStubJob.perform_now(@user)
23
+ end
24
+ end
25
+ end
26
+
27
+ class BackgroundStubJob < BackgroundJob
28
+ queue_as :default
29
+
30
+ def perform(user)
31
+ Shipit.github.api.user(user.github_id)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ module Shipit
6
+ class ContinuousDeliveryJobTest < ActiveSupport::TestCase
7
+ test "calls trigger_continous_delivery" do
8
+ stack = shipit_stacks(:shipit)
9
+ stack.stubs(:continuous_deployment?).returns(true).once
10
+ stack.stubs(:occupied).returns(false).once
11
+ stack.expects(:trigger_continuous_delivery).once
12
+
13
+ Shipit::ContinuousDeliveryJob.new.perform(stack)
14
+ end
15
+
16
+ test "does not call trigger_continuous_delivery if outside of schedule" do
17
+ freeze_time do
18
+ monday_9am = Date.current.monday.at_beginning_of_day.advance(hours: 9)
19
+ travel_to(monday_9am)
20
+
21
+ stack = shipit_stacks(:shipit)
22
+ stack.create_continuous_delivery_schedule!(monday_start: "09:30")
23
+
24
+ stack.stubs(:continuous_deployment?).returns(true).once
25
+ stack.expects(:trigger_continuous_delivery).never
26
+
27
+ Shipit::ContinuousDeliveryJob.new.perform(stack)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -20,7 +21,8 @@ module Shipit
20
21
  test "the lock key is serialized" do
21
22
  task = shipit_tasks(:shipit_restart)
22
23
  job = ChunkRollupJob.new(task)
23
- key = %(Shipit::ChunkRollupJob-{"_aj_globalid"=>"gid://shipit/Shipit::Task/#{task.id}"})
24
+ args = { "_aj_globalid" => "gid://shipit/Shipit::Task/#{task.id}" }
25
+ key = %(Shipit::ChunkRollupJob-#{args})
24
26
  assert_equal key, job.lock_key(*job.arguments)
25
27
  end
26
28
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -14,8 +15,7 @@ module Shipit
14
15
  end
15
16
 
16
17
  def env_for_url(url)
17
- env = Rack::MockRequest.env_for(url)
18
- env
18
+ Rack::MockRequest.env_for(url)
19
19
  end
20
20
 
21
21
  def middleware
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
  require 'tmpdir'
4
5
 
@@ -71,7 +72,7 @@ module Shipit
71
72
  '',
72
73
  '$ echo review',
73
74
  'review',
74
- '',
75
+ ''
75
76
  ]
76
77
  assert_equal 'success', @checks.status
77
78
  assert_equal lines, @checks.output.lines.map(&:strip)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -15,10 +16,9 @@ module Shipit
15
16
  @author.github_api.class.any_instance.expects(:create_deployment_status).with(
16
17
  @deployment.api_url,
17
18
  'in_progress',
18
- accept: "application/vnd.github.flash-preview+json",
19
19
  target_url: "http://shipit.com/shopify/shipit-engine/production/deploys/#{@task.id}",
20
20
  description: "walrus triggered the deploy of shopify/shipit-engine/production to #{@deployment.short_sha}",
21
- environment_url: "https://shipit.shopify.com",
21
+ environment_url: "https://shipit.shopify.com"
22
22
  ).returns(response)
23
23
 
24
24
  @status.create_on_github!
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -23,9 +24,9 @@ module Shipit
23
24
  shipit: {
24
25
  task_id: 4,
25
26
  from_sha: 'f890fd8b5f2be05d1fedb763a3605ee461c39074',
26
- to_sha: '467578b362bf2b4df5903e1c7960929361c3435a',
27
- },
28
- }.to_json,
27
+ to_sha: '467578b362bf2b4df5903e1c7960929361c3435a'
28
+ }
29
+ }.to_json
29
30
  ).returns(deployment_response)
30
31
 
31
32
  @deployment.create_on_github!
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -11,9 +12,9 @@ module Shipit
11
12
  @commit = shipit_commits(:first)
12
13
 
13
14
  stub_request(:get, "https://api.github.com/user/emails").to_return(
14
- status: %w(200 OK),
15
+ status: %w[200 OK],
15
16
  body: {}.to_json,
16
- headers: { "Content-Type" => "application/json" },
17
+ headers: { "Content-Type" => "application/json" }
17
18
  )
18
19
  end
19
20
 
@@ -28,16 +29,16 @@ module Shipit
28
29
  author: {
29
30
  name: 'George Abitbol',
30
31
  email: '',
31
- date: Time.now,
32
+ date: Time.now
32
33
  },
33
34
  committer: {
34
35
  name: 'George Abitbol',
35
36
  email: '',
36
- date: Time.now,
37
+ date: Time.now
37
38
  },
38
- message: "commit to trigger staging build",
39
- },
40
- ),
39
+ message: "commit to trigger staging build"
40
+ }
41
+ )
41
42
  )
42
43
  end
43
44
  end
@@ -53,16 +54,16 @@ module Shipit
53
54
  author: {
54
55
  name: 'Lando Walrussian',
55
56
  email: 'walrus@shopify.com',
56
- date: Time.now,
57
+ date: Time.now
57
58
  },
58
59
  committer: {
59
60
  name: 'Lando Walrussian',
60
61
  email: 'walrus@shopify.com',
61
- date: Time.now,
62
+ date: Time.now
62
63
  },
63
- message: '',
64
- },
65
- ),
64
+ message: ''
65
+ }
66
+ )
66
67
  )
67
68
  end
68
69
  commit = Commit.last
@@ -82,16 +83,16 @@ module Shipit
82
83
  author: {
83
84
  name: 'Lando Walrussian',
84
85
  email: 'walrus@shopify.com',
85
- date: Time.now,
86
+ date: Time.now
86
87
  },
87
88
  committer: {
88
89
  name: 'Lando Walrussian',
89
90
  email: 'walrus@shopify.com',
90
- date: Time.now,
91
+ date: Time.now
91
92
  },
92
- message: message,
93
- },
94
- ),
93
+ message:
94
+ }
95
+ )
95
96
  )
96
97
  end
97
98
 
@@ -113,16 +114,16 @@ module Shipit
113
114
  author: {
114
115
  name: 'Shipit',
115
116
  email: '',
116
- date: Time.now,
117
+ date: Time.now
117
118
  },
118
119
  committer: {
119
120
  name: 'Shipit',
120
121
  email: '',
121
- date: Time.now,
122
+ date: Time.now
122
123
  },
123
- message: "commit to trigger staging build\n\nMerge-Requested-By: walrus\n",
124
- },
125
- ),
124
+ message: "commit to trigger staging build\n\nMerge-Requested-By: walrus\n"
125
+ }
126
+ )
126
127
  )
127
128
  end
128
129
 
@@ -141,20 +142,20 @@ module Shipit
141
142
  author: {
142
143
  name: 'Shipit',
143
144
  email: '',
144
- date: Time.now,
145
+ date: Time.now
145
146
  },
146
147
  committer: {
147
148
  name: 'Shipit',
148
149
  email: '',
149
- date: Time.now,
150
+ date: Time.now
150
151
  },
151
- message: "Merge pull request #62 from shipit-engine/yoloshipit\n\nyoloshipit!",
152
+ message: "Merge pull request #62 from shipit-engine/yoloshipit\n\nyoloshipit!"
152
153
  },
153
154
  parents: [
154
155
  { sha: "1864542e3d2f8a41916a2dec0f2b4d3c1bf4899b", url: '', html_url: '' },
155
- { sha: "63d7e03e517fd2ae1caeb1b7a9f21767f84d671a", url: '', html_url: '' },
156
- ],
157
- ),
156
+ { sha: "63d7e03e517fd2ae1caeb1b7a9f21767f84d671a", url: '', html_url: '' }
157
+ ]
158
+ )
158
159
  )
159
160
  end
160
161
 
@@ -270,14 +271,14 @@ module Shipit
270
271
  author: walrus,
271
272
  committer: walrus,
272
273
  authored_at: Time.now,
273
- committed_at: Time.now,
274
+ committed_at: Time.now
274
275
  )
275
276
 
276
277
  deploy = @stack.deploys.build(
277
278
  user_id: walrus.id,
278
279
  since_commit: @stack.commits.first,
279
280
  until_commit: new_commit,
280
- status: 'success',
281
+ status: 'success'
281
282
  )
282
283
  deploy.stubs(:pull_request_head_for_commit).returns(nil)
283
284
  deploy.save!
@@ -321,7 +322,7 @@ module Shipit
321
322
  sha: "ab12",
322
323
  authored_at: Time.now,
323
324
  committed_at: Time.now,
324
- message: "more fish!",
325
+ message: "more fish!"
325
326
  )
326
327
  end
327
328
 
@@ -331,7 +332,7 @@ module Shipit
331
332
  description: nil,
332
333
  context: 'default',
333
334
  target_url: 'http://example.com',
334
- created_at: 1.day.ago,
335
+ created_at: 1.day.ago
335
336
  )
336
337
  Shipit.github.api.expects(:statuses).with(@stack.github_repo_name, @commit.sha, per_page: 100).returns([status])
337
338
  assert_difference '@commit.statuses.count', 1 do
@@ -348,15 +349,16 @@ module Shipit
348
349
  details_url: 'https://example.com/details',
349
350
  html_url: 'https://example.com/run',
350
351
  output: mock(
351
- title: 'Tests build ran successfully',
352
+ title: 'Tests build ran successfully'
352
353
  ),
353
354
  completed_at: Time.now,
354
- started_at: Time.now - 1.minute,
355
- )
356
- response = mock(
357
- check_runs: [check_run],
355
+ started_at: Time.now - 1.minute
358
356
  )
359
- Shipit.github.api.expects(:check_runs).with(@stack.github_repo_name, @commit.sha).returns(response)
357
+ response = stub(rels: {}, data: mock(
358
+ check_runs: [check_run]
359
+ ))
360
+ Shipit.github.api.expects(:check_runs).with(@stack.github_repo_name, @commit.sha, per_page: 100).returns(response.data)
361
+ Shipit.github.api.expects(:last_response).returns(response)
360
362
 
361
363
  assert_difference -> { @commit.check_runs.count }, 1 do
362
364
  @commit.refresh_check_runs!
@@ -374,7 +376,7 @@ module Shipit
374
376
  sha: "ab12",
375
377
  authored_at: Time.now,
376
378
  committed_at: Time.now,
377
- message: "more fish!",
379
+ message: "more fish!"
378
380
  )
379
381
  @stack.reload
380
382
  assert_equal 3, @stack.undeployed_commits_count
@@ -415,7 +417,7 @@ module Shipit
415
417
  sha: "ab12",
416
418
  authored_at: Time.now,
417
419
  committed_at: Time.now,
418
- message: "more fish!",
420
+ message: "more fish!"
419
421
  )
420
422
  stack.reload
421
423
  assert_nil stack.last_deployed_at
@@ -455,9 +457,9 @@ module Shipit
455
457
  assert_equal 'failure', @commit.reload.state
456
458
 
457
459
  @commit.stack.update!(cached_deploy_spec: DeploySpec.new('ci' => {
458
- 'hide' => 'metrics/coveralls',
459
- 'allow_failures' => 'metrics/performance',
460
- }))
460
+ 'hide' => 'metrics/coveralls',
461
+ 'allow_failures' => 'metrics/performance'
462
+ }))
461
463
  assert_equal 'pending', @commit.reload.state
462
464
  end
463
465
 
@@ -473,9 +475,9 @@ module Shipit
473
475
  assert_predicate commit.status, :group?
474
476
  assert_equal 3, commit.status.size
475
477
  commit.stack.update!(cached_deploy_spec: DeploySpec.new('ci' => { 'hide' => [
476
- 'Travis CI',
477
- 'metrics/coveralls',
478
- ] }))
478
+ 'Travis CI',
479
+ 'metrics/coveralls'
480
+ ] }))
479
481
  commit.reload
480
482
  refute_predicate commit.status, :group?
481
483
  end
@@ -502,7 +504,7 @@ module Shipit
502
504
 
503
505
  test "#deployable? is false if a required status is missing" do
504
506
  commit = shipit_commits(:cyclimse_first)
505
- commit.stack.stubs(:required_statuses).returns(%w(ci/very-important))
507
+ commit.stack.stubs(:required_statuses).returns(%w[ci/very-important])
506
508
  refute_predicate commit, :deployable?
507
509
  end
508
510
 
@@ -598,15 +600,15 @@ module Shipit
598
600
  end
599
601
 
600
602
  expected_webhook_transitions = { # we expect deployable_status to fire on these transitions, and not on any others
601
- 'unknown' => %w(pending success failure error),
602
- 'pending' => %w(success failure error),
603
- 'success' => %w(failure error),
604
- 'failure' => %w(success),
605
- 'error' => %w(success),
603
+ 'unknown' => %w[pending success failure error],
604
+ 'pending' => %w[success failure error],
605
+ 'success' => %w[failure error],
606
+ 'failure' => %w[success],
607
+ 'error' => %w[success]
606
608
  }
607
609
  expected_webhook_transitions.each do |initial_state, firing_states|
608
610
  initial_status_attributes = { state: initial_state, description: 'abc', context: 'ci/travis' }
609
- (expected_webhook_transitions.keys - %w(unknown)).each do |new_state|
611
+ (expected_webhook_transitions.keys - %w[unknown]).each do |new_state|
610
612
  should_fire = firing_states.include?(new_state)
611
613
  action = should_fire ? 'fires' : 'does not fire'
612
614
  test "#add_status #{action} for status from #{initial_state} to #{new_state}" do
@@ -618,7 +620,7 @@ module Shipit
618
620
  unless initial_state == 'unknown'
619
621
  attrs = initial_status_attributes.merge(
620
622
  stack_id: commit.stack_id,
621
- created_at: 10.days.ago.to_formatted_s(:db),
623
+ created_at: 10.days.ago.to_formatted_s(:db)
622
624
  )
623
625
  commit.statuses.create!(attrs)
624
626
  end
@@ -651,7 +653,7 @@ module Shipit
651
653
  state: 'failure',
652
654
  description: 'Sad',
653
655
  context: 'ci/hidden',
654
- created_at: 1.day.ago.to_formatted_s(:db),
656
+ created_at: 1.day.ago.to_formatted_s(:db)
655
657
  )
656
658
  commit.create_status_from_github!(github_status)
657
659
  end
@@ -668,7 +670,7 @@ module Shipit
668
670
  state: 'failure',
669
671
  description: 'Sad',
670
672
  context: 'ci/ok_to_fail',
671
- created_at: 1.day.ago.to_formatted_s(:db),
673
+ created_at: 1.day.ago.to_formatted_s(:db)
672
674
  )
673
675
  commit.create_status_from_github!(github_status)
674
676
  end
@@ -683,7 +685,7 @@ module Shipit
683
685
  state: 'failure',
684
686
  description: 'Sad',
685
687
  context: 'ci/travis',
686
- created_at: 1.day.ago.to_formatted_s(:db),
688
+ created_at: 1.day.ago.to_formatted_s(:db)
687
689
  )
688
690
  commit.create_status_from_github!(github_status)
689
691
  end
@@ -695,7 +697,7 @@ module Shipit
695
697
  state: 'success',
696
698
  description: 'Cool',
697
699
  context: 'metrics/coveralls',
698
- created_at: 1.day.ago.to_formatted_s(:db),
700
+ created_at: 1.day.ago.to_formatted_s(:db)
699
701
  )
700
702
 
701
703
  assert_equal 'failure', commit.state
@@ -738,7 +740,7 @@ module Shipit
738
740
  committer: shipit_users(:shipit),
739
741
  committed_at: Time.now,
740
742
  sha: '5590fd8b5f2be05d1fedb763a3605ee461c39074',
741
- message: "Merge pull request #62 from shipit-engine/yoloshipit\n\nyoloshipit!",
743
+ message: "Merge pull request #62 from shipit-engine/yoloshipit\n\nyoloshipit!"
742
744
  )
743
745
  merge_request = shipit_merge_requests(:shipit_pending)
744
746
 
@@ -755,7 +757,7 @@ module Shipit
755
757
  committer: shipit_users(:shipit),
756
758
  committed_at: Time.now,
757
759
  sha: '5590fd8b5f2be05d1fedb763a3605ee461c39074',
758
- message: "Merge pull request #99 from shipit-engine/yoloshipit\n\nyoloshipit!",
760
+ message: "Merge pull request #99 from shipit-engine/yoloshipit\n\nyoloshipit!"
759
761
  )
760
762
 
761
763
  assert_predicate commit, :pull_request?
@@ -771,7 +773,7 @@ module Shipit
771
773
  committer: shipit_users(:shipit),
772
774
  committed_at: Time.now,
773
775
  sha: '5590fd8b5f2be05d1fedb763a3605ee461c39074',
774
- message: "Merge pull request #62 from shipit-engine/yoloshipit\n\nyoloshipit!",
776
+ message: "Merge pull request #62 from shipit-engine/yoloshipit\n\nyoloshipit!"
775
777
  )
776
778
 
777
779
  assert_equal shipit_users(:walrus), commit.author
@@ -784,7 +786,7 @@ module Shipit
784
786
  committer: shipit_users(:shipit),
785
787
  committed_at: Time.now,
786
788
  sha: '5590fd8b5f2be05d1fedb763a3605ee461c39074',
787
- message: "Yoloshipit!",
789
+ message: "Yoloshipit!"
788
790
  )
789
791
 
790
792
  refute_predicate commit, :pull_request?
@@ -800,44 +802,44 @@ module Shipit
800
802
 
801
803
  test "#revert? returns true for commits reverted by GitHub" do
802
804
  commit = Commit.new(
803
- message: "Merge pull request #17 from Shopify/revert-16\n\nRevert \"Create README.md\"",
805
+ message: "Merge pull request #17 from Shopify/revert-16\n\nRevert \"Create README.md\""
804
806
  )
805
807
  assert_predicate commit, :revert?
806
808
  end
807
809
 
808
810
  test "#revert? returns true for commits reverted from CLI" do
809
811
  commit = Commit.new(
810
- message: "Revert \"Super Feature\"\n\nThis reverts commit 49430d5091abc34f2c576c23ebf369ec7094d8aa.",
812
+ message: "Revert \"Super Feature\"\n\nThis reverts commit 49430d5091abc34f2c576c23ebf369ec7094d8aa."
811
813
  )
812
814
  assert_predicate commit, :revert?
813
815
  end
814
816
 
815
817
  test "#revert_of? works with pull requests reverted on GitHub" do
816
818
  commit = Commit.new(
817
- message: "Merge pull request #16 from byroot/casperisfine-patch-1\n\nCreate README.md",
819
+ message: "Merge pull request #16 from byroot/casperisfine-patch-1\n\nCreate README.md"
818
820
  )
819
821
  revert = Commit.new(
820
- message: "Merge pull request #17 from Shopify/revert-16\n\nRevert \"Create README.md\"",
822
+ message: "Merge pull request #17 from Shopify/revert-16\n\nRevert \"Create README.md\""
821
823
  )
822
824
  assert revert.revert_of?(commit)
823
825
  end
824
826
 
825
827
  test "#revert_of? works with commits reverted from CLI" do
826
828
  commit = Commit.new(
827
- message: "Create README.md",
829
+ message: "Create README.md"
828
830
  )
829
831
  revert = Commit.new(
830
- message: "Revert \"Create README.md\"\n\nThis reverts commit 49430d5091abc34f2c576c23ebf369ec7094d8aa.",
832
+ message: "Revert \"Create README.md\"\n\nThis reverts commit 49430d5091abc34f2c576c23ebf369ec7094d8aa."
831
833
  )
832
834
  assert revert.revert_of?(commit)
833
835
  end
834
836
 
835
837
  test "#revert_of? works with pull requests reverted from CLI" do
836
838
  commit = Commit.new(
837
- message: "Merge pull request #19 from byroot/casperisfine-patch-1\n\nUpdate README.md",
839
+ message: "Merge pull request #19 from byroot/casperisfine-patch-1\n\nUpdate README.md"
838
840
  )
839
841
  revert = Commit.new(
840
- message: "Revert \"Merge pull request #19 from byroot/casperisfine-patch-1\"\n\nThis reverts commit fa3722ef8372b47160f5d96010d3c54743d192f9, reversing\nchanges made to 868b6f65f759d003c04d056f2f928f18d6813c7e.",
842
+ message: "Revert \"Merge pull request #19 from byroot/casperisfine-patch-1\"\n\nThis reverts commit fa3722ef8372b47160f5d96010d3c54743d192f9, reversing\nchanges made to 868b6f65f759d003c04d056f2f928f18d6813c7e."
841
843
  )
842
844
  assert revert.revert_of?(commit)
843
845
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -13,7 +14,7 @@ module Shipit
13
14
  event: 'deploy',
14
15
  url: 'http://example.com',
15
16
  content_type: 'application/json',
16
- payload: '{}',
17
+ payload: '{}'
17
18
  )
18
19
  assert_equal 'pending', delivery.status
19
20
 
@@ -25,7 +26,7 @@ module Shipit
25
26
 
26
27
  test "#send! post the payload and update the status to `sent`" do
27
28
  headers = { 'content-type' => 'text/plain', 'content-length' => '2' }
28
- stub_request(:post, @delivery.url).to_return(headers: headers, body: 'OK')
29
+ stub_request(:post, @delivery.url).to_return(headers:, body: 'OK')
29
30
 
30
31
  assert_equal 'scheduled', @delivery.status
31
32
  @delivery.send!