v3: SQL "NOT IN ()" never matches

This commit is contained in:
Konstantin Haase 2015-11-26 18:17:19 +01:00
parent 24d5efda95
commit afb6fe286b
3 changed files with 15 additions and 9 deletions

View File

@ -369,6 +369,3 @@ DEPENDENCIES
travis-yaml!
unicorn
yard-sinatra!
BUNDLED WITH
1.10.6

View File

@ -24,7 +24,7 @@ module Travis::API::V3
if user and not starred.nil?
if bool(starred)
list = list.joins(:stars).where(stars: { user_id: user.id })
else
elsif user.starred_repository_ids.any?
list = list.where("repositories.id NOT IN (?)", user.starred_repository_ids)
end
end

View File

@ -87,10 +87,10 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do
end
describe "filter: starred=true" do
before { Travis::API::V3::Models::Star.create(user: repo.owner, repository: repo) }
before { get("/v3/repos", {"starred" => "true"}, headers) }
after { repo.owner.stars.each(&:destroy) }
example { expect(last_response) .to be_ok }
before { Travis::API::V3::Models::Star.create(user: repo.owner, repository: repo) }
before { get("/v3/repos", {"starred" => "true"}, headers) }
after { repo.owner.stars.each(&:destroy) }
example { expect(last_response) .to be_ok }
example { expect(JSON.load(body)['@href']) .to be == "/v3/repos?starred=true" }
example { expect(JSON.load(body)['repositories']) .to be == [{
"@type" => "repository",
@ -128,6 +128,15 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do
before { get("/v3/repos", {"starred" => "false"}, headers) }
example { expect(last_response) .to be_ok }
example { expect(JSON.load(body)['@href']) .to be == "/v3/repos?starred=false" }
example { expect(JSON.load(body)['repositories']) .to be == ["all the unstarred repos"] }
example { expect(JSON.load(body)['repositories']) .not_to be_empty }
end
describe "filter: starred=false but no unstarred repos" do
before { Travis::API::V3::Models::Star.create(user: repo.owner, repository: repo) }
after { repo.owner.stars.each(&:destroy) }
before { get("/v3/repos", {"starred" => "false"}, headers) }
example { expect(last_response) .to be_ok }
example { expect(JSON.load(body)['@href']) .to be == "/v3/repos?starred=false" }
example { expect(JSON.load(body)['repositories']) .to be_empty }
end
end