shipit-engine 0.28.0 → 0.32.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.
- checksums.yaml +4 -4
- data/README.md +41 -2
- data/Rakefile +4 -2
- data/app/assets/images/archive-solid.svg +1 -0
- data/app/assets/stylesheets/_pages/_stacks.scss +76 -3
- data/app/assets/stylesheets/_structure/_main.scss +2 -1
- data/app/assets/stylesheets/merge_status.scss +0 -3
- data/app/controllers/concerns/shipit/active_model_serializers_patch.rb +13 -0
- data/app/controllers/concerns/shipit/api/cacheable.rb +1 -0
- data/app/controllers/concerns/shipit/api/paginable.rb +3 -2
- data/app/controllers/concerns/shipit/api/rendering.rb +5 -4
- data/app/controllers/concerns/shipit/authentication.rb +3 -2
- data/app/controllers/concerns/shipit/pagination.rb +2 -1
- data/app/controllers/shipit/api/base_controller.rb +11 -6
- data/app/controllers/shipit/api/ccmenu_controller.rb +2 -1
- data/app/controllers/shipit/api/commits_controller.rb +2 -1
- data/app/controllers/shipit/api/deploys_controller.rb +4 -3
- data/app/controllers/shipit/api/hooks_controller.rb +6 -5
- data/app/controllers/shipit/api/locks_controller.rb +5 -4
- data/app/controllers/shipit/api/outputs_controller.rb +2 -1
- data/app/controllers/shipit/api/pull_requests_controller.rb +7 -6
- data/app/controllers/shipit/api/release_statuses_controller.rb +3 -2
- data/app/controllers/shipit/api/rollbacks_controller.rb +33 -0
- data/app/controllers/shipit/api/stacks_controller.rb +37 -5
- data/app/controllers/shipit/api/tasks_controller.rb +6 -5
- data/app/controllers/shipit/api_clients_controller.rb +50 -0
- data/app/controllers/shipit/ccmenu_url_controller.rb +4 -3
- data/app/controllers/shipit/commit_checks_controller.rb +2 -1
- data/app/controllers/shipit/commits_controller.rb +2 -1
- data/app/controllers/shipit/deploys_controller.rb +3 -2
- data/app/controllers/shipit/github_authentication_controller.rb +4 -3
- data/app/controllers/shipit/merge_status_controller.rb +19 -14
- data/app/controllers/shipit/pull_requests_controller.rb +3 -2
- data/app/controllers/shipit/release_statuses_controller.rb +3 -2
- data/app/controllers/shipit/rollbacks_controller.rb +3 -2
- data/app/controllers/shipit/shipit_controller.rb +2 -1
- data/app/controllers/shipit/stacks_controller.rb +78 -14
- data/app/controllers/shipit/status_controller.rb +2 -1
- data/app/controllers/shipit/tasks_controller.rb +6 -5
- data/app/controllers/shipit/webhooks_controller.rb +5 -132
- data/app/helpers/shipit/chunks_helper.rb +1 -0
- data/app/helpers/shipit/deploys_helper.rb +4 -3
- data/app/helpers/shipit/github_url_helper.rb +1 -0
- data/app/helpers/shipit/merge_status_helper.rb +1 -0
- data/app/helpers/shipit/shipit_helper.rb +1 -0
- data/app/helpers/shipit/stacks_helper.rb +5 -0
- data/app/helpers/shipit/tasks_helper.rb +1 -0
- data/app/jobs/shipit/background_job.rb +4 -0
- data/app/jobs/shipit/background_job/unique.rb +4 -1
- data/app/jobs/shipit/cache_deploy_spec_job.rb +1 -0
- data/app/jobs/shipit/chunk_rollup_job.rb +4 -0
- data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
- data/app/jobs/shipit/continuous_delivery_job.rb +3 -1
- data/app/jobs/shipit/create_on_github_job.rb +6 -1
- data/app/jobs/shipit/create_release_statuses_job.rb +1 -0
- data/app/jobs/shipit/deferred_touch_job.rb +4 -0
- data/app/jobs/shipit/deliver_hook_job.rb +1 -0
- data/app/jobs/shipit/destroy_job.rb +1 -0
- data/app/jobs/shipit/destroy_stack_job.rb +3 -2
- data/app/jobs/shipit/emit_event_job.rb +2 -1
- data/app/jobs/shipit/fetch_commit_stats_job.rb +1 -0
- data/app/jobs/shipit/fetch_deployed_revision_job.rb +2 -1
- data/app/jobs/shipit/github_sync_job.rb +3 -2
- data/app/jobs/shipit/{mark_deploy_healty_job.rb → mark_deploy_healthy_job.rb} +1 -0
- data/app/jobs/shipit/merge_pull_requests_job.rb +1 -0
- data/app/jobs/shipit/perform_commit_checks_job.rb +1 -0
- data/app/jobs/shipit/perform_task_job.rb +14 -5
- data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
- data/app/jobs/shipit/reap_dead_tasks_job.rb +21 -0
- data/app/jobs/shipit/refresh_check_runs_job.rb +1 -0
- data/app/jobs/shipit/refresh_github_user_job.rb +1 -0
- data/app/jobs/shipit/refresh_pull_request_job.rb +1 -0
- data/app/jobs/shipit/refresh_statuses_job.rb +1 -0
- data/app/jobs/shipit/setup_github_hook_job.rb +1 -0
- data/app/jobs/shipit/update_estimated_deploy_duration_job.rb +1 -0
- data/app/jobs/shipit/update_github_last_deployed_ref_job.rb +6 -3
- data/app/models/concerns/shipit/deferred_touch.rb +4 -3
- data/app/models/shipit/anonymous_user.rb +5 -0
- data/app/models/shipit/api_client.rb +3 -2
- data/app/models/shipit/application_record.rb +2 -1
- data/app/models/shipit/check_run.rb +4 -3
- data/app/models/shipit/command_line_user.rb +1 -0
- data/app/models/shipit/commit.rb +31 -12
- data/app/models/shipit/commit_checks.rb +1 -0
- data/app/models/shipit/commit_deployment.rb +17 -12
- data/app/models/shipit/commit_deployment_status.rb +8 -3
- data/app/models/shipit/commit_message.rb +1 -0
- data/app/models/shipit/delivery.rb +4 -3
- data/app/models/shipit/deploy.rb +40 -10
- data/app/models/shipit/deploy_spec.rb +22 -3
- data/app/models/shipit/deploy_spec/bundler_discovery.rb +2 -1
- data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/file_system.rb +10 -3
- data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/lerna_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/npm_discovery.rb +5 -4
- data/app/models/shipit/deploy_spec/pypi_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
- data/app/models/shipit/deploy_stats.rb +58 -0
- data/app/models/shipit/duration.rb +3 -2
- data/app/models/shipit/ephemeral_commit_checks.rb +1 -0
- data/app/models/shipit/github_hook.rb +2 -1
- data/app/models/shipit/github_status.rb +3 -2
- data/app/models/shipit/hook.rb +6 -5
- data/app/models/shipit/membership.rb +3 -2
- data/app/models/shipit/output_chunk.rb +7 -2
- data/app/models/shipit/pull_request.rb +13 -7
- data/app/models/shipit/record.rb +18 -0
- data/app/models/shipit/release_status.rb +3 -2
- data/app/models/shipit/repository.rb +43 -0
- data/app/models/shipit/rollback.rb +1 -0
- data/app/models/shipit/stack.rb +109 -50
- data/app/models/shipit/status.rb +3 -2
- data/app/models/shipit/status/common.rb +7 -6
- data/app/models/shipit/status/group.rb +1 -0
- data/app/models/shipit/status/missing.rb +2 -1
- data/app/models/shipit/status/unknown.rb +2 -1
- data/app/models/shipit/task.rb +64 -9
- data/app/models/shipit/task_definition.rb +1 -0
- data/app/models/shipit/team.rb +2 -1
- data/app/models/shipit/undeployed_commit.rb +1 -0
- data/app/models/shipit/unlimited_api_client.rb +1 -0
- data/app/models/shipit/user.rb +29 -5
- data/app/models/shipit/variable_definition.rb +1 -0
- data/app/models/shipit/webhooks.rb +33 -0
- data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +20 -0
- data/app/models/shipit/webhooks/handlers/handler.rb +41 -0
- data/app/models/shipit/webhooks/handlers/membership_handler.rb +46 -0
- data/app/models/shipit/webhooks/handlers/push_handler.rb +21 -0
- data/app/models/shipit/webhooks/handlers/status_handler.rb +27 -0
- data/app/serializers/concerns/shipit/conditional_attributes.rb +1 -0
- data/app/serializers/shipit/anonymous_user_serializer.rb +1 -0
- data/app/serializers/shipit/command_line_user_serializer.rb +1 -0
- data/app/serializers/shipit/commit_serializer.rb +1 -0
- data/app/serializers/shipit/deploy_serializer.rb +2 -1
- data/app/serializers/shipit/hook_serializer.rb +1 -0
- data/app/serializers/shipit/pull_request_serializer.rb +1 -0
- data/app/serializers/shipit/rollback_serializer.rb +1 -0
- data/app/serializers/shipit/short_commit_serializer.rb +1 -0
- data/app/serializers/shipit/stack_serializer.rb +7 -1
- data/app/serializers/shipit/tail_task_serializer.rb +1 -0
- data/app/serializers/shipit/task_serializer.rb +2 -17
- data/app/serializers/shipit/user_serializer.rb +6 -1
- data/app/validators/ascii_only_validator.rb +4 -3
- data/app/validators/subset_validator.rb +1 -0
- data/app/views/layouts/_head.html.erb +0 -0
- data/app/views/layouts/shipit.html.erb +6 -4
- data/app/views/shipit/_variables.html.erb +1 -1
- data/app/views/shipit/api_clients/index.html.erb +36 -0
- data/app/views/shipit/api_clients/new.html.erb +33 -0
- data/app/views/shipit/api_clients/show.html.erb +35 -0
- data/app/views/shipit/ccmenu/project.xml.builder +2 -1
- data/app/views/shipit/deploys/new.html.erb +17 -12
- data/app/views/shipit/deploys/show.html.erb +2 -2
- data/app/views/shipit/merge_status/logged_out.erb +1 -1
- data/app/views/shipit/stacks/_header.html.erb +27 -12
- data/app/views/shipit/stacks/_links.html.erb +1 -0
- data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
- data/app/views/shipit/stacks/index.html.erb +7 -2
- data/app/views/shipit/stacks/settings.html.erb +19 -0
- data/app/views/shipit/stacks/statistics.html.erb +82 -0
- data/app/views/shipit/tasks/show.html.erb +1 -1
- data/config/initializers/inflections.rb +2 -1
- data/config/locales/en.yml +18 -5
- data/config/routes.rb +14 -2
- data/db/migrate/20191209231045_create_shipit_repositories.rb +12 -0
- data/db/migrate/20191209231307_add_repository_reference_to_stacks.rb +15 -0
- data/db/migrate/20191216162728_backfill_repository_data.rb +22 -0
- data/db/migrate/20191216163010_remove_repository_information_from_stacks.rb +20 -0
- data/db/migrate/20191219205202_add_archived_since_to_stacks.rb +6 -0
- data/db/migrate/20200102175621_optional_task_commits.rb +6 -0
- data/db/migrate/20200109132519_add_sha_to_commit_deployments.rb +5 -0
- data/db/migrate/20200226211925_add_index_to_tasks_status.rb +5 -0
- data/db/migrate/20200427135152_add_pull_request_head_sha_to_commit.rb +5 -0
- data/db/migrate/20200615181558_add_rollback_once_aborted_to.rb +5 -0
- data/lib/shipit.rb +18 -20
- data/lib/shipit/cast_value.rb +1 -0
- data/lib/shipit/command.rb +14 -18
- data/lib/shipit/commands.rb +5 -4
- data/lib/shipit/csv_serializer.rb +1 -0
- data/lib/shipit/deploy_commands.rb +1 -0
- data/lib/shipit/engine.rb +11 -2
- data/lib/shipit/environment_variables.rb +11 -1
- data/lib/shipit/first_parent_commits_iterator.rb +1 -0
- data/lib/shipit/flock.rb +1 -0
- data/lib/shipit/github_app.rb +60 -6
- data/lib/shipit/github_http_cache_middleware.rb +57 -0
- data/lib/shipit/null_serializer.rb +1 -0
- data/lib/shipit/octokit_check_runs.rb +3 -2
- data/lib/shipit/octokit_iterator.rb +3 -2
- data/lib/shipit/paginator.rb +3 -2
- data/lib/shipit/rollback_commands.rb +1 -0
- data/lib/shipit/same_site_cookie_middleware.rb +29 -0
- data/lib/shipit/simple_message_verifier.rb +1 -0
- data/lib/shipit/stack_commands.rb +6 -3
- data/lib/shipit/stat.rb +1 -0
- data/lib/shipit/task_commands.rb +22 -14
- data/lib/shipit/version.rb +2 -1
- data/lib/snippets/release-gem +5 -1
- data/lib/tasks/cron.rake +2 -0
- data/lib/tasks/dev.rake +3 -2
- data/lib/tasks/shipit.rake +16 -17
- data/lib/tasks/teams.rake +1 -0
- data/test/controllers/api/base_controller_test.rb +3 -2
- data/test/controllers/api/ccmenu_controller_test.rb +9 -8
- data/test/controllers/api/commits_controller_test.rb +3 -2
- data/test/controllers/api/deploys_controller_test.rb +15 -14
- data/test/controllers/api/hooks_controller_test.rb +8 -7
- data/test/controllers/api/locks_controller_test.rb +7 -6
- data/test/controllers/api/outputs_controller_test.rb +3 -2
- data/test/controllers/api/pull_requests_controller_test.rb +8 -7
- data/test/controllers/api/release_statuses_controller_test.rb +2 -1
- data/test/controllers/api/rollback_controller_test.rb +113 -0
- data/test/controllers/api/stacks_controller_test.rb +44 -15
- data/test/controllers/api/tasks_controller_test.rb +13 -12
- data/test/controllers/api_clients_controller_test.rb +104 -0
- data/test/controllers/ccmenu_controller_test.rb +4 -3
- data/test/controllers/commit_checks_controller_test.rb +4 -3
- data/test/controllers/commits_controller_test.rb +3 -2
- data/test/controllers/deploys_controller_test.rb +33 -22
- data/test/controllers/github_authentication_controller_test.rb +1 -0
- data/test/controllers/merge_status_controller_test.rb +27 -9
- data/test/controllers/pull_requests_controller_test.rb +4 -3
- data/test/controllers/release_statuses_controller_test.rb +3 -2
- data/test/controllers/rollbacks_controller_test.rb +9 -8
- data/test/controllers/stacks_controller_test.rb +64 -15
- data/test/controllers/status_controller_test.rb +1 -0
- data/test/controllers/tasks_controller_test.rb +20 -19
- data/test/controllers/webhooks_controller_test.rb +36 -9
- data/test/dummy/config/application.rb +1 -1
- data/test/dummy/config/environments/development.rb +24 -4
- data/test/dummy/config/environments/test.rb +2 -0
- data/test/dummy/db/schema.rb +25 -11
- data/test/dummy/db/seeds.rb +34 -17
- data/test/fixtures/shipit/commit_deployment_statuses.yml +4 -4
- data/test/fixtures/shipit/commit_deployments.yml +8 -8
- data/test/fixtures/shipit/commits.yml +38 -0
- data/test/fixtures/shipit/repositories.yml +27 -0
- data/test/fixtures/shipit/stacks.yml +190 -30
- data/test/fixtures/shipit/tasks.yml +66 -3
- data/test/fixtures/timeout +2 -1
- data/test/helpers/api_helper.rb +1 -0
- data/test/helpers/fixture_aliases_helper.rb +1 -0
- data/test/helpers/hooks_helper.rb +2 -1
- data/test/helpers/json_helper.rb +15 -11
- data/test/helpers/links_helper.rb +4 -3
- data/test/helpers/payloads_helper.rb +1 -0
- data/test/helpers/queries_helper.rb +3 -2
- data/test/jobs/cache_deploy_spec_job_test.rb +2 -1
- data/test/jobs/chunk_rollup_job_test.rb +1 -0
- data/test/jobs/deliver_hook_job_test.rb +2 -1
- data/test/jobs/destroy_stack_job_test.rb +10 -0
- data/test/jobs/emit_event_job_test.rb +2 -1
- data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
- data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
- data/test/jobs/github_sync_job_test.rb +1 -0
- data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
- data/test/jobs/merge_pull_requests_job_test.rb +5 -4
- data/test/jobs/perform_task_job_test.rb +4 -3
- data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
- data/test/jobs/reap_dead_tasks_job_test.rb +68 -0
- data/test/jobs/refresh_github_user_job_test.rb +1 -0
- data/test/jobs/refresh_status_job_test.rb +1 -0
- data/test/jobs/unique_job_test.rb +1 -0
- data/test/jobs/update_github_last_deployed_ref_job_test.rb +13 -11
- data/test/middleware/same_site_cookie_middleware_test.rb +52 -0
- data/test/models/api_client_test.rb +1 -0
- data/test/models/commit_checks_test.rb +1 -0
- data/test/models/commit_deployment_status_test.rb +34 -4
- data/test/models/commit_deployment_test.rb +9 -11
- data/test/models/commits_test.rb +99 -7
- data/test/models/delivery_test.rb +3 -2
- data/test/models/deploy_spec_test.rb +47 -42
- data/test/models/deploy_stats_test.rb +113 -0
- data/test/models/deploys_test.rb +60 -13
- data/test/models/duration_test.rb +1 -0
- data/test/models/github_hook_test.rb +1 -0
- data/test/models/hook_test.rb +20 -16
- data/test/models/membership_test.rb +1 -0
- data/test/models/output_chunk_test.rb +1 -0
- data/test/models/pull_request_test.rb +18 -11
- data/test/models/release_statuses_test.rb +1 -0
- data/test/models/rollbacks_test.rb +1 -0
- data/test/models/shipit/check_run_test.rb +1 -0
- data/test/models/shipit/repository_test.rb +77 -0
- data/test/models/shipit/wehbooks/handlers_test.rb +27 -0
- data/test/models/stacks_test.rb +110 -56
- data/test/models/status/group_test.rb +1 -0
- data/test/models/status/missing_test.rb +1 -0
- data/test/models/status_test.rb +1 -0
- data/test/models/task_definitions_test.rb +9 -8
- data/test/models/tasks_test.rb +18 -1
- data/test/models/team_test.rb +4 -2
- data/test/models/undeployed_commits_test.rb +14 -0
- data/test/models/users_test.rb +109 -1
- data/test/test_command_integration.rb +3 -2
- data/test/test_helper.rb +38 -34
- data/test/unit/anonymous_user_serializer_test.rb +14 -0
- data/test/unit/command_test.rb +12 -7
- data/test/unit/commands_test.rb +1 -0
- data/test/unit/commit_serializer_test.rb +16 -0
- data/test/unit/csv_serializer_test.rb +3 -2
- data/test/unit/deploy_commands_test.rb +14 -4
- data/test/unit/deploy_serializer_test.rb +17 -0
- data/test/unit/environment_variables_test.rb +5 -4
- data/test/unit/github_app_test.rb +165 -0
- data/test/unit/github_url_helper_test.rb +1 -0
- data/test/unit/rollback_commands_test.rb +2 -1
- data/test/unit/shipit_helper_test.rb +17 -0
- data/test/unit/shipit_test.rb +1 -0
- data/test/unit/user_serializer_test.rb +14 -0
- data/test/unit/variable_definition_test.rb +1 -0
- metadata +215 -157
- data/lib/shipit/strip_cache_control.rb +0 -40
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
module Shipit
|
@@ -10,7 +11,7 @@ module Shipit
|
|
10
11
|
|
11
12
|
test ":create allow users to append release statuses and mark the deploy as success" do
|
12
13
|
assert_difference -> { ReleaseStatus.count }, +1 do
|
13
|
-
post :create, params: {stack_id: @stack, deploy_id: @deploy.id, status: 'success'}
|
14
|
+
post :create, params: { stack_id: @stack, deploy_id: @deploy.id, status: 'success' }
|
14
15
|
assert_response :created
|
15
16
|
end
|
16
17
|
|
@@ -23,7 +24,7 @@ module Shipit
|
|
23
24
|
|
24
25
|
test ":create allow users to append release statuses and mark the deploy as faulty" do
|
25
26
|
assert_difference -> { ReleaseStatus.count }, +1 do
|
26
|
-
post :create, params: {stack_id: @stack, deploy_id: @deploy.id, status: 'failure'}
|
27
|
+
post :create, params: { stack_id: @stack, deploy_id: @deploy.id, status: 'failure' }
|
27
28
|
assert_response :created
|
28
29
|
end
|
29
30
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
module Shipit
|
@@ -11,37 +12,37 @@ module Shipit
|
|
11
12
|
|
12
13
|
test ":create persists a new rollback" do
|
13
14
|
assert_difference '@stack.rollbacks.count', 1 do
|
14
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}}
|
15
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id } }
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
19
|
test ":create can receive an :env hash" do
|
19
|
-
env = {'SAFETY_DISABLED' => '1'}
|
20
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id, env: env}}
|
20
|
+
env = { 'SAFETY_DISABLED' => '1' }
|
21
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id, env: env } }
|
21
22
|
new_rollback = Rollback.last
|
22
23
|
assert_equal env, new_rollback.env
|
23
24
|
end
|
24
25
|
|
25
26
|
test ":create ignore :env keys not declared in the deploy spec" do
|
26
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id, env: {'H4X0R' => '1'}}}
|
27
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id, env: { 'H4X0R' => '1' } } }
|
27
28
|
new_rollback = Rollback.last
|
28
29
|
assert_equal({}, new_rollback.env)
|
29
30
|
end
|
30
31
|
|
31
32
|
test ":create redirects to the new deploy" do
|
32
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}}
|
33
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id } }
|
33
34
|
assert_redirected_to stack_deploy_path(@stack, Rollback.last)
|
34
35
|
end
|
35
36
|
|
36
37
|
test ":create locks deploys" do
|
37
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}}
|
38
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id } }
|
38
39
|
assert @stack.reload.locked?
|
39
40
|
end
|
40
41
|
|
41
42
|
test ":create redirects back to the :new page if there is an active deploy" do
|
42
43
|
shipit_deploys(:shipit_running).update!(allow_concurrency: false, status: 'running')
|
43
44
|
assert_no_difference '@stack.deploys.count' do
|
44
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}}
|
45
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id } }
|
45
46
|
end
|
46
47
|
assert_redirected_to rollback_stack_deploy_path(@stack, @deploy)
|
47
48
|
end
|
@@ -49,7 +50,7 @@ module Shipit
|
|
49
50
|
test ":create with `force` option ignore the active deploys" do
|
50
51
|
shipit_deploys(:shipit_running).update_column(:status, 'running')
|
51
52
|
assert_difference '@stack.deploys.count', 1 do
|
52
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}, force: 'true'}
|
53
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id }, force: 'true' }
|
53
54
|
end
|
54
55
|
assert_redirected_to stack_deploy_path(@stack, Rollback.last)
|
55
56
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
module Shipit
|
@@ -46,13 +47,26 @@ module Shipit
|
|
46
47
|
)
|
47
48
|
end
|
48
49
|
|
50
|
+
test "#index list all stacks" do
|
51
|
+
get :index
|
52
|
+
assert_response :ok
|
53
|
+
assert_select ".stack", count: Stack.count
|
54
|
+
end
|
55
|
+
|
56
|
+
test "#index list a repo stacks if the :repo params is passed" do
|
57
|
+
repo = shipit_repositories(:shipit)
|
58
|
+
get :index, params: { repo: repo.full_name }
|
59
|
+
assert_response :ok
|
60
|
+
assert_select ".stack", count: repo.stacks.count
|
61
|
+
end
|
62
|
+
|
49
63
|
test "#show is success" do
|
50
|
-
get :show, params: {id: @stack.to_param}
|
64
|
+
get :show, params: { id: @stack.to_param }
|
51
65
|
assert_response :ok
|
52
66
|
end
|
53
67
|
|
54
68
|
test "#show with faulty and validating deploys is success" do
|
55
|
-
get :show, params: {id: shipit_stacks(:shipit_canaries).to_param}
|
69
|
+
get :show, params: { id: shipit_stacks(:shipit_canaries).to_param }
|
56
70
|
assert_response :ok
|
57
71
|
end
|
58
72
|
|
@@ -60,18 +74,18 @@ module Shipit
|
|
60
74
|
@stack = shipit_stacks(:check_runs)
|
61
75
|
assert_not_equal 0, CheckRun.where(stack_id: @stack.id).count
|
62
76
|
|
63
|
-
get :show, params: {id: @stack.to_param}
|
77
|
+
get :show, params: { id: @stack.to_param }
|
64
78
|
assert_response :ok
|
65
79
|
end
|
66
80
|
|
67
81
|
test "#show handles locked stacks without a lock_author" do
|
68
82
|
@stack.update!(lock_reason: "I am a lock with no author")
|
69
|
-
get :show, params: {id: @stack.to_param}
|
83
|
+
get :show, params: { id: @stack.to_param }
|
70
84
|
end
|
71
85
|
|
72
86
|
test "#show auto-links URLs in lock reason" do
|
73
87
|
@stack.update!(lock_reason: 'http://google.com')
|
74
|
-
get :show, params: {id: @stack.to_param}
|
88
|
+
get :show, params: { id: @stack.to_param }
|
75
89
|
assert_response :ok
|
76
90
|
assert_select 'a[href="http://google.com"]'
|
77
91
|
end
|
@@ -93,27 +107,38 @@ module Shipit
|
|
93
107
|
|
94
108
|
test "#create when not valid renders new" do
|
95
109
|
assert_no_difference "Stack.count" do
|
96
|
-
post :create, params: {stack: {repo_owner: 'some', repo_name: 'owner/path'}}
|
110
|
+
post :create, params: { stack: { repo_owner: 'some', repo_name: 'owner/path' } }
|
97
111
|
end
|
98
112
|
assert_response :success
|
99
113
|
end
|
100
114
|
|
101
115
|
test "#destroy enqueues a DestroyStackJob" do
|
102
116
|
assert_enqueued_with(job: DestroyStackJob, args: [@stack]) do
|
103
|
-
delete :destroy, params: {id: @stack.to_param}
|
117
|
+
delete :destroy, params: { id: @stack.to_param }
|
104
118
|
end
|
105
119
|
assert_redirected_to stacks_path
|
106
120
|
end
|
107
121
|
|
108
122
|
test "#settings is success" do
|
109
|
-
get :settings, params: {id: @stack.to_param}
|
123
|
+
get :settings, params: { id: @stack.to_param }
|
110
124
|
assert_response :success
|
111
125
|
end
|
112
126
|
|
127
|
+
test "#statistics is success" do
|
128
|
+
get :statistics, params: { id: @stack.to_param }
|
129
|
+
assert_response :success
|
130
|
+
end
|
131
|
+
|
132
|
+
test "#statistics redirects to #show if no deploys are present" do
|
133
|
+
@stack.deploys.destroy_all
|
134
|
+
get :statistics, params: { id: @stack.to_param }
|
135
|
+
assert_redirected_to stack_path(@stack)
|
136
|
+
end
|
137
|
+
|
113
138
|
test "#update allows to lock the stack" do
|
114
139
|
refute @stack.locked?
|
115
140
|
|
116
|
-
patch :update, params: {id: @stack.to_param, stack: {lock_reason: 'Went out to eat some chips!'}}
|
141
|
+
patch :update, params: { id: @stack.to_param, stack: { lock_reason: 'Went out to eat some chips!' } }
|
117
142
|
@stack.reload
|
118
143
|
assert @stack.locked?
|
119
144
|
assert_equal shipit_users(:walrus), @stack.lock_author
|
@@ -123,8 +148,32 @@ module Shipit
|
|
123
148
|
@stack.update!(lock_reason: 'Went out to eat some chips!')
|
124
149
|
assert @stack.locked?
|
125
150
|
|
126
|
-
patch :update, params: {id: @stack.to_param, stack: {lock_reason: ''}}
|
151
|
+
patch :update, params: { id: @stack.to_param, stack: { lock_reason: '' } }
|
152
|
+
@stack.reload
|
153
|
+
refute @stack.locked?
|
154
|
+
assert_instance_of AnonymousUser, @stack.lock_author
|
155
|
+
end
|
156
|
+
|
157
|
+
test "#update allows to archive the stack" do
|
158
|
+
refute @stack.archived?
|
159
|
+
refute @stack.locked?
|
160
|
+
|
161
|
+
patch :update, params: { id: @stack.to_param, stack: { archived: "true" } }
|
162
|
+
@stack.reload
|
163
|
+
assert @stack.archived?
|
164
|
+
assert @stack.locked?
|
165
|
+
assert_equal shipit_users(:walrus), @stack.lock_author
|
166
|
+
assert_equal "Archived", @stack.lock_reason
|
167
|
+
end
|
168
|
+
|
169
|
+
test "#update allows to dearchive the stack" do
|
170
|
+
@stack.archive!(shipit_users(:walrus))
|
171
|
+
assert @stack.locked?
|
172
|
+
assert @stack.archived?
|
173
|
+
|
174
|
+
patch :update, params: { id: @stack.to_param, stack: { archived: "false" } }
|
127
175
|
@stack.reload
|
176
|
+
refute @stack.archived?
|
128
177
|
refute @stack.locked?
|
129
178
|
assert_instance_of AnonymousUser, @stack.lock_author
|
130
179
|
end
|
@@ -135,7 +184,7 @@ module Shipit
|
|
135
184
|
assert_enqueued_with(job: RefreshStatusesJob, args: [stack_id: @stack.id]) do
|
136
185
|
assert_enqueued_with(job: RefreshCheckRunsJob, args: [stack_id: @stack.id]) do
|
137
186
|
assert_enqueued_with(job: GithubSyncJob, args: [stack_id: @stack.id]) do
|
138
|
-
post :refresh, params: {id: @stack.to_param}
|
187
|
+
post :refresh, params: { id: @stack.to_param }
|
139
188
|
end
|
140
189
|
end
|
141
190
|
end
|
@@ -145,23 +194,23 @@ module Shipit
|
|
145
194
|
|
146
195
|
test "#clear_git_cache queues a ClearGitCacheJob" do
|
147
196
|
assert_enqueued_with(job: ClearGitCacheJob, args: [@stack]) do
|
148
|
-
post :clear_git_cache, params: {id: @stack.to_param}
|
197
|
+
post :clear_git_cache, params: { id: @stack.to_param }
|
149
198
|
end
|
150
199
|
assert_redirected_to stack_settings_path(@stack)
|
151
200
|
end
|
152
201
|
|
153
202
|
test "#clear_git_cache displays a flash message" do
|
154
|
-
post :clear_git_cache, params: {id: @stack.to_param}
|
203
|
+
post :clear_git_cache, params: { id: @stack.to_param }
|
155
204
|
assert_equal 'Git Cache clearing scheduled', flash[:success]
|
156
205
|
end
|
157
206
|
|
158
207
|
test "#update redirects to return_to parameter" do
|
159
|
-
patch :update, params: {id: @stack.to_param, stack: {ignore_ci: false}, return_to: stack_path(@stack)}
|
208
|
+
patch :update, params: { id: @stack.to_param, stack: { ignore_ci: false }, return_to: stack_path(@stack) }
|
160
209
|
assert_redirected_to stack_path(@stack)
|
161
210
|
end
|
162
211
|
|
163
212
|
test "#lookup redirects to the canonical URL" do
|
164
|
-
get :lookup, params: {id: @stack.id}
|
213
|
+
get :lookup, params: { id: @stack.id }
|
165
214
|
assert_redirected_to stack_path(@stack)
|
166
215
|
end
|
167
216
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
module Shipit
|
@@ -11,7 +12,7 @@ module Shipit
|
|
11
12
|
end
|
12
13
|
|
13
14
|
test "tasks defined in the shipit.yml can be displayed" do
|
14
|
-
get :new, params: {stack_id: @stack, definition_id: @definition.id}
|
15
|
+
get :new, params: { stack_id: @stack, definition_id: @definition.id }
|
15
16
|
assert_response :ok
|
16
17
|
end
|
17
18
|
|
@@ -20,7 +21,7 @@ module Shipit
|
|
20
21
|
|
21
22
|
assert_predicate @stack, :active_task?
|
22
23
|
assert_no_difference -> { @stack.tasks.count } do
|
23
|
-
post :create, params: {stack_id: @stack, definition_id: @definition.id}
|
24
|
+
post :create, params: { stack_id: @stack, definition_id: @definition.id }
|
24
25
|
end
|
25
26
|
assert_redirected_to new_stack_tasks_path(@stack, @definition)
|
26
27
|
end
|
@@ -30,7 +31,7 @@ module Shipit
|
|
30
31
|
|
31
32
|
assert_predicate @stack, :active_task?
|
32
33
|
assert_difference -> { @stack.tasks.count } do
|
33
|
-
post :create, params: {stack_id: @stack, definition_id: @definition.id, force: 'true'}
|
34
|
+
post :create, params: { stack_id: @stack, definition_id: @definition.id, force: 'true' }
|
34
35
|
end
|
35
36
|
assert_redirected_to stack_task_path(@stack, Task.last)
|
36
37
|
end
|
@@ -38,34 +39,34 @@ module Shipit
|
|
38
39
|
test "tasks defined in the shipit.yml can be triggered while the stack is being deployed if specified as such" do
|
39
40
|
@definition = @stack.find_task_definition('flush_cache')
|
40
41
|
assert_difference -> { @stack.tasks.count } do
|
41
|
-
post :create, params: {stack_id: @stack, definition_id: @definition.id}
|
42
|
+
post :create, params: { stack_id: @stack, definition_id: @definition.id }
|
42
43
|
end
|
43
44
|
assert_redirected_to stack_task_path(@stack, Task.last)
|
44
45
|
end
|
45
46
|
|
46
47
|
test "tasks with variables defined in the shipit.yml can be triggered with their variables set" do
|
47
|
-
env = {"FOO" => "0"}
|
48
|
+
env = { "FOO" => "0" }
|
48
49
|
|
49
|
-
post :create, params: {stack_id: @stack, definition_id: @definition.id, task: {env: env}, force: 'true'}
|
50
|
+
post :create, params: { stack_id: @stack, definition_id: @definition.id, task: { env: env }, force: 'true' }
|
50
51
|
|
51
52
|
assert_redirected_to stack_tasks_path(@stack, Task.last)
|
52
53
|
end
|
53
54
|
|
54
55
|
test "triggered tasks can be observed" do
|
55
|
-
get :show, params: {stack_id: @stack, id: @task.id}
|
56
|
+
get :show, params: { stack_id: @stack, id: @task.id }
|
56
57
|
assert_response :ok
|
57
58
|
end
|
58
59
|
|
59
60
|
test "triggered tasks can be observed as raw text" do
|
60
|
-
get :show, params: {stack_id: @stack, id: @task.id}, format: 'txt'
|
61
|
+
get :show, params: { stack_id: @stack, id: @task.id }, format: 'txt'
|
61
62
|
assert_response :success
|
62
|
-
assert_equal("text/plain", @response.
|
63
|
+
assert_equal("text/plain", @response.media_type)
|
63
64
|
end
|
64
65
|
|
65
66
|
test ":abort call abort! on the deploy" do
|
66
67
|
@task = shipit_deploys(:shipit_running)
|
67
68
|
@task.ping
|
68
|
-
post :abort, params: {stack_id: @stack.to_param, id: @task.id}
|
69
|
+
post :abort, params: { stack_id: @stack.to_param, id: @task.id }
|
69
70
|
|
70
71
|
@task.reload
|
71
72
|
assert_response :success
|
@@ -77,7 +78,7 @@ module Shipit
|
|
77
78
|
test ":abort schedule the rollback if `rollback` is present" do
|
78
79
|
@task = shipit_deploys(:shipit_running)
|
79
80
|
@task.ping
|
80
|
-
post :abort, params: {stack_id: @stack.to_param, id: @task.id, rollback: 'true'}
|
81
|
+
post :abort, params: { stack_id: @stack.to_param, id: @task.id, rollback: 'true' }
|
81
82
|
|
82
83
|
@task.reload
|
83
84
|
assert_response :success
|
@@ -87,13 +88,13 @@ module Shipit
|
|
87
88
|
end
|
88
89
|
|
89
90
|
test ":index list the stack deploys" do
|
90
|
-
get :index, params: {stack_id: @stack.to_param}
|
91
|
+
get :index, params: { stack_id: @stack.to_param }
|
91
92
|
assert_response :success
|
92
93
|
assert_select '.task-list .task', @stack.tasks.count
|
93
94
|
end
|
94
95
|
|
95
96
|
test ":index paginates with the `since` parameter" do
|
96
|
-
get :index, params: {stack_id: @stack.to_param, since: @stack.tasks.last.id}
|
97
|
+
get :index, params: { stack_id: @stack.to_param, since: @stack.tasks.last.id }
|
97
98
|
assert_response :success
|
98
99
|
assert_select '.task-list .task', @stack.tasks.count - 1
|
99
100
|
end
|
@@ -102,7 +103,7 @@ module Shipit
|
|
102
103
|
@task = shipit_deploys(:shipit_running)
|
103
104
|
last_chunk = @task.chunks.last
|
104
105
|
|
105
|
-
get :tail, params: {stack_id: @stack.to_param, id: @task.id, last_id: last_chunk.id}, format: :json
|
106
|
+
get :tail, params: { stack_id: @stack.to_param, id: @task.id, last_id: last_chunk.id }, format: :json
|
106
107
|
assert_response :success
|
107
108
|
assert_json_keys %w(url status output)
|
108
109
|
assert_json 'status', @task.status
|
@@ -111,7 +112,7 @@ module Shipit
|
|
111
112
|
test ":tail doesn't returns the next url if the task is finished" do
|
112
113
|
@task = shipit_deploys(:shipit)
|
113
114
|
|
114
|
-
get :tail, params: {stack_id: @stack.to_param, id: @task.id}, format: :json
|
115
|
+
get :tail, params: { stack_id: @stack.to_param, id: @task.id }, format: :json
|
115
116
|
assert_response :success
|
116
117
|
assert_no_json 'url'
|
117
118
|
end
|
@@ -119,7 +120,7 @@ module Shipit
|
|
119
120
|
test ":tail returns the rollback url if the task have been aborted" do
|
120
121
|
@task = shipit_deploys(:shipit_aborted)
|
121
122
|
|
122
|
-
get :tail, params: {stack_id: @stack.to_param, id: @task.id}, format: :json
|
123
|
+
get :tail, params: { stack_id: @stack.to_param, id: @task.id }, format: :json
|
123
124
|
assert_response :success
|
124
125
|
assert_json_keys %w(status output rollback_url)
|
125
126
|
end
|
@@ -127,7 +128,7 @@ module Shipit
|
|
127
128
|
test ":lookup returns stack task url if the task is an instance of Task" do
|
128
129
|
@task = shipit_tasks(:shipit_restart)
|
129
130
|
|
130
|
-
get :lookup, params: {id: @task.id}
|
131
|
+
get :lookup, params: { id: @task.id }
|
131
132
|
|
132
133
|
assert_redirected_to stack_task_path(@task.stack, @task)
|
133
134
|
end
|
@@ -135,7 +136,7 @@ module Shipit
|
|
135
136
|
test ":lookup returns stack deploy url if the task is an instance of Deploy" do
|
136
137
|
@task = shipit_tasks(:shipit)
|
137
138
|
|
138
|
-
get :lookup, params: {id: @task.id}
|
139
|
+
get :lookup, params: { id: @task.id }
|
139
140
|
|
140
141
|
assert_redirected_to stack_deploy_path(@task.stack, @task)
|
141
142
|
end
|
@@ -143,7 +144,7 @@ module Shipit
|
|
143
144
|
test ":lookup returns stack deploy url if the task is an instance of Rollback" do
|
144
145
|
@task = shipit_tasks(:shipit_rollback)
|
145
146
|
|
146
|
-
get :lookup, params: {id: @task.id}
|
147
|
+
get :lookup, params: { id: @task.id }
|
147
148
|
|
148
149
|
assert_redirected_to stack_deploy_path(@task.stack, @task)
|
149
150
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
module Shipit
|
@@ -7,6 +8,17 @@ module Shipit
|
|
7
8
|
GithubHook.any_instance.stubs(:verify_signature).returns(true)
|
8
9
|
end
|
9
10
|
|
11
|
+
test "create github repository which is not yet present in the datastore" do
|
12
|
+
request.headers['X-Github-Event'] = 'push'
|
13
|
+
unknown_repo_payload = JSON.parse(payload(:push_master))
|
14
|
+
unknown_repo_payload["repository"]["full_name"] = "owner/unknown-repository"
|
15
|
+
unknown_repo_payload = unknown_repo_payload.to_json
|
16
|
+
|
17
|
+
assert_nothing_raised do
|
18
|
+
post :create, body: unknown_repo_payload, as: :json
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
10
22
|
test ":push with the target branch queues a GithubSyncJob" do
|
11
23
|
request.headers['X-Github-Event'] = 'push'
|
12
24
|
|
@@ -43,14 +55,14 @@ module Shipit
|
|
43
55
|
|
44
56
|
test ":state with a unexisting commit respond with 200 OK" do
|
45
57
|
request.headers['X-Github-Event'] = 'status'
|
46
|
-
params = {'sha' => 'notarealcommit', 'state' => 'pending', 'branches' => [{'name' => 'master'}]}.to_json
|
58
|
+
params = { 'sha' => 'notarealcommit', 'state' => 'pending', 'branches' => [{ 'name' => 'master' }] }.to_json
|
47
59
|
post :create, body: params, as: :json
|
48
60
|
assert_response :ok
|
49
61
|
end
|
50
62
|
|
51
63
|
test ":state in an untracked branche bails out" do
|
52
64
|
request.headers['X-Github-Event'] = 'status'
|
53
|
-
params = {'sha' => 'notarealcommit', 'state' => 'pending', 'branches' => []}.to_json
|
65
|
+
params = { 'sha' => 'notarealcommit', 'state' => 'pending', 'branches' => [] }.to_json
|
54
66
|
post :create, body: params, as: :json
|
55
67
|
assert_response :ok
|
56
68
|
end
|
@@ -68,7 +80,7 @@ module Shipit
|
|
68
80
|
@request.headers['X-Github-Event'] = 'ping'
|
69
81
|
|
70
82
|
assert_no_enqueued_jobs do
|
71
|
-
post :create, body: {zen: 'Git is beautiful'}.to_json, as: :json
|
83
|
+
post :create, body: { zen: 'Git is beautiful' }.to_json, as: :json
|
72
84
|
assert_response :ok
|
73
85
|
end
|
74
86
|
end
|
@@ -76,7 +88,7 @@ module Shipit
|
|
76
88
|
test "verifies webhook signature" do
|
77
89
|
commit = shipit_commits(:first)
|
78
90
|
|
79
|
-
payload = {"sha" => commit.sha, "state" => "pending", "target_url" => "https://ci.example.com/1000/output"}.to_json
|
91
|
+
payload = { "sha" => commit.sha, "state" => "pending", "target_url" => "https://ci.example.com/1000/output" }.to_json
|
80
92
|
signature = 'sha1=4848deb1c9642cd938e8caa578d201ca359a8249'
|
81
93
|
|
82
94
|
@request.headers['X-Github-Event'] = 'push'
|
@@ -105,7 +117,7 @@ module Shipit
|
|
105
117
|
@request.headers['X-Github-Event'] = 'membership'
|
106
118
|
Shipit.github.api.expects(:user).with('george').returns(george)
|
107
119
|
assert_difference -> { User.count }, 1 do
|
108
|
-
post :create, body: membership_params.merge(member: {login: 'george'}).to_json, as: :json
|
120
|
+
post :create, body: membership_params.merge(member: { login: 'george' }).to_json, as: :json
|
109
121
|
assert_response :ok
|
110
122
|
end
|
111
123
|
end
|
@@ -121,7 +133,7 @@ module Shipit
|
|
121
133
|
test ":membership can append an user membership" do
|
122
134
|
@request.headers['X-Github-Event'] = 'membership'
|
123
135
|
assert_difference -> { Membership.count }, 1 do
|
124
|
-
post :create, body: membership_params.merge(member: {login: 'bob'}).to_json, as: :json
|
136
|
+
post :create, body: membership_params.merge(member: { login: 'bob' }).to_json, as: :json
|
125
137
|
assert_response :ok
|
126
138
|
end
|
127
139
|
end
|
@@ -137,19 +149,34 @@ module Shipit
|
|
137
149
|
test ":membership can delete an user twice" do
|
138
150
|
@request.headers['X-Github-Event'] = 'membership'
|
139
151
|
assert_no_difference -> { Membership.count } do
|
140
|
-
post :create, body: membership_params.merge(action: 'removed', member: {login: 'bob'}).to_json, as: :json
|
152
|
+
post :create, body: membership_params.merge(action: 'removed', member: { login: 'bob' }).to_json, as: :json
|
141
153
|
assert_response :ok
|
142
154
|
end
|
143
155
|
end
|
144
156
|
|
157
|
+
test "other events trigger custom handlers" do
|
158
|
+
event = 'pull_request'
|
159
|
+
mock_handler = mock
|
160
|
+
mock_handler.expects(:call).with(pull_request_params.stringify_keys).once
|
161
|
+
Shipit::Webhooks.register_handler(event, mock_handler)
|
162
|
+
|
163
|
+
@request.headers['X-Github-Event'] = event
|
164
|
+
post :create, body: pull_request_params.to_json, as: :json
|
165
|
+
assert_response :ok
|
166
|
+
end
|
167
|
+
|
145
168
|
private
|
146
169
|
|
170
|
+
def pull_request_params
|
171
|
+
{ action: 'opened', number: 2, pull_request: 'foobar' }
|
172
|
+
end
|
173
|
+
|
147
174
|
def membership_params
|
148
|
-
{action: 'added', team: team_params, organization: {login: 'shopify'}, member: {login: 'walrus'}}
|
175
|
+
{ action: 'added', team: team_params, organization: { login: 'shopify' }, member: { login: 'walrus' } }
|
149
176
|
end
|
150
177
|
|
151
178
|
def team_params
|
152
|
-
{id: shipit_teams(:shopify_developers).id, slug: 'developers', name: 'Developers', url: 'http://example.com'}
|
179
|
+
{ id: shipit_teams(:shopify_developers).id, slug: 'developers', name: 'Developers', url: 'http://example.com' }
|
153
180
|
end
|
154
181
|
|
155
182
|
def george
|