From 6c839aebece5ffe90cd216211b17d74b92708fc4 Mon Sep 17 00:00:00 2001 From: Christopher Weyand Date: Mon, 14 Mar 2016 11:03:41 +0100 Subject: [PATCH] feature flag test --- lib/travis/api/v3/services/cron/create.rb | 1 + lib/travis/api/v3/services/cron/delete.rb | 1 + lib/travis/api/v3/services/cron/find.rb | 1 + lib/travis/api/v3/services/cron/for_branch.rb | 1 + .../api/v3/services/crons/for_repository.rb | 1 + lib/travis/api/v3/services/crons/start.rb | 1 + spec/v3/services/cron/create_spec.rb | 14 ++ spec/v3/services/cron/delete_spec.rb | 14 ++ spec/v3/services/cron/find_spec.rb | 14 ++ spec/v3/services/cron/for_branch_spec.rb | 14 ++ spec/v3/services/crons/for_repository_spec.rb | 14 ++ travis-api.gemspec | 130 +++++++++++++++--- 12 files changed, 186 insertions(+), 20 deletions(-) diff --git a/lib/travis/api/v3/services/cron/create.rb b/lib/travis/api/v3/services/cron/create.rb index 32f245f3..e676c158 100644 --- a/lib/travis/api/v3/services/cron/create.rb +++ b/lib/travis/api/v3/services/cron/create.rb @@ -5,6 +5,7 @@ module Travis::API::V3 def run! raise LoginRequired unless access_control.logged_in? or access_control.full_access? + raise InsufficientAccess unless Travis::Features.feature_active?(:cron) raise NotFound unless repository = find(:repository) raise NotFound unless branch = find(:branch, repository) raise Error.new('Invalid value for interval. Interval must be "daily", "weekly" or "monthly"!', status: 422) unless ["daily", "weekly", "monthly"].include?(params["interval"]) diff --git a/lib/travis/api/v3/services/cron/delete.rb b/lib/travis/api/v3/services/cron/delete.rb index c5d9287d..256f97c7 100644 --- a/lib/travis/api/v3/services/cron/delete.rb +++ b/lib/travis/api/v3/services/cron/delete.rb @@ -4,6 +4,7 @@ module Travis::API::V3 def run! raise LoginRequired unless access_control.logged_in? or access_control.full_access? + raise InsufficientAccess unless Travis::Features.feature_active?(:cron) cron = find access_control.permissions(cron).delete! cron.destroy diff --git a/lib/travis/api/v3/services/cron/find.rb b/lib/travis/api/v3/services/cron/find.rb index 6a191d7a..33a337d6 100644 --- a/lib/travis/api/v3/services/cron/find.rb +++ b/lib/travis/api/v3/services/cron/find.rb @@ -3,6 +3,7 @@ module Travis::API::V3 #params :id def run! + raise InsufficientAccess unless Travis::Features.feature_active?(:cron) find end end diff --git a/lib/travis/api/v3/services/cron/for_branch.rb b/lib/travis/api/v3/services/cron/for_branch.rb index 0290e112..d2396e9b 100644 --- a/lib/travis/api/v3/services/cron/for_branch.rb +++ b/lib/travis/api/v3/services/cron/for_branch.rb @@ -2,6 +2,7 @@ module Travis::API::V3 class Services::Cron::ForBranch < Service def run! + raise InsufficientAccess unless Travis::Features.feature_active?(:cron) query.find_for_branch(find(:branch, find(:repository))) end end diff --git a/lib/travis/api/v3/services/crons/for_repository.rb b/lib/travis/api/v3/services/crons/for_repository.rb index 48c488f6..2b746fc1 100644 --- a/lib/travis/api/v3/services/crons/for_repository.rb +++ b/lib/travis/api/v3/services/crons/for_repository.rb @@ -3,6 +3,7 @@ module Travis::API::V3 paginate def run! + raise InsufficientAccess unless Travis::Features.feature_active?(:cron) query.find(find(:repository)) end end diff --git a/lib/travis/api/v3/services/crons/start.rb b/lib/travis/api/v3/services/crons/start.rb index 104d43f5..0bfa3a16 100644 --- a/lib/travis/api/v3/services/crons/start.rb +++ b/lib/travis/api/v3/services/crons/start.rb @@ -2,6 +2,7 @@ module Travis::API::V3 class Services::Crons::Start < Service def run! + raise InsufficientAccess unless Travis::Features.feature_active?(:cron) query.start_all() end diff --git a/spec/v3/services/cron/create_spec.rb b/spec/v3/services/cron/create_spec.rb index 115d2f95..f007f106 100644 --- a/spec/v3/services/cron/create_spec.rb +++ b/spec/v3/services/cron/create_spec.rb @@ -11,6 +11,20 @@ describe Travis::API::V3::Services::Cron::Create do let(:wrong_options) {{ "interval" => "notExisting", "disable_by_build" => false }} let(:parsed_body) { JSON.load(body) } + before do + Travis::Features.enable_for_all(:cron) + end + + describe "no Feature enabled" do + before { Travis::Features.disable_for_all(:cron) } + before { post("/v3/repo/#{repo.id}/branch/#{branch.name}/cron", options, headers)} + example { expect(parsed_body).to be == { + "@type"=> "error", + "error_type"=> "insufficient_access", + "error_message"=> "forbidden" + }} + end + describe "creating a cron job" do before { last_cron } before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, push: true) } diff --git a/spec/v3/services/cron/delete_spec.rb b/spec/v3/services/cron/delete_spec.rb index cecf96d8..ee920566 100644 --- a/spec/v3/services/cron/delete_spec.rb +++ b/spec/v3/services/cron/delete_spec.rb @@ -8,6 +8,20 @@ describe Travis::API::V3::Services::Cron::Delete do let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }} let(:parsed_body) { JSON.load(body) } + before do + Travis::Features.enable_for_all(:cron) + end + + describe "no Feature enabled" do + before { Travis::Features.disable_for_all(:cron) } + before { delete("/v3/cron/#{cron.id}", {}, headers)} + example { expect(parsed_body).to be == { + "@type"=> "error", + "error_type"=> "insufficient_access", + "error_message"=> "forbidden" + }} + end + describe "deleting a cron job by id" do before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, push: true) } before { delete("/v3/cron/#{cron.id}", {}, headers) } diff --git a/spec/v3/services/cron/find_spec.rb b/spec/v3/services/cron/find_spec.rb index 36e1deb4..4f165e2b 100644 --- a/spec/v3/services/cron/find_spec.rb +++ b/spec/v3/services/cron/find_spec.rb @@ -6,6 +6,20 @@ describe Travis::API::V3::Services::Cron::Find do let(:cron) { Travis::API::V3::Models::Cron.create(branch: branch, interval:'daily') } let(:parsed_body) { JSON.load(body) } + before do + Travis::Features.enable_for_all(:cron) + end + + describe "no Feature enabled" do + before { Travis::Features.disable_for_all(:cron) } + before { get("/v3/cron/#{cron.id}") } + example { expect(parsed_body).to be == { + "@type"=> "error", + "error_type"=> "insufficient_access", + "error_message"=> "forbidden" + }} + end + describe "fetching a cron job by id" do before { get("/v3/cron/#{cron.id}") } example { expect(last_response).to be_ok } diff --git a/spec/v3/services/cron/for_branch_spec.rb b/spec/v3/services/cron/for_branch_spec.rb index 13ca127d..ad445b5a 100644 --- a/spec/v3/services/cron/for_branch_spec.rb +++ b/spec/v3/services/cron/for_branch_spec.rb @@ -6,6 +6,20 @@ describe Travis::API::V3::Services::Cron::ForBranch do let(:cron) { Travis::API::V3::Models::Cron.create(branch: branch, interval:'daily') } let(:parsed_body) { JSON.load(body) } + before do + Travis::Features.enable_for_all(:cron) + end + + describe "no Feature enabled" do + before { Travis::Features.disable_for_all(:cron) } + before { get("/v3/repo/#{repo.id}/branch/#{branch.name}/cron") } + example { expect(parsed_body).to be == { + "@type"=> "error", + "error_type"=> "insufficient_access", + "error_message"=> "forbidden" + }} + end + describe "fetching all crons by repo id" do before { cron } before { get("/v3/repo/#{repo.id}/branch/#{branch.name}/cron") } diff --git a/spec/v3/services/crons/for_repository_spec.rb b/spec/v3/services/crons/for_repository_spec.rb index ad6d2ba3..2d005f24 100644 --- a/spec/v3/services/crons/for_repository_spec.rb +++ b/spec/v3/services/crons/for_repository_spec.rb @@ -6,6 +6,20 @@ describe Travis::API::V3::Services::Crons::ForRepository do let(:cron) { Travis::API::V3::Models::Cron.create(branch: branch, interval:'daily') } let(:parsed_body) { JSON.load(body) } + before do + Travis::Features.enable_for_all(:cron) + end + + describe "no Feature enabled" do + before { Travis::Features.disable_for_all(:cron) } + before { get("/v3/repo/#{repo.id}/crons") } + example { expect(parsed_body).to be == { + "@type"=> "error", + "error_type"=> "insufficient_access", + "error_message"=> "forbidden" + }} + end + describe "fetching all crons by repo id" do before { cron } before { get("/v3/repo/#{repo.id}/crons") } diff --git a/travis-api.gemspec b/travis-api.gemspec index 92ee8839..e07241d9 100644 --- a/travis-api.gemspec +++ b/travis-api.gemspec @@ -12,74 +12,90 @@ Gem::Specification.new do |s| "Konstantin Haase", "Piotr Sarnacki", "Sven Fuchs", + "carlad", "Hiro Asari", "Mathias Meyer", "Josh Kalderimis", "Henrik Hodne", - "carlad", + "Steffen Kötte", + "Lennard Wolf", "Tyranja", - "Andre Arko", "Dan Buch", + "Andre Arko", "C. Scott Ananian", "Erik Michaels-Ober", "Brian Ford", + "Jonas Chromik", + "Steffen", "Steve Richert", + "Bryan Goldstein", + "Dan Rice", + "James Dennes", + "María de Antón", + "Nick Schonning", + "Patrick Williams", "Puneeth Chaganti", "Thais Camilo and Konstantin Haase", "Tim Carey-Smith", - "Bryan Goldstein", "Zachary Scott", - "James Dennes", - "rainsun", - "Nick Schonning", - "Patrick Williams", - "Dan Rice" + "rainsun" ] s.email = [ "konstantin.mailinglists@googlemail.com", "drogus@gmail.com", "me@svenfuchs.com", + "carla@travis-ci.com", "asari.ruby@gmail.com", "meyer@paperplanes.de", "josh.kalderimis@gmail.com", + "steffen.koette@gmail.com", "me@henrikhodne.com", "henrik@hodne.io", + "carlad@users.noreply.github.com", "konstantin.haase@gmail.com", + "lennardwolf@live.de", "carla@travis-ci.org", "tyranja@cassiopeia.uberspace.de", "andre@arko.net", - "svenfuchs@artweb-design.de", "dan@travis-ci.org", - "sferik@gmail.com", + "svenfuchs@artweb-design.de", "cscott@cscott.net", - "henrik@travis-ci.com", - "steve.richert@gmail.com", + "sferik@gmail.com", "bford@engineyard.com", + "henrik@travis-ci.com", + "Jonas.Chromik@student.hpi.uni-potsdam.de", + "steffen.koette@gmail.com", + "steve.richert@gmail.com", + "brysgo@gmail.com", + "dan@meatballhat.com", + "dan@zoombody.com", + "jdennes@gmail.com", + "MariadeAnton@users.noreply.github.com", + "nschonni@gmail.com", "patrick@bittorrent.com", "punchagan@muse-amuse.in", - "carlad@users.noreply.github.com", - "dan@zoombody.com", - "rainsuner@gmail.com", "dev+narwen+rkh@rkh.im", "tim@spork.in", - "brysgo@gmail.com", "e@zzak.io", - "jdennes@gmail.com", - "nschonni@gmail.com", - "dan@meatballhat.com" + "rainsuner@gmail.com" ] s.files = [ "CONTRIBUTING.md", + "LICENSE", "Procfile", "README.md", "Rakefile", "bin/start-nginx", "config.ru", "config/database.yml", + "config/mime.types", + "config/nginx.conf.erb", "config/puma-config.rb", + "config/ruby_config.sh", "config/unicorn.rb", + "lib/active_record_postgres_variables.rb", "lib/conditional_skylight.rb", "lib/tasks/build_update_branch.rake", "lib/tasks/build_update_pull_request_data.rake", @@ -141,6 +157,7 @@ Gem::Specification.new do |s| "lib/travis/api/app/responders/xml.rb", "lib/travis/api/app/services/schedule_request.rb", "lib/travis/api/app/stack_instrumentation.rb", + "lib/travis/api/attack.rb", "lib/travis/api/instruments.rb", "lib/travis/api/serializer.rb", "lib/travis/api/v2.rb", @@ -191,6 +208,7 @@ Gem::Specification.new do |s| "lib/travis/api/v3/models/broadcast.rb", "lib/travis/api/v3/models/build.rb", "lib/travis/api/v3/models/commit.rb", + "lib/travis/api/v3/models/cron.rb", "lib/travis/api/v3/models/email.rb", "lib/travis/api/v3/models/job.rb", "lib/travis/api/v3/models/log.rb", @@ -201,14 +219,33 @@ Gem::Specification.new do |s| "lib/travis/api/v3/models/repository.rb", "lib/travis/api/v3/models/request.rb", "lib/travis/api/v3/models/ssl_key.rb", + "lib/travis/api/v3/models/star.rb", "lib/travis/api/v3/models/subscription.rb", "lib/travis/api/v3/models/token.rb", "lib/travis/api/v3/models/user.rb", "lib/travis/api/v3/opt_in.rb", + "lib/travis/api/v3/paginator.rb", + "lib/travis/api/v3/paginator/url_generator.rb", + "lib/travis/api/v3/permissions.rb", + "lib/travis/api/v3/permissions/account.rb", + "lib/travis/api/v3/permissions/build.rb", + "lib/travis/api/v3/permissions/cron.rb", + "lib/travis/api/v3/permissions/generic.rb", + "lib/travis/api/v3/permissions/job.rb", + "lib/travis/api/v3/permissions/organization.rb", + "lib/travis/api/v3/permissions/repository.rb", + "lib/travis/api/v3/permissions/user.rb", "lib/travis/api/v3/queries.rb", "lib/travis/api/v3/queries/accounts.rb", "lib/travis/api/v3/queries/branch.rb", + "lib/travis/api/v3/queries/branches.rb", + "lib/travis/api/v3/queries/broadcasts.rb", "lib/travis/api/v3/queries/build.rb", + "lib/travis/api/v3/queries/builds.rb", + "lib/travis/api/v3/queries/cron.rb", + "lib/travis/api/v3/queries/crons.rb", + "lib/travis/api/v3/queries/job.rb", + "lib/travis/api/v3/queries/jobs.rb", "lib/travis/api/v3/queries/organization.rb", "lib/travis/api/v3/queries/organizations.rb", "lib/travis/api/v3/queries/owner.rb", @@ -224,15 +261,25 @@ Gem::Specification.new do |s| "lib/travis/api/v3/renderer/accounts.rb", "lib/travis/api/v3/renderer/avatar_url.rb", "lib/travis/api/v3/renderer/branch.rb", + "lib/travis/api/v3/renderer/branches.rb", + "lib/travis/api/v3/renderer/broadcast.rb", + "lib/travis/api/v3/renderer/broadcasts.rb", "lib/travis/api/v3/renderer/build.rb", + "lib/travis/api/v3/renderer/builds.rb", "lib/travis/api/v3/renderer/collection_renderer.rb", + "lib/travis/api/v3/renderer/commit.rb", + "lib/travis/api/v3/renderer/cron.rb", + "lib/travis/api/v3/renderer/crons.rb", "lib/travis/api/v3/renderer/error.rb", + "lib/travis/api/v3/renderer/job.rb", + "lib/travis/api/v3/renderer/jobs.rb", "lib/travis/api/v3/renderer/model_renderer.rb", "lib/travis/api/v3/renderer/organization.rb", "lib/travis/api/v3/renderer/organizations.rb", "lib/travis/api/v3/renderer/owner.rb", "lib/travis/api/v3/renderer/repositories.rb", "lib/travis/api/v3/renderer/repository.rb", + "lib/travis/api/v3/renderer/request.rb", "lib/travis/api/v3/renderer/requests.rb", "lib/travis/api/v3/renderer/user.rb", "lib/travis/api/v3/result.rb", @@ -245,19 +292,38 @@ Gem::Specification.new do |s| "lib/travis/api/v3/services.rb", "lib/travis/api/v3/services/accounts/for_current_user.rb", "lib/travis/api/v3/services/branch/find.rb", + "lib/travis/api/v3/services/branches/find.rb", + "lib/travis/api/v3/services/broadcasts/for_current_user.rb", + "lib/travis/api/v3/services/build/cancel.rb", "lib/travis/api/v3/services/build/find.rb", + "lib/travis/api/v3/services/build/restart.rb", + "lib/travis/api/v3/services/builds/find.rb", + "lib/travis/api/v3/services/cron/create.rb", + "lib/travis/api/v3/services/cron/delete.rb", + "lib/travis/api/v3/services/cron/find.rb", + "lib/travis/api/v3/services/cron/for_branch.rb", + "lib/travis/api/v3/services/crons/for_repository.rb", + "lib/travis/api/v3/services/crons/start.rb", + "lib/travis/api/v3/services/job/cancel.rb", + "lib/travis/api/v3/services/job/find.rb", + "lib/travis/api/v3/services/job/restart.rb", + "lib/travis/api/v3/services/jobs/find.rb", "lib/travis/api/v3/services/organization/find.rb", "lib/travis/api/v3/services/organization/sync.rb", "lib/travis/api/v3/services/organizations/for_current_user.rb", "lib/travis/api/v3/services/owner/find.rb", "lib/travis/api/v3/services/repositories/for_current_user.rb", + "lib/travis/api/v3/services/repositories/for_owner.rb", "lib/travis/api/v3/services/repository/disable.rb", "lib/travis/api/v3/services/repository/enable.rb", "lib/travis/api/v3/services/repository/find.rb", + "lib/travis/api/v3/services/repository/star.rb", + "lib/travis/api/v3/services/repository/unstar.rb", "lib/travis/api/v3/services/requests/create.rb", "lib/travis/api/v3/services/requests/find.rb", "lib/travis/api/v3/services/user/current.rb", "lib/travis/api/v3/services/user/find.rb", + "lib/travis/api/v3/services/user/sync.rb", "lib/travis/api/workers/build_cancellation.rb", "lib/travis/api/workers/build_restart.rb", "lib/travis/api/workers/job_cancellation.rb", @@ -280,6 +346,8 @@ Gem::Specification.new do |s| "script/console", "script/repos_stats.rb", "script/server", + "script/web_concurrency", + "spec/active_record_postgres_variables_spec.rb", "spec/integration/error_handling_spec.rb", "spec/integration/formats_handling_spec.rb", "spec/integration/responders_spec.rb", @@ -344,7 +412,7 @@ Gem::Specification.new do |s| "spec/unit/endpoint/lint_spec.rb", "spec/unit/endpoint/logs_spec.rb", "spec/unit/endpoint/repos_spec.rb", - "spec/unit/endpoint/requests_spec.rb", + "spec/unit/endpoint/requests/throttle_spec.rb", "spec/unit/endpoint/users_spec.rb", "spec/unit/endpoint_spec.rb", "spec/unit/extensions/expose_pattern_spec.rb", @@ -359,19 +427,41 @@ Gem::Specification.new do |s| "spec/unit/responders/json_spec.rb", "spec/unit/responders/service_spec.rb", "spec/v3/extensions/belongs_to_spec.rb", + "spec/v3/models/cron_spec.rb", "spec/v3/renderer/avatar_url_spec.rb", "spec/v3/result_spec.rb", "spec/v3/service_index_spec.rb", "spec/v3/services/accounts/for_current_user_spec.rb", "spec/v3/services/branch/find_spec.rb", + "spec/v3/services/branches/find_spec.rb", + "spec/v3/services/broadcasts/for_current_user_spec.rb", + "spec/v3/services/build/cancel_spec.rb", + "spec/v3/services/build/find_spec.rb", + "spec/v3/services/build/restart_spec.rb", + "spec/v3/services/builds/find_spec.rb", + "spec/v3/services/cron/create_spec.rb", + "spec/v3/services/cron/delete_spec.rb", + "spec/v3/services/cron/find_spec.rb", + "spec/v3/services/cron/for_branch_spec.rb", + "spec/v3/services/crons/for_repository_spec.rb", + "spec/v3/services/job/cancel_spec.rb", + "spec/v3/services/job/find_spec.rb", + "spec/v3/services/job/restart_spec.rb", + "spec/v3/services/jobs/find_spec.rb", "spec/v3/services/organization/find_spec.rb", "spec/v3/services/organizations/for_current_user_spec.rb", "spec/v3/services/owner/find_spec.rb", "spec/v3/services/repositories/for_current_user_spec.rb", + "spec/v3/services/repositories/for_owner_spec.rb", + "spec/v3/services/repository/disable_spec.rb", + "spec/v3/services/repository/enable_spec.rb", "spec/v3/services/repository/find_spec.rb", + "spec/v3/services/repository/star_spec.rb", + "spec/v3/services/repository/unstar_spec.rb", "spec/v3/services/requests/create_spec.rb", "spec/v3/services/user/current_spec.rb", "spec/v3/services/user/find_spec.rb", + "spec/v3/services/user/sync_spec.rb", "tmp/.gitkeep", "travis-api.gemspec" ]