shipit-engine 0.28.1 → 0.33.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/images/magic-solid.svg +1 -0
- data/app/assets/javascripts/shipit/repositories_search.js.coffee +60 -0
- data/app/assets/javascripts/shipit/{search.js.coffee → stack_search.js.coffee} +0 -0
- data/app/assets/stylesheets/_pages/_repositories.scss +148 -0
- data/app/assets/stylesheets/_pages/_stacks.scss +95 -3
- data/app/assets/stylesheets/merge_status.scss +0 -3
- data/app/assets/stylesheets/shipit.scss +1 -0
- 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/merge_requests_controller.rb +37 -0
- data/app/controllers/shipit/api/outputs_controller.rb +2 -1
- 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 +50 -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 +5 -4
- data/app/controllers/shipit/github_authentication_controller.rb +4 -3
- data/app/controllers/shipit/merge_requests_controller.rb +31 -0
- data/app/controllers/shipit/merge_status_controller.rb +33 -28
- data/app/controllers/shipit/release_statuses_controller.rb +3 -2
- data/app/controllers/shipit/repositories_controller.rb +74 -0
- 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 +9 -8
- data/app/controllers/shipit/webhooks_controller.rb +5 -132
- data/app/helpers/shipit/chunks_helper.rb +3 -2
- data/app/helpers/shipit/deploys_helper.rb +4 -3
- data/app/helpers/shipit/github_url_helper.rb +9 -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 +9 -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 +7 -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_repository_job.rb +24 -0
- data/app/jobs/shipit/destroy_stack_job.rb +5 -4
- 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 +1 -0
- data/app/jobs/shipit/github_sync_job.rb +2 -1
- data/app/jobs/shipit/{mark_deploy_healty_job.rb → mark_deploy_healthy_job.rb} +1 -0
- data/app/jobs/shipit/perform_commit_checks_job.rb +1 -0
- data/app/jobs/shipit/perform_task_job.rb +5 -90
- data/app/jobs/shipit/process_merge_requests_job.rb +32 -0
- 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_merge_request_job.rb +11 -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 +4 -3
- data/app/models/concerns/shipit/deferred_touch.rb +4 -3
- data/app/models/shipit/anonymous_user.rb +9 -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 +5 -4
- data/app/models/shipit/command_line_user.rb +5 -0
- data/app/models/shipit/commit.rb +41 -22
- data/app/models/shipit/commit_checks.rb +2 -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 +41 -10
- data/app/models/shipit/deploy_spec.rb +38 -7
- 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 +20 -7
- 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 +2 -1
- data/app/models/shipit/hook.rb +8 -5
- data/app/models/shipit/membership.rb +3 -2
- data/app/models/shipit/merge_request.rb +302 -0
- data/app/models/shipit/output_chunk.rb +7 -2
- data/app/models/shipit/provisioning_handler.rb +32 -0
- data/app/models/shipit/provisioning_handler/base.rb +30 -0
- data/app/models/shipit/provisioning_handler/unregistered_provisioning_handler.rb +35 -0
- data/app/models/shipit/pull_request.rb +27 -260
- data/app/models/shipit/pull_request_assignment.rb +10 -0
- data/app/models/shipit/record.rb +18 -0
- data/app/models/shipit/release_status.rb +3 -2
- data/app/models/shipit/repository.rb +97 -0
- data/app/models/shipit/review_stack.rb +116 -0
- data/app/models/shipit/review_stack_provisioning_queue.rb +39 -0
- data/app/models/shipit/rollback.rb +1 -0
- data/app/models/shipit/stack.rb +130 -57
- 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 +118 -14
- data/app/models/shipit/task_definition.rb +1 -0
- data/app/models/shipit/task_execution_strategy/base.rb +20 -0
- data/app/models/shipit/task_execution_strategy/default.rb +110 -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 +15 -8
- data/app/models/shipit/variable_definition.rb +1 -0
- data/app/models/shipit/webhooks.rb +43 -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/pull_request/assigned_handler.rb +74 -0
- data/app/models/shipit/webhooks/handlers/pull_request/closed_handler.rb +68 -0
- data/app/models/shipit/webhooks/handlers/pull_request/edited_handler.rb +74 -0
- data/app/models/shipit/webhooks/handlers/pull_request/label_capturing_handler.rb +127 -0
- data/app/models/shipit/webhooks/handlers/pull_request/labeled_handler.rb +106 -0
- data/app/models/shipit/webhooks/handlers/pull_request/opened_handler.rb +83 -0
- data/app/models/shipit/webhooks/handlers/pull_request/reopened_handler.rb +88 -0
- data/app/models/shipit/webhooks/handlers/pull_request/review_stack_adapter.rb +103 -0
- data/app/models/shipit/webhooks/handlers/pull_request/unlabeled_handler.rb +107 -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 +8 -1
- data/app/serializers/shipit/hook_serializer.rb +1 -0
- data/app/serializers/shipit/merge_request_serializer.rb +21 -0
- data/app/serializers/shipit/pull_request_serializer.rb +6 -8
- data/app/serializers/shipit/review_stack_serializer.rb +7 -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 +12 -5
- data/app/serializers/shipit/tail_task_serializer.rb +11 -2
- 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 +5 -3
- 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/show.html.erb +2 -2
- data/app/views/shipit/merge_requests/_merge_request.html.erb +29 -0
- data/app/views/shipit/{pull_requests → merge_requests}/index.html.erb +2 -2
- data/app/views/shipit/merge_requests/merge_requests/_pull_request.html.erb +29 -0
- data/app/views/shipit/merge_requests/merge_requests/index.html.erb +20 -0
- data/app/views/shipit/merge_status/_merge_queue_button.html.erb +3 -3
- data/app/views/shipit/merge_status/backlogged.html.erb +1 -1
- data/app/views/shipit/merge_status/failure.html.erb +1 -1
- data/app/views/shipit/merge_status/locked.html.erb +1 -1
- data/app/views/shipit/merge_status/logged_out.erb +1 -1
- data/app/views/shipit/merge_status/success.html.erb +2 -2
- data/app/views/shipit/repositories/_header.html.erb +19 -0
- data/app/views/shipit/repositories/index.html.erb +31 -0
- data/app/views/shipit/repositories/new.html.erb +23 -0
- data/app/views/shipit/repositories/settings.html.erb +53 -0
- data/app/views/shipit/repositories/show.html.erb +30 -0
- data/app/views/shipit/stacks/_banners.html.erb +13 -0
- data/app/views/shipit/stacks/_header.html.erb +30 -12
- data/app/views/shipit/stacks/_links.html.erb +1 -0
- data/app/views/shipit/stacks/_stack.html.erb +8 -0
- data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
- data/app/views/shipit/stacks/index.html.erb +9 -3
- data/app/views/shipit/stacks/settings.html.erb +22 -3
- data/app/views/shipit/stacks/show.html.erb +1 -1
- data/app/views/shipit/stacks/statistics.html.erb +82 -0
- data/app/views/shipit/tasks/_task_output.html.erb +1 -1
- 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 +29 -7
- 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/db/migrate/20200706145406_add_review_stacks.rb +12 -0
- data/db/migrate/20200804144639_rename_pull_request_to_merge_request.rb +7 -0
- data/db/migrate/20200804161512_rename_commits_pull_request_id_to_merge_request_id.rb +5 -0
- data/db/migrate/20200813134712_recreate_shipit_pull_requests.rb +22 -0
- data/db/migrate/20200813194056_create_pull_request_assignments.rb +8 -0
- data/db/migrate/20201001125502_add_provision_pr_stacks_flag_to_repositories.rb +7 -0
- data/db/migrate/20201008145809_add_retry_attempt_to_tasks.rb +5 -0
- data/db/migrate/20201008152744_add_max_retries_to_tasks.rb +5 -0
- data/lib/shipit.rb +23 -3
- 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 +41 -10
- data/lib/shipit/github_http_cache_middleware.rb +1 -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/review_stack_commands.rb +8 -0
- 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 +12 -4
- data/lib/shipit/stat.rb +1 -0
- data/lib/shipit/task_commands.rb +23 -14
- data/lib/shipit/version.rb +2 -1
- data/lib/snippets/release-gem +5 -1
- data/lib/tasks/cron.rake +13 -2
- 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/{pull_requests_controller_test.rb → merge_requests_controller_test.rb} +17 -16
- data/test/controllers/api/outputs_controller_test.rb +4 -2
- 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 +65 -16
- 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_requests_controller_test.rb +32 -0
- data/test/controllers/merge_status_controller_test.rb +27 -9
- data/test/controllers/release_statuses_controller_test.rb +3 -2
- data/test/controllers/repositories_controller_test.rb +71 -0
- data/test/controllers/rollbacks_controller_test.rb +9 -8
- data/test/controllers/stacks_controller_test.rb +72 -15
- data/test/controllers/status_controller_test.rb +1 -0
- data/test/controllers/tasks_controller_test.rb +33 -20
- data/test/controllers/webhooks_controller_test.rb +36 -9
- data/test/dummy/config/application.rb +7 -2
- data/test/dummy/config/environments/development.rb +23 -6
- data/test/dummy/config/environments/test.rb +2 -5
- data/test/dummy/db/schema.rb +76 -24
- data/test/dummy/db/seeds.rb +30 -16
- data/test/fixtures/payloads/check_suite_master.json +2 -2
- data/test/fixtures/payloads/invalid_pull_request.json +117 -0
- data/test/fixtures/payloads/provision_disabled_pull_request.json +454 -0
- data/test/fixtures/payloads/pull_request_assigned.json +480 -0
- data/test/fixtures/payloads/pull_request_closed.json +454 -0
- data/test/fixtures/payloads/pull_request_labeled.json +461 -0
- data/test/fixtures/payloads/pull_request_opened.json +454 -0
- data/test/fixtures/payloads/pull_request_reopened.json +454 -0
- data/test/fixtures/payloads/pull_request_unlabeled.json +454 -0
- data/test/fixtures/payloads/pull_request_with_no_repo.json +454 -0
- 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 +52 -1
- data/test/fixtures/shipit/merge_requests.yml +141 -0
- data/test/fixtures/shipit/pull_request_assignments.yml +3 -0
- data/test/fixtures/shipit/pull_requests.yml +10 -131
- data/test/fixtures/shipit/repositories.yml +28 -0
- data/test/fixtures/shipit/stacks.yml +335 -30
- data/test/fixtures/shipit/statuses.yml +9 -0
- data/test/fixtures/shipit/tasks.yml +69 -3
- data/test/fixtures/shipit/users.yml +7 -0
- 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 +5 -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 +16 -1
- data/test/jobs/deliver_hook_job_test.rb +1 -0
- data/test/jobs/destroy_repository_job_test.rb +27 -0
- 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/perform_task_job_test.rb +12 -11
- data/test/jobs/{merge_pull_requests_job_test.rb → process_merge_requests_job_test.rb} +19 -18
- 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 +1 -0
- data/test/lib/shipit/deploy_commands_test.rb +16 -0
- data/test/lib/shipit/task_commands_test.rb +17 -0
- 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 +116 -21
- data/test/models/delivery_test.rb +2 -1
- data/test/models/deploy_spec_test.rb +103 -65
- data/test/models/deploy_stats_test.rb +113 -0
- data/test/models/deploys_test.rb +207 -26
- 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/{pull_request_test.rb → merge_request_test.rb} +48 -41
- data/test/models/pull_request_assignment_test.rb +16 -0
- 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/provisioning_handler/base_test.rb +33 -0
- data/test/models/shipit/provisioning_handler/unregistered_provisioning_handler_test.rb +49 -0
- data/test/models/shipit/provisioning_handler_test.rb +64 -0
- data/test/models/shipit/pull_request_test.rb +52 -0
- data/test/models/shipit/repository_test.rb +81 -0
- data/test/models/shipit/review_stack_provision_status_test.rb +77 -0
- data/test/models/shipit/review_stack_provisioning_queue_test.rb +63 -0
- data/test/models/shipit/review_stack_test.rb +59 -0
- data/test/models/{stacks_test.rb → shipit/stacks_test.rb} +120 -60
- data/test/models/shipit/webhooks/handlers/pull_request/assigned_handler_test.rb +45 -0
- data/test/models/shipit/webhooks/handlers/pull_request/closed_handler_test.rb +192 -0
- data/test/models/shipit/webhooks/handlers/pull_request/edited_handler_test.rb +47 -0
- data/test/models/shipit/webhooks/handlers/pull_request/label_capturing_handler_test.rb +209 -0
- data/test/models/shipit/webhooks/handlers/pull_request/labeled_handler_test.rb +332 -0
- data/test/models/shipit/webhooks/handlers/pull_request/opened_handler_test.rb +238 -0
- data/test/models/shipit/webhooks/handlers/pull_request/reopened_handler_test.rb +282 -0
- data/test/models/shipit/webhooks/handlers/pull_request/review_stack_adapter_test.rb +83 -0
- data/test/models/shipit/webhooks/handlers/pull_request/unlabeled_handler_test.rb +324 -0
- data/test/models/shipit/webhooks/handlers_test.rb +27 -0
- 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 +59 -1
- data/test/models/team_test.rb +4 -2
- data/test/models/undeployed_commits_test.rb +14 -0
- data/test/models/users_test.rb +13 -5
- data/test/serializers/shipit/pull_request_serializer_test.rb +29 -0
- data/test/test_command_integration.rb +3 -2
- data/test/test_helper.rb +37 -32
- data/test/unit/anonymous_user_serializer_test.rb +14 -0
- data/test/unit/command_test.rb +15 -10
- 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 +137 -0
- data/test/unit/github_url_helper_test.rb +6 -0
- data/test/unit/rollback_commands_test.rb +2 -1
- data/test/unit/shipit_helper_test.rb +17 -0
- data/test/unit/shipit_task_execution_strategy_test.rb +47 -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 +334 -169
- data/app/controllers/shipit/api/pull_requests_controller.rb +0 -36
- data/app/controllers/shipit/pull_requests_controller.rb +0 -30
- data/app/jobs/shipit/merge_pull_requests_job.rb +0 -31
- data/app/jobs/shipit/refresh_pull_request_job.rb +0 -10
- data/app/views/shipit/pull_requests/_pull_request.html.erb +0 -29
- data/test/controllers/pull_requests_controller_test.rb +0 -31
- data/test/fixtures/shipit/output_chunks.yml +0 -47
- data/test/models/output_chunk_test.rb +0 -20
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'test_helper'
|
|
3
|
+
|
|
4
|
+
module Shipit
|
|
5
|
+
module Webhooks
|
|
6
|
+
class HandlersTest < ActiveSupport::TestCase
|
|
7
|
+
test 'custom handlers do not replace default shipit handlers' do
|
|
8
|
+
event = 'push'
|
|
9
|
+
mock_handler = mock
|
|
10
|
+
Shipit::Webhooks.register_handler(event, mock_handler)
|
|
11
|
+
|
|
12
|
+
assert_includes Shipit::Webhooks.for_event(event), mock_handler
|
|
13
|
+
assert_includes Shipit::Webhooks.for_event(event), Shipit::Webhooks::Handlers::PushHandler
|
|
14
|
+
|
|
15
|
+
Shipit::Webhooks.reset_handlers!
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
test "unknown events have no handlers" do
|
|
19
|
+
event = '_'
|
|
20
|
+
|
|
21
|
+
handlers = Shipit::Webhooks.for_event(event)
|
|
22
|
+
|
|
23
|
+
assert_equal [], handlers
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/test/models/status_test.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -11,10 +12,10 @@ module Shipit
|
|
|
11
12
|
'steps' => ['touch tmp/restart'],
|
|
12
13
|
'allow_concurrency' => true,
|
|
13
14
|
'variables' => [
|
|
14
|
-
{'name' => 'FOO', 'title' => 'Set to 0 to foo', 'default' => '1'},
|
|
15
|
-
{'name' => 'BAR', 'title' => 'Set to 1 to bar', 'default' => '0'},
|
|
16
|
-
{'name' => 'WALRUS', 'title' => 'Use with caution', 'default' => ' '},
|
|
17
|
-
{'name' => 'NODEFAULT', 'title' => 'Variable without default'},
|
|
15
|
+
{ 'name' => 'FOO', 'title' => 'Set to 0 to foo', 'default' => '1' },
|
|
16
|
+
{ 'name' => 'BAR', 'title' => 'Set to 1 to bar', 'default' => '0' },
|
|
17
|
+
{ 'name' => 'WALRUS', 'title' => 'Use with caution', 'default' => ' ' },
|
|
18
|
+
{ 'name' => 'NODEFAULT', 'title' => 'Variable without default' },
|
|
18
19
|
],
|
|
19
20
|
)
|
|
20
21
|
end
|
|
@@ -43,10 +44,10 @@ module Shipit
|
|
|
43
44
|
checklist: [],
|
|
44
45
|
allow_concurrency: true,
|
|
45
46
|
variables: [
|
|
46
|
-
{'name' => 'FOO', 'title' => 'Set to 0 to foo', 'default' => '1', 'select' => nil},
|
|
47
|
-
{'name' => 'BAR', 'title' => 'Set to 1 to bar', 'default' => '0', 'select' => nil},
|
|
48
|
-
{'name' => 'WALRUS', 'title' => 'Use with caution', 'default' => ' ', 'select' => nil},
|
|
49
|
-
{'name' => 'NODEFAULT', 'title' => 'Variable without default', 'default' => '', 'select' => nil},
|
|
47
|
+
{ 'name' => 'FOO', 'title' => 'Set to 0 to foo', 'default' => '1', 'select' => nil },
|
|
48
|
+
{ 'name' => 'BAR', 'title' => 'Set to 1 to bar', 'default' => '0', 'select' => nil },
|
|
49
|
+
{ 'name' => 'WALRUS', 'title' => 'Use with caution', 'default' => ' ', 'select' => nil },
|
|
50
|
+
{ 'name' => 'NODEFAULT', 'title' => 'Variable without default', 'default' => '', 'select' => nil },
|
|
50
51
|
],
|
|
51
52
|
}
|
|
52
53
|
assert_equal as_json, TaskDefinition.load(TaskDefinition.dump(@definition)).as_json
|
data/test/models/tasks_test.rb
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
4
5
|
class TasksTest < ActiveSupport::TestCase
|
|
5
6
|
test "#title interpolates env" do
|
|
6
7
|
task = shipit_tasks(:shipit_rendered_failover)
|
|
7
|
-
assert_equal({'POD_ID' => '12'}, task.env)
|
|
8
|
+
assert_equal({ 'POD_ID' => '12' }, task.env)
|
|
8
9
|
assert_equal 'Failover pod 12', task.title
|
|
9
10
|
end
|
|
10
11
|
|
|
@@ -30,5 +31,62 @@ module Shipit
|
|
|
30
31
|
|
|
31
32
|
task.write("hello\nworld")
|
|
32
33
|
end
|
|
34
|
+
|
|
35
|
+
test "#chunk_output truncates output exceeding the storage limit" do
|
|
36
|
+
task = shipit_tasks(:shipit)
|
|
37
|
+
Shipit.redis.del(task.send(:output_key))
|
|
38
|
+
|
|
39
|
+
task.write('a' * (Task::OUTPUT_SIZE_LIMIT * 1.1))
|
|
40
|
+
|
|
41
|
+
output = task.chunk_output
|
|
42
|
+
|
|
43
|
+
assert output.size <= Task::OUTPUT_SIZE_LIMIT, "Output was not truncated to the limit"
|
|
44
|
+
# We don't use assert_includes because it will print the whole message
|
|
45
|
+
assert(
|
|
46
|
+
output.include?(Task::OUTPUT_TRUNCATED_MESSAGE),
|
|
47
|
+
"'#{Task::OUTPUT_TRUNCATED_MESSAGE.chomp}' was not present in the output",
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
test "#retry_if_necessary creates a duplicated task object with pending status and nil created_at and ended_at" do
|
|
52
|
+
task = shipit_tasks(:shipit)
|
|
53
|
+
task_stack = task.stack
|
|
54
|
+
task.retry_if_necessary
|
|
55
|
+
|
|
56
|
+
retried_task = task_stack.deploys.last
|
|
57
|
+
|
|
58
|
+
assert_not_equal task.id, retried_task.id
|
|
59
|
+
assert_nil retried_task.started_at
|
|
60
|
+
assert_nil retried_task.ended_at
|
|
61
|
+
assert_equal 'pending', retried_task.status
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
test "#retry_if_necessary does not create a new task object if max_retries is nil" do
|
|
65
|
+
task = shipit_tasks(:shipit2)
|
|
66
|
+
|
|
67
|
+
assert_no_difference 'Task.count', 'No new task should be created' do
|
|
68
|
+
task.retry_if_necessary
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
test "#retry_if_necessary does not create a new task object if the stack is locked" do
|
|
73
|
+
task = shipit_tasks(:shipit2)
|
|
74
|
+
task.stack.lock("test", task.user)
|
|
75
|
+
|
|
76
|
+
assert_no_difference 'Task.count', 'No new task should be created' do
|
|
77
|
+
task.retry_if_necessary
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
test "#retries_configured? returns true when max_retries is not nil and is greater than zero" do
|
|
82
|
+
task_with_three_retries = shipit_tasks(:shipit)
|
|
83
|
+
assert_predicate task_with_three_retries, :retries_configured?
|
|
84
|
+
|
|
85
|
+
task_with_nil_retries = shipit_tasks(:shipit2)
|
|
86
|
+
refute_predicate task_with_nil_retries, :retries_configured?
|
|
87
|
+
|
|
88
|
+
task_with_zero_retries = shipit_tasks(:shipit_restart)
|
|
89
|
+
refute_predicate task_with_zero_retries, :retries_configured?
|
|
90
|
+
end
|
|
33
91
|
end
|
|
34
92
|
end
|
data/test/models/team_test.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -11,16 +12,17 @@ module Shipit
|
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
test ".find_or_create_by_handle fetch the team from github if it's not in the db already" do
|
|
14
|
-
Shipit.github.api.expects(:org_teams).with('shopify', per_page: 100)
|
|
15
15
|
response = stub(rels: {}, data: [new_team])
|
|
16
|
+
Shipit.github.api.expects(:org_teams).with('shopify', per_page: 100).returns(response.data)
|
|
16
17
|
Shipit.github.api.expects(:last_response).returns(response)
|
|
18
|
+
|
|
17
19
|
assert_difference -> { Team.count }, 1 do
|
|
18
20
|
Team.find_or_create_by_handle('Shopify/new-team')
|
|
19
21
|
end
|
|
20
22
|
end
|
|
21
23
|
|
|
22
24
|
test "#refresh_members! fetch all the team members from github" do
|
|
23
|
-
response = stub(rels: {members: members_resource})
|
|
25
|
+
response = stub(rels: { members: members_resource })
|
|
24
26
|
Shipit.github.api.expects(:get).with(@team.api_url).returns(response)
|
|
25
27
|
assert_difference -> { User.count }, 1 do
|
|
26
28
|
@team.refresh_members!
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -52,6 +53,19 @@ module Shipit
|
|
|
52
53
|
assert_predicate undeployed_commit, :expected_to_be_deployed?
|
|
53
54
|
end
|
|
54
55
|
|
|
56
|
+
test "#expected_to_be_deployed? returns true if the active task has no commit range" do
|
|
57
|
+
commit = shipit_commits(:task_no_commits)
|
|
58
|
+
next_expected_commit_to_deploy = commit.stack.next_expected_commit_to_deploy
|
|
59
|
+
undeployed_commit = UndeployedCommit.new(commit, index: 1, next_expected_commit_to_deploy: next_expected_commit_to_deploy)
|
|
60
|
+
|
|
61
|
+
refute_predicate next_expected_commit_to_deploy, :nil?
|
|
62
|
+
assert_predicate undeployed_commit.stack, :continuous_deployment
|
|
63
|
+
assert next_expected_commit_to_deploy.id >= undeployed_commit.id
|
|
64
|
+
refute_predicate undeployed_commit, :active?
|
|
65
|
+
|
|
66
|
+
assert_predicate undeployed_commit, :expected_to_be_deployed?
|
|
67
|
+
end
|
|
68
|
+
|
|
55
69
|
test "#expected_to_be_deployed? returns false if the stack has continuous deployment disabled" do
|
|
56
70
|
commit = shipit_commits(:cyclimse_first)
|
|
57
71
|
next_expected_commit_to_deploy = commit.stack.next_expected_commit_to_deploy
|
data/test/models/users_test.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -91,8 +92,8 @@ module Shipit
|
|
|
91
92
|
|
|
92
93
|
stub_request(:get, @emails_url).to_return(
|
|
93
94
|
status: %w(200 OK),
|
|
94
|
-
body: [{email: expected_email}].to_json,
|
|
95
|
-
headers: {"Content-Type" => "application/json"},
|
|
95
|
+
body: [{ email: expected_email }].to_json,
|
|
96
|
+
headers: { "Content-Type" => "application/json" },
|
|
96
97
|
)
|
|
97
98
|
|
|
98
99
|
user = User.find_or_create_from_github(@github_user)
|
|
@@ -119,7 +120,7 @@ module Shipit
|
|
|
119
120
|
stub_request(:get, @emails_url).to_return(
|
|
120
121
|
status: %w(200 OK),
|
|
121
122
|
body: result_email_records.to_json,
|
|
122
|
-
headers: {"Content-Type" => "application/json"},
|
|
123
|
+
headers: { "Content-Type" => "application/json" },
|
|
123
124
|
)
|
|
124
125
|
|
|
125
126
|
user = User.find_or_create_from_github(@github_user)
|
|
@@ -141,7 +142,7 @@ module Shipit
|
|
|
141
142
|
stub_request(:get, @emails_url).to_return(
|
|
142
143
|
status: %w(200 OK),
|
|
143
144
|
body: result_email_records.to_json,
|
|
144
|
-
headers: {"Content-Type" => "application/json"},
|
|
145
|
+
headers: { "Content-Type" => "application/json" },
|
|
145
146
|
)
|
|
146
147
|
|
|
147
148
|
user = User.find_or_create_from_github(@github_user)
|
|
@@ -162,9 +163,16 @@ module Shipit
|
|
|
162
163
|
assert_nil user.email
|
|
163
164
|
end
|
|
164
165
|
|
|
166
|
+
test "find_or_create_from_github handles user 401" do
|
|
167
|
+
Shipit.preferred_org_emails = [@org_domain]
|
|
168
|
+
Octokit::Client.any_instance.expects(:emails).raises(Octokit::Unauthorized)
|
|
169
|
+
user = User.find_or_create_from_github(@minimal_github_user)
|
|
170
|
+
assert_nil user.email
|
|
171
|
+
end
|
|
172
|
+
|
|
165
173
|
test "#identifiers_for_ping returns a hash with the user's github_id, name, email and github_login" do
|
|
166
174
|
user = shipit_users(:bob)
|
|
167
|
-
expected_ouput = {github_id: user.github_id, name: user.name, email: user.email, github_login: user.login}
|
|
175
|
+
expected_ouput = { github_id: user.github_id, name: user.name, email: user.email, github_login: user.login }
|
|
168
176
|
assert_equal expected_ouput, user.identifiers_for_ping
|
|
169
177
|
end
|
|
170
178
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "test_helper"
|
|
4
|
+
|
|
5
|
+
module Shipit
|
|
6
|
+
class PulLRequestSerializerTest < ActiveSupport::TestCase
|
|
7
|
+
test "structure" do
|
|
8
|
+
pull_request = shipit_pull_requests(:review_stack_review)
|
|
9
|
+
|
|
10
|
+
serialized = serializer.new(pull_request).as_json
|
|
11
|
+
|
|
12
|
+
assert_includes serialized.keys, :id
|
|
13
|
+
assert_includes serialized.keys, :number
|
|
14
|
+
assert_includes serialized.keys, :title
|
|
15
|
+
assert_includes serialized.keys, :github_id
|
|
16
|
+
assert_includes serialized.keys, :additions
|
|
17
|
+
assert_includes serialized.keys, :deletions
|
|
18
|
+
assert_includes serialized.keys, :state
|
|
19
|
+
assert_includes serialized.keys, :html_url
|
|
20
|
+
assert_includes serialized.keys, :user
|
|
21
|
+
assert_includes serialized.keys, :assignees
|
|
22
|
+
assert_includes serialized.keys, :head
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def serializer
|
|
26
|
+
Shipit::PullRequestSerializer
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
path = './fixtures/timeout'
|
|
4
5
|
buffer = []
|
|
5
|
-
command = Shipit::Command.new({path => {'timeout' => 2}}, env: {}, chdir: __dir__)
|
|
6
|
+
command = Shipit::Command.new({ path => { 'timeout' => 2 } }, env: {}, chdir: __dir__)
|
|
6
7
|
begin
|
|
7
8
|
command.stream! do |chunk|
|
|
8
9
|
buffer << chunk
|
|
@@ -24,5 +25,5 @@ unless buffer.join == expected_output.join
|
|
|
24
25
|
puts "Got: ------------"
|
|
25
26
|
puts buffer.map(&:inspect).join("\n")
|
|
26
27
|
puts "-----------------"
|
|
27
|
-
exit
|
|
28
|
+
exit(1)
|
|
28
29
|
end
|
data/test/test_helper.rb
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
ENV["RAILS_ENV"] ||= "test"
|
|
2
3
|
|
|
3
4
|
require 'simplecov'
|
|
4
|
-
SimpleCov.start
|
|
5
|
+
SimpleCov.start('rails') do
|
|
6
|
+
enable_coverage :branch
|
|
7
|
+
end
|
|
5
8
|
|
|
6
9
|
require 'webmock/minitest'
|
|
7
10
|
|
|
@@ -11,13 +14,13 @@ ActiveRecord::Migrator.migrations_paths = [
|
|
|
11
14
|
File.expand_path('../../db/migrate', __FILE__),
|
|
12
15
|
]
|
|
13
16
|
require 'rails/test_help'
|
|
14
|
-
require 'mocha/
|
|
17
|
+
require 'mocha/minitest'
|
|
15
18
|
require 'spy/integration'
|
|
16
19
|
|
|
17
20
|
# Load fixtures from the engine
|
|
18
21
|
if ActiveSupport::TestCase.respond_to?(:fixture_path=)
|
|
19
22
|
ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
|
|
20
|
-
ActiveSupport::TestCase.fixtures
|
|
23
|
+
ActiveSupport::TestCase.fixtures(:all)
|
|
21
24
|
end
|
|
22
25
|
|
|
23
26
|
Dir[File.expand_path('../helpers/**/*.rb', __FILE__)].each do |helper|
|
|
@@ -29,41 +32,43 @@ begin
|
|
|
29
32
|
rescue LoadError
|
|
30
33
|
end
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
module ActiveSupport
|
|
36
|
+
class TestCase
|
|
37
|
+
include PayloadsHelper
|
|
38
|
+
include FixtureAliasesHelper
|
|
39
|
+
include QueriesHelper
|
|
40
|
+
include JSONHelper
|
|
41
|
+
include LinksHelper
|
|
42
|
+
include ApiHelper
|
|
43
|
+
include HooksHelper
|
|
44
|
+
include ActiveJob::TestHelper
|
|
41
45
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
+
setup do
|
|
47
|
+
@routes = Shipit::Engine.routes
|
|
48
|
+
Shipit.github.api.stubs(:login).returns('shipit')
|
|
49
|
+
end
|
|
46
50
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
teardown do
|
|
52
|
+
Shipit.redis.flushdb
|
|
53
|
+
Shipit.instance_variable_names.each do |name|
|
|
54
|
+
next if %w(@mocha @redis).include?(name)
|
|
55
|
+
Shipit.remove_instance_variable(name)
|
|
56
|
+
end
|
|
52
57
|
end
|
|
53
|
-
end
|
|
54
58
|
|
|
55
|
-
|
|
59
|
+
ActiveRecord::Migration.check_pending!
|
|
56
60
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
|
|
62
|
+
#
|
|
63
|
+
# Note: You'll currently still have to declare fixtures explicitly in integration tests
|
|
64
|
+
# -- they do not yet inherit this setting
|
|
65
|
+
fixtures :all
|
|
62
66
|
|
|
63
|
-
|
|
64
|
-
|
|
67
|
+
# Add more helper methods to be used by all tests here...
|
|
68
|
+
private
|
|
65
69
|
|
|
66
|
-
|
|
67
|
-
|
|
70
|
+
def resource(data)
|
|
71
|
+
Sawyer::Resource.new(Sawyer::Agent.new('http://example.com'), data)
|
|
72
|
+
end
|
|
68
73
|
end
|
|
69
74
|
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'test_helper'
|
|
3
|
+
|
|
4
|
+
module Shipit
|
|
5
|
+
class AnonymousUserSerializerTest < ActiveSupport::TestCase
|
|
6
|
+
test 'sets anonymous to true' do
|
|
7
|
+
user = AnonymousUser.new
|
|
8
|
+
serializer = ActiveModel::Serializer.serializer_for(user)
|
|
9
|
+
assert_equal AnonymousUserSerializer, serializer
|
|
10
|
+
serialized = serializer.new(user).to_json
|
|
11
|
+
assert_json("anonymous", true, document: serialized)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
data/test/unit/command_test.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -9,28 +10,32 @@ module Shipit
|
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
test "#interpolate_environment_variables replace environment variables by their value" do
|
|
12
|
-
command = Command.new('cap $ENVIRONMENT deploy', env: {'ENVIRONMENT' => 'production'}, chdir: '.')
|
|
13
|
+
command = Command.new('cap $ENVIRONMENT deploy', env: { 'ENVIRONMENT' => 'production' }, chdir: '.')
|
|
13
14
|
assert_equal [%(cap production deploy)], command.interpolated_arguments
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
test "#interpolate_environment_variables coerce nil to empty string" do
|
|
17
|
-
command = Command.new('cap $FOO deploy', env: {'ENVIRONMENT' => 'production'}, chdir: '.')
|
|
18
|
+
command = Command.new('cap $FOO deploy', env: { 'ENVIRONMENT' => 'production' }, chdir: '.')
|
|
18
19
|
assert_equal [%(cap '' deploy)], command.interpolated_arguments
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
test '#interpolate_environment_variables escape the variable contents' do
|
|
22
23
|
malicious_string = '$(echo pwnd)'
|
|
23
|
-
command = Command.new('echo $FOO', env: {'FOO' => malicious_string}, chdir: '.')
|
|
24
|
+
command = Command.new('echo $FOO', env: { 'FOO' => malicious_string }, chdir: '.')
|
|
24
25
|
assert_equal malicious_string, command.run.chomp
|
|
25
26
|
end
|
|
26
27
|
|
|
27
28
|
test "#interpolate_environment_variables fallback to ENV" do
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
previous = ENV['SHIPIT_TEST']
|
|
30
|
+
ENV['SHIPIT_TEST'] = 'quux'
|
|
31
|
+
command = Command.new('cap $SHIPIT_TEST deploy', env: { 'ENVIRONMENT' => 'production' }, chdir: '.')
|
|
32
|
+
assert_equal([%(cap quux deploy)], command.interpolated_arguments)
|
|
33
|
+
ensure
|
|
34
|
+
ENV['SHIPIT_TEST'] = previous
|
|
30
35
|
end
|
|
31
36
|
|
|
32
37
|
test "#timeout is 5 minutes by default" do
|
|
33
|
-
command = Command.new('cap $LANG deploy', env: {'ENVIRONMENT' => 'production'}, chdir: '.')
|
|
38
|
+
command = Command.new('cap $LANG deploy', env: { 'ENVIRONMENT' => 'production' }, chdir: '.')
|
|
34
39
|
assert_equal 5.minutes.to_i, command.timeout
|
|
35
40
|
end
|
|
36
41
|
|
|
@@ -40,7 +45,7 @@ module Shipit
|
|
|
40
45
|
end
|
|
41
46
|
|
|
42
47
|
test "#timeout returns the command option timeout over the `default_timeout` if present" do
|
|
43
|
-
command = Command.new({'cap $LANG deploy' => {'timeout' => 10}}, default_timeout: 5, env: {}, chdir: '.')
|
|
48
|
+
command = Command.new({ 'cap $LANG deploy' => { 'timeout' => 10 } }, default_timeout: 5, env: {}, chdir: '.')
|
|
44
49
|
assert_equal 10, command.timeout
|
|
45
50
|
end
|
|
46
51
|
|
|
@@ -54,14 +59,14 @@ module Shipit
|
|
|
54
59
|
end
|
|
55
60
|
|
|
56
61
|
test "command not found" do
|
|
57
|
-
error = assert_raises
|
|
62
|
+
error = assert_raises(Command::NotFound) do
|
|
58
63
|
Command.new('does-not-exist foo bar', env: {}, chdir: '.').run
|
|
59
64
|
end
|
|
60
65
|
assert_equal 'does-not-exist: command not found', error.message
|
|
61
66
|
end
|
|
62
67
|
|
|
63
68
|
test "permission denied" do
|
|
64
|
-
error = assert_raises
|
|
69
|
+
error = assert_raises(Command::Denied) do
|
|
65
70
|
Command.new('/etc/passwd foo bar', env: {}, chdir: '.').run
|
|
66
71
|
end
|
|
67
72
|
assert_equal '/etc/passwd: Permission denied', error.message
|
|
@@ -116,7 +121,7 @@ module Shipit
|
|
|
116
121
|
signalled = true
|
|
117
122
|
break
|
|
118
123
|
end
|
|
119
|
-
sleep
|
|
124
|
+
sleep(0.1)
|
|
120
125
|
end
|
|
121
126
|
signalled
|
|
122
127
|
end
|