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,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
5
6
  class DeploySpecTest < ActiveSupport::TestCase
6
7
  setup do
7
8
  @app_dir = '/tmp/'
8
- @spec = DeploySpec::FileSystem.new(@app_dir, 'env')
9
+ @stack = shipit_stacks(:shipit)
10
+ @spec = DeploySpec::FileSystem.new(@app_dir, @stack)
9
11
  @spec.stubs(:load_config).returns({})
10
12
  end
11
13
 
@@ -33,8 +35,8 @@ module Shipit
33
35
  end
34
36
 
35
37
  test '#dependencies_steps returns `dependencies.override` if present' do
36
- @spec.stubs(:load_config).returns('dependencies' => { 'override' => %w(foo bar baz) })
37
- assert_equal %w(foo bar baz), @spec.dependencies_steps
38
+ @spec.stubs(:load_config).returns('dependencies' => { 'override' => %w[foo bar baz] })
39
+ assert_equal %w[foo bar baz], @spec.dependencies_steps
38
40
  end
39
41
 
40
42
  test '#dependencies_steps returns `bundle install` if a `Gemfile` is present' do
@@ -76,7 +78,7 @@ module Shipit
76
78
 
77
79
  test '#bundle_install use `dependencies.bundler.without` if present to build the --without argument' do
78
80
  @spec.stubs(:gemfile_lock_exists?).returns(true)
79
- @spec.stubs(:load_config).returns('dependencies' => { 'bundler' => { 'without' => %w(some custom groups) } })
81
+ @spec.stubs(:load_config).returns('dependencies' => { 'bundler' => { 'without' => %w[some custom groups] } })
80
82
  command = %(
81
83
  bundle install
82
84
  --frozen
@@ -89,13 +91,13 @@ module Shipit
89
91
  end
90
92
 
91
93
  test '#bundle_install has --frozen option if Gemfile.lock is present' do
92
- @spec.stubs(:load_config).returns('dependencies' => { 'bundler' => { 'without' => %w(some custom groups) } })
94
+ @spec.stubs(:load_config).returns('dependencies' => { 'bundler' => { 'without' => %w[some custom groups] } })
93
95
  @spec.stubs(:gemfile_lock_exists?).returns(true)
94
96
  assert @spec.bundle_install.last.include?('--frozen')
95
97
  end
96
98
 
97
99
  test '#bundle_install does not have --frozen option if Gemfile.lock is not present' do
98
- @spec.stubs(:load_config).returns('dependencies' => { 'bundler' => { 'without' => %w(some custom groups) } })
100
+ @spec.stubs(:load_config).returns('dependencies' => { 'bundler' => { 'without' => %w[some custom groups] } })
99
101
  @spec.stubs(:gemfile_lock_exists?).returns(false)
100
102
  refute @spec.bundle_install.last.include?('--frozen')
101
103
  end
@@ -113,8 +115,8 @@ module Shipit
113
115
  end
114
116
 
115
117
  test '#deploy_steps returns `deploy.override` if present' do
116
- @spec.stubs(:load_config).returns('deploy' => { 'override' => %w(foo bar baz) })
117
- assert_equal %w(foo bar baz), @spec.deploy_steps
118
+ @spec.stubs(:load_config).returns('deploy' => { 'override' => %w[foo bar baz] })
119
+ assert_equal %w[foo bar baz], @spec.deploy_steps
118
120
  end
119
121
 
120
122
  test '#deploy_steps returns `cap $ENVIRONMENT deploy` if a `Capfile` is present' do
@@ -127,8 +129,8 @@ module Shipit
127
129
  @spec.stubs(:load_config).returns(
128
130
  'kubernetes' => {
129
131
  'namespace' => 'foo',
130
- 'context' => 'bar',
131
- },
132
+ 'context' => 'bar'
133
+ }
132
134
  )
133
135
  assert_equal ["kubernetes-deploy --max-watch-seconds 900 foo bar"], @spec.deploy_steps
134
136
  end
@@ -138,8 +140,8 @@ module Shipit
138
140
  'kubernetes' => {
139
141
  'namespace' => 'foo',
140
142
  'context' => 'bar',
141
- 'timeout' => false,
142
- },
143
+ 'timeout' => false
144
+ }
143
145
  )
144
146
  assert_equal ["kubernetes-deploy foo bar"], @spec.deploy_steps
145
147
  end
@@ -150,8 +152,8 @@ module Shipit
150
152
  @spec.stubs(:load_config).returns(
151
153
  'kubernetes' => {
152
154
  'namespace' => 'foo',
153
- 'context' => 'bar',
154
- },
155
+ 'context' => 'bar'
156
+ }
155
157
  )
156
158
  assert_equal ["kubernetes-deploy --max-watch-seconds 900 foo bar"], @spec.deploy_steps
157
159
  end
@@ -161,8 +163,8 @@ module Shipit
161
163
  'kubernetes' => {
162
164
  'namespace' => 'foo',
163
165
  'context' => 'bar',
164
- 'template_dir' => 'k8s_templates/',
165
- },
166
+ 'template_dir' => 'k8s_templates/'
167
+ }
166
168
  )
167
169
  assert_equal ["kubernetes-deploy --max-watch-seconds 900 --template-dir k8s_templates/ foo bar"], @spec.deploy_steps
168
170
  end
@@ -192,8 +194,8 @@ module Shipit
192
194
  end
193
195
 
194
196
  test '#rollback_steps returns `rollback.override` if present' do
195
- @spec.stubs(:load_config).returns('rollback' => { 'override' => %w(foo bar baz) })
196
- assert_equal %w(foo bar baz), @spec.rollback_steps
197
+ @spec.stubs(:load_config).returns('rollback' => { 'override' => %w[foo bar baz] })
198
+ assert_equal %w[foo bar baz], @spec.rollback_steps
197
199
  end
198
200
 
199
201
  test '#retries_on_rollback returns `rollback.retries` if present' do
@@ -223,8 +225,8 @@ module Shipit
223
225
  @spec.stubs(:load_config).returns(
224
226
  'kubernetes' => {
225
227
  'namespace' => 'foo',
226
- 'context' => 'bar',
227
- },
228
+ 'context' => 'bar'
229
+ }
228
230
  )
229
231
  assert_equal ["kubernetes-deploy --max-watch-seconds 900 foo bar"], @spec.rollback_steps
230
232
  end
@@ -235,8 +237,8 @@ module Shipit
235
237
  @spec.stubs(:load_config).returns(
236
238
  'kubernetes' => {
237
239
  'namespace' => 'foo',
238
- 'context' => 'bar',
239
- },
240
+ 'context' => 'bar'
241
+ }
240
242
  )
241
243
  assert_equal ["kubernetes-deploy --max-watch-seconds 900 foo bar"], @spec.rollback_steps
242
244
  end
@@ -245,15 +247,15 @@ module Shipit
245
247
  @spec.stubs(:load_config).returns(
246
248
  'kubernetes' => {
247
249
  'namespace' => 'foo',
248
- 'context' => 'bar',
249
- },
250
+ 'context' => 'bar'
251
+ }
250
252
  )
251
253
  tasks = {
252
254
  'restart' => {
253
255
  'action' => 'Restart application',
254
256
  'description' => 'Simulates a rollout of Kubernetes deployments by using kubernetes-restart utility',
255
- 'steps' => ['kubernetes-restart foo bar --max-watch-seconds 900'],
256
- },
257
+ 'steps' => ['kubernetes-restart foo bar --max-watch-seconds 900']
258
+ }
257
259
  }
258
260
  assert_equal tasks, @spec.discover_task_definitions
259
261
  end
@@ -263,20 +265,20 @@ module Shipit
263
265
  'restart' => {
264
266
  'action' => 'Restart application',
265
267
  'description' => 'Simulates a rollout of Kubernetes deployments by using kubernetes-restart utility',
266
- 'steps' => ['kubernetes-restart something custom'],
268
+ 'steps' => ['kubernetes-restart something custom']
267
269
  },
268
270
  'some-other-tasj' => {
269
271
  'action' => 'Do something else',
270
272
  'description' => 'Eat some chips!',
271
- 'steps' => ['echo chips'],
272
- },
273
+ 'steps' => ['echo chips']
274
+ }
273
275
  }
274
276
  @spec.stubs(:load_config).returns(
275
277
  'kubernetes' => {
276
278
  'namespace' => 'foo',
277
- 'context' => 'bar',
279
+ 'context' => 'bar'
278
280
  },
279
- 'tasks' => tasks,
281
+ 'tasks' => tasks
280
282
  )
281
283
  assert_equal tasks, @spec.discover_task_definitions
282
284
  end
@@ -287,7 +289,7 @@ module Shipit
287
289
  end
288
290
 
289
291
  test '#gemspec gives the path of the repo gemspec if present' do
290
- spec = DeploySpec::FileSystem.new('foobar/', 'production')
292
+ spec = DeploySpec::FileSystem.new('foobar/', @stack)
291
293
  Dir.expects(:[]).with('foobar/*.gemspec').returns(['foobar/foobar.gemspec'])
292
294
  assert_equal 'foobar/foobar.gemspec', spec.gemspec
293
295
  end
@@ -309,7 +311,7 @@ module Shipit
309
311
  end
310
312
 
311
313
  test '#setup_dot_py gives the path of the repo setup.py if present' do
312
- spec = DeploySpec::FileSystem.new('foobar/', 'production')
314
+ spec = DeploySpec::FileSystem.new('foobar/', @stack)
313
315
  assert_equal Pathname.new('foobar/setup.py'), spec.setup_dot_py
314
316
  end
315
317
 
@@ -330,7 +332,7 @@ module Shipit
330
332
  steps = [
331
333
  'assert-egg-version-tag /tmp/fake_setup.py',
332
334
  'python setup.py register sdist',
333
- 'twine upload dist/*',
335
+ 'twine upload dist/*'
334
336
  ]
335
337
  assert_equal steps, @spec.deploy_steps
336
338
  end
@@ -346,43 +348,43 @@ module Shipit
346
348
  'method' => nil,
347
349
  'max_divergence' => {
348
350
  'commits' => nil,
349
- 'age' => nil,
350
- },
351
+ 'age' => nil
352
+ }
351
353
  },
352
354
  'ci' => {
353
355
  'hide' => [],
354
356
  'allow_failures' => [],
355
357
  'require' => [],
356
- 'blocking' => [],
358
+ 'blocking' => []
357
359
  },
358
360
  'machine' => {
359
361
  'environment' => { 'BUNDLE_PATH' => @spec.bundle_path.to_s },
360
362
  'directory' => nil,
361
- 'cleanup' => true,
363
+ 'cleanup' => true
362
364
  },
363
365
  'review' => { 'checklist' => [], 'monitoring' => [], 'checks' => [] },
364
366
  'status' => {
365
367
  'context' => nil,
366
- 'delay' => 0,
368
+ 'delay' => 0
367
369
  },
368
370
  'dependencies' => { 'override' => [] },
369
371
  'plugins' => {},
370
372
  'provision' => {
371
- 'handler_name' => nil,
373
+ 'handler_name' => nil
372
374
  },
373
375
  'deploy' => {
374
376
  'override' => nil,
375
377
  'variables' => [],
376
378
  'max_commits' => 8,
377
379
  'interval' => 0,
378
- 'retries' => nil,
380
+ 'retries' => nil
379
381
  },
380
382
  'rollback' => {
381
383
  'override' => nil,
382
- 'retries' => nil,
384
+ 'retries' => nil
383
385
  },
384
386
  'fetch' => nil,
385
- 'tasks' => {},
387
+ 'tasks' => {}
386
388
  }
387
389
  assert_equal config, @spec.cacheable.config
388
390
  end
@@ -393,10 +395,10 @@ module Shipit
393
395
 
394
396
  test "#deploy_variables returns an array of VariableDefinition instances" do
395
397
  @spec.stubs(:load_config).returns('deploy' => { 'variables' => [{
396
- 'name' => 'SAFETY_DISABLED',
397
- 'title' => 'Set to 1 to do dangerous things',
398
- 'default' => 0,
399
- }] })
398
+ 'name' => 'SAFETY_DISABLED',
399
+ 'title' => 'Set to 1 to do dangerous things',
400
+ 'default' => 0
401
+ }] })
400
402
 
401
403
  assert_equal 1, @spec.deploy_variables.size
402
404
  variable_definition = @spec.deploy_variables.first
@@ -404,13 +406,13 @@ module Shipit
404
406
  end
405
407
 
406
408
  test "task definitions don't prepend bundle exec by default" do
407
- @spec.expects(:load_config).returns('tasks' => { 'restart' => { 'steps' => %w(foo) } })
409
+ @spec.expects(:load_config).returns('tasks' => { 'restart' => { 'steps' => %w[foo] } })
408
410
  definition = @spec.find_task_definition('restart')
409
411
  assert_equal ['foo'], definition.steps
410
412
  end
411
413
 
412
414
  test "task definitions don't bundle exec before serialization" do
413
- @spec.expects(:discover_task_definitions).returns('restart' => { 'steps' => %w(foo) })
415
+ @spec.expects(:discover_task_definitions).returns('restart' => { 'steps' => %w[foo] })
414
416
  @spec.expects(:bundler?).returns(true).at_least_once
415
417
 
416
418
  cached_spec = DeploySpec.load(DeploySpec.dump(@spec))
@@ -429,7 +431,7 @@ module Shipit
429
431
  module TestTaskDiscovery
430
432
  def discover_task_definitions
431
433
  {
432
- 'config_task' => { 'steps' => %w(bar) },
434
+ 'config_task' => { 'steps' => %w[bar] }
433
435
  }.merge!(super)
434
436
  end
435
437
  end
@@ -438,14 +440,15 @@ module Shipit
438
440
  DuplicateCustomizedDeploySpec.include(TestTaskDiscovery)
439
441
 
440
442
  # Setup the spec as we would normally, but use the customized version
441
- @spec = DuplicateCustomizedDeploySpec.new(@app_dir, 'env')
443
+ stack = shipit_stacks(:shipit)
444
+ @spec = DuplicateCustomizedDeploySpec.new(@app_dir, stack)
442
445
  @spec.stubs(:load_config).returns(
443
- 'tasks' => { 'config_task' => { 'steps' => %w(foo) } },
446
+ 'tasks' => { 'config_task' => { 'steps' => %w[foo] } }
444
447
  )
445
448
  tasks = @spec.task_definitions
446
449
 
447
450
  # Assert we get only the task from the config, not from the module
448
- assert_equal %w(config_task), tasks.map(&:id)
451
+ assert_equal %w[config_task], tasks.map(&:id)
449
452
  assert_equal ["foo"], tasks.first.steps
450
453
  end
451
454
 
@@ -459,7 +462,7 @@ module Shipit
459
462
  module TestTaskDiscovery
460
463
  def discover_task_definitions
461
464
  {
462
- 'module_task' => { 'steps' => %w(bar) },
465
+ 'module_task' => { 'steps' => %w[bar] }
463
466
  }.merge(super)
464
467
  end
465
468
  end
@@ -468,20 +471,21 @@ module Shipit
468
471
  CustomizedDeploySpec.include(TestTaskDiscovery)
469
472
 
470
473
  # Setup the spec as we would normally, but use the customized version
471
- @spec = CustomizedDeploySpec.new(@app_dir, 'env')
474
+ stack = shipit_stacks(:shipit)
475
+ @spec = CustomizedDeploySpec.new(@app_dir, stack)
472
476
  @spec.stubs(:load_config).returns(
473
- 'tasks' => { 'config_task' => { 'steps' => %w(foo) } },
477
+ 'tasks' => { 'config_task' => { 'steps' => %w[foo] } },
474
478
  'kubernetes' => {
475
479
  'namespace' => 'foo',
476
480
  'context' => 'bar',
477
- 'timeout' => '20m',
478
- },
481
+ 'timeout' => '20m'
482
+ }
479
483
  )
480
484
  tasks = @spec.task_definitions
481
485
 
482
486
  # Assert we get tasks from all three sources: config, shipit-engine defined modules, and
483
487
  # "third party" modules
484
- assert_equal %w(config_task module_task restart), tasks.map(&:id).sort
488
+ assert_equal %w[config_task module_task restart], tasks.map(&:id).sort
485
489
 
486
490
  module_task = tasks.find { |t| t.id == "config_task" }
487
491
  assert_equal ["foo"], module_task.steps
@@ -501,15 +505,15 @@ module Shipit
501
505
  {
502
506
  'name' => 'SAFETY_DISABLED',
503
507
  'title' => 'Set to 1 to do dangerous things',
504
- 'default' => 0,
508
+ 'default' => 0
505
509
  },
506
510
  {
507
511
  'name' => 'FOO',
508
512
  'title' => 'Set to 0 to foo',
509
- 'default' => 1,
510
- },
513
+ 'default' => 1
514
+ }
511
515
  ],
512
- 'steps' => %w(foo),
516
+ 'steps' => %w[foo]
513
517
  } })
514
518
 
515
519
  assert_equal 2, @spec.task_definitions.first.variables.size
@@ -522,8 +526,8 @@ module Shipit
522
526
  end
523
527
 
524
528
  test "#review_checklist returns an array" do
525
- @spec.expects(:load_config).returns('review' => { 'checklist' => %w(foo bar) })
526
- assert_equal %w(foo bar), @spec.review_checklist
529
+ @spec.expects(:load_config).returns('review' => { 'checklist' => %w[foo bar] })
530
+ assert_equal %w[foo bar], @spec.review_checklist
527
531
  end
528
532
 
529
533
  test "#review_checklist returns an empty array if the section is missing" do
@@ -532,12 +536,12 @@ module Shipit
532
536
 
533
537
  test "#review_monitoring returns an array of hashes" do
534
538
  @spec.expects(:load_config).returns('review' => { 'monitoring' => [
535
- { 'image' => 'http://example.com/foo.png', 'width' => 200, 'height' => 400 },
536
- { 'iframe' => 'http://example.com/', 'width' => 200, 'height' => 400 },
537
- ] })
539
+ { 'image' => 'http://example.com/foo.png', 'width' => 200, 'height' => 400 },
540
+ { 'iframe' => 'http://example.com/', 'width' => 200, 'height' => 400 }
541
+ ] })
538
542
  assert_equal [
539
543
  { 'image' => 'http://example.com/foo.png', 'width' => 200, 'height' => 400 },
540
- { 'iframe' => 'http://example.com/', 'width' => 200, 'height' => 400 },
544
+ { 'iframe' => 'http://example.com/', 'width' => 200, 'height' => 400 }
541
545
  ], @spec.review_monitoring
542
546
  end
543
547
 
@@ -551,22 +555,22 @@ module Shipit
551
555
 
552
556
  test "#hidden_statuses is an array even if the value is a string" do
553
557
  @spec.expects(:load_config).returns('ci' => { 'hide' => 'ci/circleci' })
554
- assert_equal %w(ci/circleci), @spec.hidden_statuses
558
+ assert_equal %w[ci/circleci], @spec.hidden_statuses
555
559
  end
556
560
 
557
561
  test "#hidden_statuses is an array even if the value is present" do
558
- @spec.expects(:load_config).returns('ci' => { 'hide' => %w(ci/circleci ci/jenkins) })
559
- assert_equal %w(ci/circleci ci/jenkins), @spec.hidden_statuses
562
+ @spec.expects(:load_config).returns('ci' => { 'hide' => %w[ci/circleci ci/jenkins] })
563
+ assert_equal %w[ci/circleci ci/jenkins], @spec.hidden_statuses
560
564
  end
561
565
 
562
566
  test "#required_statuses automatically includes #blocking_statuses" do
563
567
  @spec.expects(:load_config).returns(
564
568
  'ci' => {
565
- 'require' => %w(ci/circleci),
566
- 'blocking' => %w(soc/compliance),
567
- },
569
+ 'require' => %w[ci/circleci],
570
+ 'blocking' => %w[soc/compliance]
571
+ }
568
572
  )
569
- assert_equal %w(ci/circleci soc/compliance), @spec.required_statuses
573
+ assert_equal %w[ci/circleci soc/compliance], @spec.required_statuses
570
574
  end
571
575
 
572
576
  test "merge_request_merge_method defaults to `nil`" do
@@ -577,8 +581,8 @@ module Shipit
577
581
  test "merge_request_merge_method returns `merge.method`" do
578
582
  @spec.expects(:load_config).returns(
579
583
  'merge' => {
580
- 'method' => 'squash',
581
- },
584
+ 'method' => 'squash'
585
+ }
582
586
  )
583
587
  assert_equal 'squash', @spec.merge_request_merge_method
584
588
  end
@@ -586,8 +590,8 @@ module Shipit
586
590
  test "merge_request_merge_method returns `nil` if `merge.method` is invalid" do
587
591
  @spec.expects(:load_config).returns(
588
592
  'merge' => {
589
- 'method' => 'squashing',
590
- },
593
+ 'method' => 'squashing'
594
+ }
591
595
  )
592
596
  assert_nil @spec.merge_request_merge_method
593
597
  end
@@ -595,22 +599,22 @@ module Shipit
595
599
  test "merge_request_ignored_statuses defaults to the union of ci.hide and ci.allow_failures" do
596
600
  @spec.expects(:load_config).returns(
597
601
  'ci' => {
598
- 'hide' => %w(ci/circleci ci/jenkins),
599
- 'allow_failures' => %w(ci/circleci ci/travis),
600
- },
602
+ 'hide' => %w[ci/circleci ci/jenkins],
603
+ 'allow_failures' => %w[ci/circleci ci/travis]
604
+ }
601
605
  )
602
- assert_equal %w(ci/circleci ci/jenkins ci/travis).sort, @spec.merge_request_ignored_statuses.sort
606
+ assert_equal %w[ci/circleci ci/jenkins ci/travis].sort, @spec.merge_request_ignored_statuses.sort
603
607
  end
604
608
 
605
609
  test "merge_request_ignored_statuses defaults to empty if `merge.require` is present" do
606
610
  @spec.expects(:load_config).returns(
607
611
  'merge' => {
608
- 'require' => 'bar',
612
+ 'require' => 'bar'
609
613
  },
610
614
  'ci' => {
611
- 'hide' => %w(ci/circleci ci/jenkins),
612
- 'allow_failures' => %w(ci/circleci ci/travis),
613
- },
615
+ 'hide' => %w[ci/circleci ci/jenkins],
616
+ 'allow_failures' => %w[ci/circleci ci/travis]
617
+ }
614
618
  )
615
619
  assert_equal [], @spec.merge_request_ignored_statuses
616
620
  end
@@ -618,12 +622,12 @@ module Shipit
618
622
  test "merge_request_ignored_statuses returns `merge.ignore` if present" do
619
623
  @spec.expects(:load_config).returns(
620
624
  'merge' => {
621
- 'ignore' => 'bar',
625
+ 'ignore' => 'bar'
622
626
  },
623
627
  'ci' => {
624
- 'hide' => %w(ci/circleci ci/jenkins),
625
- 'allow_failures' => %w(ci/circleci ci/travis),
626
- },
628
+ 'hide' => %w[ci/circleci ci/jenkins],
629
+ 'allow_failures' => %w[ci/circleci ci/travis]
630
+ }
627
631
  )
628
632
  assert_equal ['bar'], @spec.merge_request_ignored_statuses
629
633
  end
@@ -631,20 +635,20 @@ module Shipit
631
635
  test "merge_request_required_statuses defaults to ci.require" do
632
636
  @spec.expects(:load_config).returns(
633
637
  'ci' => {
634
- 'require' => %w(ci/circleci ci/jenkins),
635
- },
638
+ 'require' => %w[ci/circleci ci/jenkins]
639
+ }
636
640
  )
637
- assert_equal %w(ci/circleci ci/jenkins), @spec.merge_request_required_statuses
641
+ assert_equal %w[ci/circleci ci/jenkins], @spec.merge_request_required_statuses
638
642
  end
639
643
 
640
644
  test "merge_request_required_statuses defaults to empty if `merge.ignore` is present" do
641
645
  @spec.expects(:load_config).returns(
642
646
  'merge' => {
643
- 'ignore' => 'bar',
647
+ 'ignore' => 'bar'
644
648
  },
645
649
  'ci' => {
646
- 'require' => %w(ci/circleci ci/jenkins),
647
- },
650
+ 'require' => %w[ci/circleci ci/jenkins]
651
+ }
648
652
  )
649
653
  assert_equal [], @spec.merge_request_required_statuses
650
654
  end
@@ -652,12 +656,12 @@ module Shipit
652
656
  test "merge_request_required_statuses returns `merge.require` if present" do
653
657
  @spec.expects(:load_config).returns(
654
658
  'merge' => {
655
- 'require' => 'bar',
659
+ 'require' => 'bar'
656
660
  },
657
661
  'ci' => {
658
- 'hide' => %w(ci/circleci ci/jenkins),
659
- 'allow_failures' => %w(ci/circleci ci/travis),
660
- },
662
+ 'hide' => %w[ci/circleci ci/jenkins],
663
+ 'allow_failures' => %w[ci/circleci ci/travis]
664
+ }
661
665
  )
662
666
  assert_equal ['bar'], @spec.merge_request_required_statuses
663
667
  end
@@ -670,8 +674,8 @@ module Shipit
670
674
  test "revalidate_merge_requests_after defaults to `nil` if `merge.timeout` cannot be parsed" do
671
675
  @spec.expects(:load_config).returns(
672
676
  'merge' => {
673
- 'revalidate_after' => 'ALSKhfjsdkf',
674
- },
677
+ 'revalidate_after' => 'ALSKhfjsdkf'
678
+ }
675
679
  )
676
680
  assert_nil @spec.revalidate_merge_requests_after
677
681
  end
@@ -679,8 +683,8 @@ module Shipit
679
683
  test "revalidate_after returns `merge.revalidate_after` if present" do
680
684
  @spec.expects(:load_config).returns(
681
685
  'merge' => {
682
- 'revalidate_after' => '5m30s',
683
- },
686
+ 'revalidate_after' => '5m30s'
687
+ }
684
688
  )
685
689
  assert_equal 330, @spec.revalidate_merge_requests_after.to_i
686
690
  end
@@ -1095,9 +1099,9 @@ module Shipit
1095
1099
  @spec.expects(:load_config).returns(
1096
1100
  'merge' => {
1097
1101
  'max_divergence' => {
1098
- 'age' => 'badbadbad',
1099
- },
1100
- },
1102
+ 'age' => 'badbadbad'
1103
+ }
1104
+ }
1101
1105
  )
1102
1106
  assert_nil @spec.max_divergence_age
1103
1107
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit