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

Commit ff7d5a6

Browse files
sweinstein22selzoc
andcommitted
Orgs can be filtered on created_ats and updated_ats
[#173719526] Co-authored-by: Sarah Weinstein <sweinstein@pivotal.io> Co-authored-by: Chris Selzo <cselzo@pivotal.io>
1 parent c75c051 commit ff7d5a6

3 files changed

Lines changed: 61 additions & 50 deletions

File tree

app/controllers/v3/organizations_controller.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,9 +194,9 @@ def fetch_isolation_segment(guid)
194194

195195
def fetch_orgs(message)
196196
if permission_queryer.can_read_globally?
197-
OrgListFetcher.new.fetch_all(message: message, eager_loaded_associations: Presenters::V3::OrganizationPresenter.associated_resources)
197+
OrgListFetcher.fetch_all(message: message, eager_loaded_associations: Presenters::V3::OrganizationPresenter.associated_resources)
198198
else
199-
OrgListFetcher.new.fetch(
199+
OrgListFetcher.fetch(
200200
message: message,
201201
guids: permission_queryer.readable_org_guids,
202202
eager_loaded_associations: Presenters::V3::OrganizationPresenter.associated_resources
@@ -206,12 +206,12 @@ def fetch_orgs(message)
206206

207207
def fetch_orgs_for_isolation_segment(message)
208208
if permission_queryer.can_read_globally?
209-
isolation_segment, dataset = OrgListFetcher.new.fetch_all_for_isolation_segment(
209+
isolation_segment, dataset = OrgListFetcher.fetch_all_for_isolation_segment(
210210
message: message,
211211
eager_loaded_associations: Presenters::V3::OrganizationPresenter.associated_resources
212212
)
213213
else
214-
isolation_segment, dataset = OrgListFetcher.new.fetch_for_isolation_segment(
214+
isolation_segment, dataset = OrgListFetcher.fetch_for_isolation_segment(
215215
message: message,
216216
guids: permission_queryer.readable_org_guids,
217217
eager_loaded_associations: Presenters::V3::OrganizationPresenter.associated_resources

app/fetchers/org_list_fetcher.rb

Lines changed: 49 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,68 @@
11
require 'cloud_controller/paging/sequel_paginator'
22
require 'cloud_controller/paging/paginated_result'
3+
require 'fetchers/base_list_fetcher'
34

45
module VCAP::CloudController
5-
class OrgListFetcher
6-
def fetch(message:, guids:, eager_loaded_associations: [])
7-
dataset = Organization.where(guid: guids)
8-
dataset = eager_load(dataset, eager_loaded_associations)
9-
filter(message, dataset)
10-
end
11-
12-
def fetch_all(message:, eager_loaded_associations: [])
13-
dataset = Organization.dataset
14-
dataset = eager_load(dataset, eager_loaded_associations)
15-
filter(message, dataset)
16-
end
6+
class OrgListFetcher < BaseListFetcher
7+
class << self
8+
def fetch(message:, guids:, eager_loaded_associations: [])
9+
dataset = Organization.where(guid: guids)
10+
dataset = eager_load(dataset, eager_loaded_associations)
11+
filter(message, dataset)
12+
end
1713

18-
def fetch_for_isolation_segment(message:, guids:, eager_loaded_associations: [])
19-
isolation_segment = IsolationSegmentModel.where(guid: message.isolation_segment_guid).first
20-
return nil unless isolation_segment
14+
def fetch_all(message:, eager_loaded_associations: [])
15+
dataset = Organization.dataset
16+
dataset = eager_load(dataset, eager_loaded_associations)
17+
filter(message, dataset)
18+
end
2119

22-
dataset = isolation_segment.organizations_dataset.where(guid: guids)
23-
dataset = eager_load(dataset, eager_loaded_associations)
24-
[isolation_segment, filter(message, dataset)]
25-
end
20+
def fetch_for_isolation_segment(message:, guids:, eager_loaded_associations: [])
21+
isolation_segment = IsolationSegmentModel.where(guid: message.isolation_segment_guid).first
22+
return nil unless isolation_segment
2623

27-
def fetch_all_for_isolation_segment(message:, eager_loaded_associations: [])
28-
isolation_segment = IsolationSegmentModel.where(guid: message.isolation_segment_guid).first
29-
return nil unless isolation_segment
24+
dataset = isolation_segment.organizations_dataset.where(guid: guids)
25+
dataset = eager_load(dataset, eager_loaded_associations)
26+
[isolation_segment, filter(message, dataset)]
27+
end
3028

31-
dataset = isolation_segment.organizations_dataset
32-
dataset = eager_load(dataset, eager_loaded_associations)
33-
[isolation_segment, filter(message, dataset)]
34-
end
29+
def fetch_all_for_isolation_segment(message:, eager_loaded_associations: [])
30+
isolation_segment = IsolationSegmentModel.where(guid: message.isolation_segment_guid).first
31+
return nil unless isolation_segment
3532

36-
private
33+
dataset = isolation_segment.organizations_dataset
34+
dataset = eager_load(dataset, eager_loaded_associations)
35+
[isolation_segment, filter(message, dataset)]
36+
end
3737

38-
def eager_load(dataset, associated_resources=[])
39-
return dataset if associated_resources.empty?
38+
private
4039

41-
dataset.eager(*associated_resources)
42-
end
40+
def eager_load(dataset, associated_resources=[])
41+
return dataset if associated_resources.empty?
4342

44-
def filter(message, dataset)
45-
if message.requested?(:names)
46-
dataset = dataset.where(name: message.names)
43+
dataset.eager(*associated_resources)
4744
end
4845

49-
if message.requested?(:guids)
50-
dataset = dataset.where(guid: message.guids)
51-
end
46+
def filter(message, dataset)
47+
if message.requested?(:names)
48+
dataset = dataset.where(name: message.names)
49+
end
5250

53-
if message.requested?(:label_selector)
54-
dataset = LabelSelectorQueryGenerator.add_selector_queries(
55-
label_klass: OrganizationLabelModel,
56-
resource_dataset: dataset,
57-
requirements: message.requirements,
58-
resource_klass: Organization,
59-
)
60-
end
51+
if message.requested?(:guids)
52+
dataset = dataset.where(guid: message.guids)
53+
end
54+
55+
if message.requested?(:label_selector)
56+
dataset = LabelSelectorQueryGenerator.add_selector_queries(
57+
label_klass: OrganizationLabelModel,
58+
resource_dataset: dataset,
59+
requirements: message.requirements,
60+
resource_klass: Organization,
61+
)
62+
end
6163

62-
dataset
64+
super(message, dataset, Organization)
65+
end
6366
end
6467
end
6568
end

spec/request/organizations_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,14 @@ module VCAP::CloudController
130130
end
131131
end
132132

133+
it_behaves_like 'list_endpoint_with_common_filters' do
134+
let(:resource_klass) { VCAP::CloudController::Organization }
135+
let(:api_call) do
136+
lambda { |headers, filters| get "/v3/organizations?#{filters}", nil, headers }
137+
end
138+
let(:headers) { admin_headers }
139+
end
140+
133141
it 'returns a paginated list of orgs the user has access to' do
134142
get '/v3/organizations?per_page=2', nil, user_header
135143
expect(last_response.status).to eq(200)

0 commit comments

Comments
 (0)