Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit 723ba1a

Browse files
committed
Routes, security groups, service brokers can be filtered by created_ats and updated_ats
[#173719526] Authored-by: Sarah Weinstein <sweinstein@pivotal.io>
1 parent 82d0788 commit 723ba1a

8 files changed

Lines changed: 70 additions & 39 deletions

app/controllers/v3/service_brokers_controller.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ def index
1212
invalid_param!(message.errors.full_messages) unless message.valid?
1313

1414
dataset = if permission_queryer.can_read_globally?
15-
ServiceBrokerListFetcher.new.fetch(message: message)
15+
ServiceBrokerListFetcher.fetch(message: message)
1616
else
17-
ServiceBrokerListFetcher.new.fetch(message: message, permitted_space_guids: permission_queryer.readable_secret_space_guids)
17+
ServiceBrokerListFetcher.fetch(message: message, permitted_space_guids: permission_queryer.readable_secret_space_guids)
1818
end
1919

2020
presenter = Presenters::V3::PaginatedListPresenter.new(

app/fetchers/route_fetcher.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
require 'fetchers/base_list_fetcher'
2+
13
module VCAP::CloudController
2-
class RouteFetcher
4+
class RouteFetcher < BaseListFetcher
35
class << self
46
def fetch(message, readable_route_guids, eager_loaded_associations: [])
57
dataset = Route.where(guid: readable_route_guids).eager(eager_loaded_associations).qualify
@@ -48,7 +50,7 @@ def filter(message, dataset)
4850
)
4951
end
5052

51-
dataset
53+
super(message, dataset, Route)
5254
end
5355
end
5456
end

app/fetchers/security_group_list_fetcher.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
require 'cloud_controller/paging/sequel_paginator'
22
require 'cloud_controller/paging/paginated_result'
33
require 'fetchers/label_selector_query_generator'
4+
require 'fetchers/base_list_fetcher'
45

56
module VCAP::CloudController
6-
class SecurityGroupListFetcher
7+
class SecurityGroupListFetcher < BaseListFetcher
78
class << self
89
def fetch_all(message)
910
dataset = SecurityGroup.dataset
@@ -44,7 +45,7 @@ def filter(message, dataset)
4445
dataset = dataset.where(staging_default: ActiveModel::Type::Boolean.new.cast(message.globally_enabled_staging))
4546
end
4647

47-
dataset
48+
super(message, dataset, SecurityGroup)
4849
end
4950
end
5051
end
Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,48 @@
1+
require 'fetchers/base_list_fetcher'
2+
13
module VCAP::CloudController
2-
class ServiceBrokerListFetcher
3-
def fetch(message:, permitted_space_guids: nil)
4-
if permitted_space_guids
5-
dataset = ServiceBroker.dataset.where(Sequel[:service_brokers][:space_id] => spaces_from(permitted_space_guids))
6-
return filter(message, dataset)
4+
class ServiceBrokerListFetcher < BaseListFetcher
5+
class << self
6+
def fetch(message:, permitted_space_guids: nil)
7+
if permitted_space_guids
8+
dataset = ServiceBroker.dataset.where(Sequel[:service_brokers][:space_id] => spaces_from(permitted_space_guids))
9+
return filter(message, dataset)
10+
end
11+
12+
dataset = ServiceBroker.dataset
13+
filter(message, dataset)
714
end
815

9-
dataset = ServiceBroker.dataset
10-
filter(message, dataset)
11-
end
16+
private
1217

13-
private
18+
def filter(message, dataset)
19+
if message.requested?(:space_guids)
20+
dataset = dataset.where(
21+
Sequel[:service_brokers][:space_id] => spaces_from(message.space_guids)
22+
)
23+
end
1424

15-
def filter(message, dataset)
16-
if message.requested?(:space_guids)
17-
dataset = dataset.where(
18-
Sequel[:service_brokers][:space_id] => spaces_from(message.space_guids)
19-
)
20-
end
25+
if message.requested?(:names)
26+
dataset = dataset.where(
27+
name: message.names
28+
)
29+
end
2130

22-
if message.requested?(:names)
23-
dataset = dataset.where(
24-
name: message.names
25-
)
26-
end
31+
if message.requested?(:label_selector)
32+
dataset = LabelSelectorQueryGenerator.add_selector_queries(
33+
label_klass: ServiceBrokerLabelModel,
34+
resource_dataset: dataset,
35+
requirements: message.requirements,
36+
resource_klass: ServiceBroker,
37+
)
38+
end
2739

28-
if message.requested?(:label_selector)
29-
dataset = LabelSelectorQueryGenerator.add_selector_queries(
30-
label_klass: ServiceBrokerLabelModel,
31-
resource_dataset: dataset,
32-
requirements: message.requirements,
33-
resource_klass: ServiceBroker,
34-
)
40+
super(message, dataset, ServiceBroker)
3541
end
3642

37-
dataset
38-
end
39-
40-
def spaces_from(space_guids)
41-
Space.where(guid: space_guids).select(:id)
43+
def spaces_from(space_guids)
44+
Space.where(guid: space_guids).select(:id)
45+
end
4246
end
4347
end
4448
end

spec/request/routes_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,14 @@
111111
}
112112
end
113113

114+
it_behaves_like 'list_endpoint_with_common_filters' do
115+
let(:resource_klass) { VCAP::CloudController::Route }
116+
let(:api_call) do
117+
lambda { |headers, filters| get "/v3/routes?#{filters}", nil, headers }
118+
end
119+
let(:headers) { admin_headers }
120+
end
121+
114122
describe 'query list parameters' do
115123
it_behaves_like 'request_spec_shared_examples.rb list query endpoint' do
116124
let(:request) { 'v3/routes' }

spec/request/security_groups_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,14 @@
511511
security_group_2.add_staging_space(space)
512512
end
513513

514+
it_behaves_like 'list_endpoint_with_common_filters' do
515+
let(:resource_klass) { VCAP::CloudController::SecurityGroup }
516+
let(:api_call) do
517+
lambda { |headers, filters| get "/v3/security_groups?#{filters}", nil, headers }
518+
end
519+
let(:headers) { admin_headers }
520+
end
521+
514522
context 'getting security groups' do
515523
let(:expected_response_1) do
516524
{

spec/request/service_brokers_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,14 @@
120120
end
121121
end
122122

123+
it_behaves_like 'list_endpoint_with_common_filters' do
124+
let(:resource_klass) { VCAP::CloudController::ServiceBroker }
125+
let(:api_call) do
126+
lambda { |headers, filters| get "/v3/service_brokers?#{filters}", nil, headers }
127+
end
128+
let(:headers) { admin_headers }
129+
end
130+
123131
describe 'empty response' do
124132
let(:expected_codes_and_responses) do
125133
h = Hash.new(

spec/unit/fetchers/service_broker_list_fetcher_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ module VCAP::CloudController
1616
let(:space_3) { Space.make }
1717
let(:space_scoped_broker_3) { ServiceBroker.make(space_guid: space_3.guid, name: 'broker-3') }
1818

19-
let(:fetcher) { ServiceBrokerListFetcher.new }
19+
let(:fetcher) { ServiceBrokerListFetcher }
2020
let(:message) { ServiceBrokersListMessage.from_params(filters) }
2121

2222
before do

0 commit comments

Comments
 (0)