v3: add webmock for disable repo spec

This commit is contained in:
carlad 2015-12-01 12:36:43 +01:00
parent 620e38a2a0
commit 221b309653
5 changed files with 55 additions and 38 deletions

View File

@ -36,6 +36,7 @@ gem 'jemalloc'
group :test do group :test do
gem 'rspec', '~> 2.13' gem 'rspec', '~> 2.13'
gem 'webmock'
gem 'factory_girl', '~> 2.4.0' gem 'factory_girl', '~> 2.4.0'
gem 'mocha', '~> 0.12' gem 'mocha', '~> 0.12'
gem 'database_cleaner', '~> 0.8.0' gem 'database_cleaner', '~> 0.8.0'

View File

@ -157,6 +157,8 @@ GEM
composite_primary_keys (5.0.14) composite_primary_keys (5.0.14)
activerecord (~> 3.2.0, >= 3.2.9) activerecord (~> 3.2.0, >= 3.2.9)
connection_pool (2.1.1) connection_pool (2.1.1)
crack (0.4.2)
safe_yaml (~> 1.0.0)
dalli (2.7.2) dalli (2.7.2)
data_migrations (0.0.1) data_migrations (0.0.1)
activerecord activerecord
@ -184,6 +186,7 @@ GEM
multi_json (~> 1.0) multi_json (~> 1.0)
net-http-persistent (>= 2.7) net-http-persistent (>= 2.7)
net-http-pipeline net-http-pipeline
hashdiff (0.2.3)
hashr (0.0.22) hashr (0.0.22)
hike (1.2.3) hike (1.2.3)
hitimes (1.2.3) hitimes (1.2.3)
@ -270,6 +273,7 @@ GEM
rspec-expectations (2.99.2) rspec-expectations (2.99.2)
diff-lcs (>= 1.1.3, < 2.0) diff-lcs (>= 1.1.3, < 2.0)
rspec-mocks (2.99.2) rspec-mocks (2.99.2)
safe_yaml (1.0.4)
sidekiq (3.3.0) sidekiq (3.3.0)
celluloid (>= 0.16.0) celluloid (>= 0.16.0)
connection_pool (>= 2.0.0) connection_pool (>= 2.0.0)
@ -327,6 +331,10 @@ GEM
coercible (~> 1.0) coercible (~> 1.0)
descendants_tracker (~> 0.0, >= 0.0.3) descendants_tracker (~> 0.0, >= 0.0.3)
equalizer (~> 0.0, >= 0.0.9) equalizer (~> 0.0, >= 0.0.9)
webmock (1.22.3)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff
yard (0.8.7.6) yard (0.8.7.6)
PLATFORMS PLATFORMS
@ -368,4 +376,8 @@ DEPENDENCIES
travis-support! travis-support!
travis-yaml! travis-yaml!
unicorn unicorn
webmock
yard-sinatra! yard-sinatra!
BUNDLED WITH
1.10.6

View File

@ -8,6 +8,7 @@ require 'sinatra/test_helpers'
require 'logger' require 'logger'
require 'gh' require 'gh'
require 'multi_json' require 'multi_json'
require 'webmock/rspec'
require 'travis/api/app' require 'travis/api/app'
require 'travis/testing' require 'travis/testing'

View File

@ -2,20 +2,10 @@ require 'spec_helper'
describe Travis::API::V3::Services::Repository::Disable do describe Travis::API::V3::Services::Repository::Disable do
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first } let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
# let(:sidekiq_payload) { JSON.load(Sidekiq::Client.last['args'].last.to_json) }
# let(:sidekiq_params) { Sidekiq::Client.last['args'].last.deep_symbolize_keys }
before do before do
repo.update_attributes!(active: true) repo.update_attributes!(active: true)
Travis::Features.stubs(:owner_active?).returns(true) Travis::Features.stubs(:owner_active?).returns(true)
@original_sidekiq = Sidekiq::Client
Sidekiq.send(:remove_const, :Client) # to avoid a warning
Sidekiq::Client = []
end
after do
Sidekiq.send(:remove_const, :Client) # to avoid a warning
Sidekiq::Client = @original_sidekiq
end end
describe "not authenticated" do describe "not authenticated" do
@ -79,41 +69,30 @@ describe Travis::API::V3::Services::Repository::Disable do
describe "existing repository, push access" do describe "existing repository, push access" do
let(:params) {{}} let(:params) {{}}
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) } let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }} let(:headers) {{ 'Http-Authorization' => "token #{token}" }}
let(:uri) { "/v3/repo/#{repo.id}/disable" }
before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, push: true, admin: true) } before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, push: true, admin: true) }
# this is failing because it's actually going to github before { stub_request(:get, "https://api.github.com/repos/svenfuchs/minimal/hooks?per_page=100").
before { post("/v3/repo/#{repo.id}/disable", params, headers) } with(:headers => {'Accept'=>'application/vnd.github.v3+json,application/vnd.github.beta+json;q=0.5,application/json;q=0.1', 'Accept-Charset'=>'utf-8', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'token github_oauth_token', 'Origin'=>'travis-ci.org', 'User-Agent'=>'Travis-API/3 Travis-CI/0.0.1 GH/0.14.0'}).
to_return(:status => 202, :body => "hello", :headers => {}) }
before { stub_request(:post, "http://v3/repo/1/disable").
with(:headers => headers) }
before { post(uri) }
example { expect(last_response.status).to be == 202 } example { expect(last_response.status).to be == 202 }
example { expect(JSON.load(body).to_s).to include( example { expect(JSON.load(body).to_s).to include(
"@type", "@type",
"job", "cxxxxxxxxxx",
"@href", "@href",
"@representation", "@representation",
"minimal", "minimal",
"cancel", "disable",
"id", "id",
"state_change") "xxxxxxxxxxx")
} }
example { expect(sidekiq_payload).to be == {
"id" => "#{job.id}",
"user_id"=> repo.owner_id,
"source" => "api"}
}
example { expect(Sidekiq::Client.last['queue']).to be == 'job_cancellations' }
example { expect(Sidekiq::Client.last['class']).to be == 'Travis::Sidekiq::JobCancellation' }
describe "setting id has no effect" do
let(:params) {{ id: 42 }}
example { expect(sidekiq_payload).to be == {
"id" => "#{job.id}",
"user_id"=> repo.owner_id,
"source" => "api"}
}
end
end end

View File

@ -2,11 +2,10 @@ require 'spec_helper'
describe Travis::API::V3::Services::Repository::Unstar do describe Travis::API::V3::Services::Repository::Unstar do
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first } let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
let(:star) { Travis::API::V3::Models::Star.create(user_id: repo.owner_id, repository_id: repo.id) }
before do # before do
Travis::Features.stubs(:owner_active?).returns(true) # Travis::API::V3::Models::Star.create(user_id: repo.owner_id, repository_id: repo.id)
end # end
describe "not authenticated" do describe "not authenticated" do
before { post("/v3/repo/#{repo.id}/unstar") } before { post("/v3/repo/#{repo.id}/unstar") }
@ -71,8 +70,10 @@ describe Travis::API::V3::Services::Repository::Unstar do
let(:params) {{}} let(:params) {{}}
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) } let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }} let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
let(:star) { Travis::API::V3::Models::Star.create(user_id: repo.owner_id, repository_id: repo.id) }
before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, push: true) } before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, push: true) }
before { post("/v3/repo/#{repo.id}/unstar", params, headers) } before { post("/v3/repo/#{repo.id}/unstar", params, headers) }
after { star.delete }
example { expect(last_response.status).to be == 200 } example { expect(last_response.status).to be == 200 }
example { expect(JSON.load(body).to_s).to include( example { expect(JSON.load(body).to_s).to include(
@ -86,4 +87,27 @@ describe Travis::API::V3::Services::Repository::Unstar do
} }
example { expect(Travis::API::V3::Models::Star.where(user_id: repo.owner_id, repository_id: repo.id)).to be == []} example { expect(Travis::API::V3::Models::Star.where(user_id: repo.owner_id, repository_id: repo.id)).to be == []}
end end
# TODO return an error when alreasy not on the star db
describe "existing repository, push access, already starred" do
let(:params) {{}}
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, push: true) }
before { post("/v3/repo/#{repo.id}/unstar", params, headers) }
example { expect(last_response.status).to be == 403 }
example { expect(JSON.load(body).to_s).to include(
"@type",
"star",
"@href",
"@representation",
"minimal",
"false",
"id")
}
example { expect(Travis::API::V3::Models::Star.where(user_id: repo.owner_id, repository_id: repo.id)).to be == "idushifuhds"}
end
end end