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

Commit 5ca3e89

Browse files
Harsha NandiwadaMerricdeLauney
andcommitted
Sidecars can be filtered on created_ats and updated_ats
Also refactored controller to extract a new fetcher class [#173719526] Co-authored-by: Harsha Nandiwada <hnandiwada@vmware.com> Co-authored-by: Merric de Launey <mdelauney@pivotal.io>
1 parent f93e4ea commit 5ca3e89

2 files changed

Lines changed: 54 additions & 19 deletions

File tree

app/controllers/v3/sidecars_controller.rb

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,35 @@
66
require 'actions/sidecar_create'
77
require 'actions/sidecar_update'
88
require 'presenters/v3/sidecar_presenter'
9+
require 'fetchers/sidecar_list_fetcher'
910

1011
class SidecarsController < ApplicationController
1112
include SubResource
1213

1314
def index_by_app
14-
app, space, org = AppFetcher.new.fetch(hashed_params[:app_guid])
15-
resource_not_found!(:app) unless app && permission_queryer.can_read_from_space?(space.guid, org.guid)
16-
validate_and_present_for_list(app.sidecars_dataset)
15+
message = SidecarsListMessage.from_params(query_params)
16+
invalid_param!(message.errors.full_messages) unless message.valid?
17+
18+
app, dataset = SidecarListFetcher.fetch_for_app(message, hashed_params[:app_guid])
19+
resource_not_found!(:app) unless app && permission_queryer.can_read_from_space?(app.space.guid, app.organization.guid)
20+
render status: :ok, json: Presenters::V3::PaginatedListPresenter.new(
21+
presenter: Presenters::V3::SidecarPresenter,
22+
paginated_result: SequelPaginator.new.get_page(dataset, message.try(:pagination_options)),
23+
path: base_url(resource: 'sidecars'),
24+
)
1725
end
1826

1927
def index_by_process
20-
process, space, org = ProcessFetcher.fetch(process_guid: hashed_params[:process_guid])
21-
resource_not_found!(:process) unless process && permission_queryer.can_read_from_space?(space.guid, org.guid)
22-
validate_and_present_for_list(process.sidecars_dataset)
28+
message = SidecarsListMessage.from_params(query_params)
29+
invalid_param!(message.errors.full_messages) unless message.valid?
30+
31+
process, dataset = SidecarListFetcher.fetch_for_process(message, hashed_params[:process_guid])
32+
resource_not_found!(:process) unless process && permission_queryer.can_read_from_space?(process.space.guid, process.organization.guid)
33+
render status: :ok, json: Presenters::V3::PaginatedListPresenter.new(
34+
presenter: Presenters::V3::SidecarPresenter,
35+
paginated_result: SequelPaginator.new.get_page(dataset, message.try(:pagination_options)),
36+
path: base_url(resource: 'sidecars'),
37+
)
2338
end
2439

2540
def show
@@ -86,17 +101,4 @@ def destroy
86101
SidecarDelete.delete(sidecar)
87102
head :no_content
88103
end
89-
90-
private
91-
92-
def validate_and_present_for_list(dataset)
93-
message = SidecarsListMessage.from_params(query_params)
94-
invalid_param!(message.errors.full_messages) unless message.valid?
95-
96-
render status: :ok, json: Presenters::V3::PaginatedListPresenter.new(
97-
presenter: Presenters::V3::SidecarPresenter,
98-
paginated_result: SequelPaginator.new.get_page(dataset, message.try(:pagination_options)),
99-
path: base_url(resource: 'sidecars'),
100-
)
101-
end
102104
end

spec/request/sidecars_spec.rb

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,29 @@
426426
parsed_response = MultiJson.load(last_response.body)
427427
expect(parsed_response).to be_a_response_like(expected_response)
428428
end
429+
430+
context 'filtering on created_ats and updated_ats' do
431+
let(:app_model3) { VCAP::CloudController::AppModel.make }
432+
let!(:process3) { VCAP::CloudController::ProcessModel.make(
433+
:process,
434+
app: app_model3,
435+
type: 'web',
436+
command: 'rackup',
437+
)
438+
}
439+
440+
it_behaves_like 'list_endpoint_with_common_filters' do
441+
let(:resource_klass) { VCAP::CloudController::SidecarModel }
442+
let(:additional_resource_params) { { app: app_model3 } }
443+
let(:headers) { admin_headers }
444+
let(:api_call) do
445+
app_model3.sidecars_dataset.each do |sidecar|
446+
VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar, type: 'web')
447+
end
448+
lambda { |headers, filters| get "/v3/processes/#{process3.guid}/sidecars?#{filters}", nil, headers }
449+
end
450+
end
451+
end
429452
end
430453

431454
describe 'GET /v3/apps/:app_guid/sidecars' do
@@ -495,6 +518,16 @@
495518
}
496519
)
497520
end
521+
522+
it_behaves_like 'list_endpoint_with_common_filters' do
523+
let(:resource_klass) { VCAP::CloudController::SidecarModel }
524+
let(:app_model2) { VCAP::CloudController::AppModel.make }
525+
let(:additional_resource_params) { { app: app_model2 } }
526+
let(:headers) { admin_headers }
527+
let(:api_call) do
528+
lambda { |headers, filters| get "/v3/apps/#{app_model2.guid}/sidecars?#{filters}", nil, headers }
529+
end
530+
end
498531
end
499532

500533
describe 'DELETE /v3/sidecars/:guid' do

0 commit comments

Comments
 (0)