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
gem 'rspec', '~> 2.13'
gem 'webmock'
gem 'factory_girl', '~> 2.4.0'
gem 'mocha', '~> 0.12'
gem 'database_cleaner', '~> 0.8.0'

View File

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

View File

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

View File

@ -2,20 +2,10 @@ require 'spec_helper'
describe Travis::API::V3::Services::Repository::Disable do
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
repo.update_attributes!(active: 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
describe "not authenticated" do
@ -79,41 +69,30 @@ describe Travis::API::V3::Services::Repository::Disable do
describe "existing repository, push access" do
let(:params) {{}}
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
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) }
# this is failing because it's actually going to github
before { post("/v3/repo/#{repo.id}/disable", params, headers) }
before { stub_request(:get, "https://api.github.com/repos/svenfuchs/minimal/hooks?per_page=100").
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(JSON.load(body).to_s).to include(
"@type",
"job",
"cxxxxxxxxxx",
"@href",
"@representation",
"minimal",
"cancel",
"disable",
"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

View File

@ -2,11 +2,10 @@ require 'spec_helper'
describe Travis::API::V3::Services::Repository::Unstar do
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
Travis::Features.stubs(:owner_active?).returns(true)
end
# before do
# Travis::API::V3::Models::Star.create(user_id: repo.owner_id, repository_id: repo.id)
# end
describe "not authenticated" do
before { post("/v3/repo/#{repo.id}/unstar") }
@ -71,8 +70,10 @@ describe Travis::API::V3::Services::Repository::Unstar do
let(:params) {{}}
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
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 { post("/v3/repo/#{repo.id}/unstar", params, headers) }
after { star.delete }
example { expect(last_response.status).to be == 200 }
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 == []}
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