Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions src/api/app/controllers/concerns/webui/requests_filter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,42 +41,42 @@ def filter_action_types
def filter_creators
return if params[:creators]&.compact_blank.blank?

@selected_filter['creators'] = params[:creators]
@selected_filter['creators'] = params[:creators].compact_blank
@bs_requests = @bs_requests.where(creator: @selected_filter['creators'])
end

def filter_priorities
return if params[:priorities]&.compact_blank.blank?

@selected_filter['priorities'] = params[:priorities]
@selected_filter['priorities'] = params[:priorities].compact_blank
@bs_requests = @bs_requests.where(priority: @selected_filter['priorities'])
end

def filter_staging_projects
return if params[:staging_projects]&.compact_blank.blank?

@selected_filter['staging_projects'] = params[:staging_projects]
@selected_filter['staging_projects'] = params[:staging_projects].compact_blank
@bs_requests = @bs_requests.where(staging_project: Project.find_by(name: @selected_filter['staging_projects']))
end

def filter_reviewers
return if params[:reviewers]&.compact_blank.blank?

@selected_filter['reviewers'] = params[:reviewers]
@selected_filter['reviewers'] = params[:reviewers].compact_blank
@bs_requests = @bs_requests.where(reviews: { by_user: @selected_filter['reviewers'] }).or(@bs_requests.where(reviews: { by_group: @selected_filter['reviewers'] }))
end

def filter_project_names
return if params[:project_names]&.compact_blank.blank?

@selected_filter['project_names'] = params[:project_names]
@selected_filter['project_names'] = params[:project_names].compact_blank
@bs_requests = @bs_requests.where(bs_request_actions: { source_project: @selected_filter['project_names'] }).or(@bs_requests.where(bs_request_actions: { target_project: @selected_filter['project_names'] }))
end

def filter_package_names
return if params[:package_names]&.compact_blank.blank?

@selected_filter['package_names'] = params[:package_names]
@selected_filter['package_names'] = params[:package_names].compact_blank
@bs_requests = @bs_requests.where(bs_request_actions: { source_package: @selected_filter['package_names'] }).or(@bs_requests.where(bs_request_actions: { target_package: @selected_filter['package_names'] }))
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,68 @@

it { expect(assigns[:bs_requests]).to contain_exactly(incoming_request) }
end

context 'and empty strings are submitted in filter parameters' do
context 'with empty project_names' do
let(:context_params) { { project_names: ['', request_with_review.bs_request_actions.first.target_project, ''] } }

it 'filters out empty values and only uses valid project names' do
expect(assigns[:bs_requests]).to contain_exactly(request_with_review)
expect(assigns[:selected_filter][:project_names]).not_to include('')
expect(assigns[:selected_filter][:project_names]).to eq([request_with_review.bs_request_actions.first.target_project])
end
end

context 'with empty package_names' do
let(:context_params) { { package_names: ['', incoming_request.bs_request_actions.first.source_package, ''] } }

it 'filters out empty values and only uses valid package names' do
expect(assigns[:bs_requests]).to contain_exactly(incoming_request)
expect(assigns[:selected_filter][:package_names]).not_to include('')
expect(assigns[:selected_filter][:package_names]).to eq([incoming_request.bs_request_actions.first.source_package])
end
end

context 'with empty creators' do
let(:context_params) { { creators: ['', user.login, ''] } }

it 'filters out empty values and only uses valid creators' do
expect(assigns[:bs_requests]).to contain_exactly(outgoing_request)
expect(assigns[:selected_filter][:creators]).not_to include('')
expect(assigns[:selected_filter][:creators]).to eq([user.login])
end
end

context 'with empty reviewers' do
let(:context_params) { { reviewers: ['', user.login, ''] } }

it 'filters out empty values and only uses valid reviewers' do
expect(assigns[:bs_requests]).to contain_exactly(request_with_review)
expect(assigns[:selected_filter][:reviewers]).not_to include('')
expect(assigns[:selected_filter][:reviewers]).to eq([user.login])
end
end

context 'with empty staging_projects' do
let(:context_params) { { staging_projects: ['', request_with_review.staging_project.name, ''] } }

it 'filters out empty values and only uses valid staging projects' do
expect(assigns[:bs_requests]).to contain_exactly(request_with_review)
expect(assigns[:selected_filter][:staging_projects]).not_to include('')
expect(assigns[:selected_filter][:staging_projects]).to eq([request_with_review.staging_project.name])
end
end

context 'with empty priorities' do
let(:context_params) { { priorities: ['', 'critical', ''] } }

it 'filters out empty values and only uses valid priorities' do
expect(assigns[:bs_requests]).to contain_exactly(request_with_review)
expect(assigns[:selected_filter][:priorities]).not_to include('')
expect(assigns[:selected_filter][:priorities]).to eq(['critical'])
end
end
end
end
end
end