Commit 9176ea99 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Move group labels AR code into finder

Signed-off-by: default avatarDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
parent e18d8d59
...@@ -10,10 +10,7 @@ class Groups::LabelsController < Groups::ApplicationController ...@@ -10,10 +10,7 @@ class Groups::LabelsController < Groups::ApplicationController
def index def index
respond_to do |format| respond_to do |format|
format.html do format.html do
@labels = @group.labels @labels = GroupLabelsFinder.new(@group, params.merge(sort: sort)).execute
.optionally_search(params[:search])
.order_by(sort)
.page(params[:page])
end end
format.json do format.json do
render json: LabelSerializer.new.represent_appearance(available_labels) render json: LabelSerializer.new.represent_appearance(available_labels)
......
# frozen_string_literal: true
class GroupLabelsFinder
attr_reader :group, :params
def initialize(group, params = {})
@group = group
@params = params
end
def execute
group.labels
.optionally_search(params[:search])
.order_by(params[:sort])
.page(params[:page])
end
end
# frozen_string_literal: true
require 'spec_helper'
describe GroupLabelsFinder, '#execute' do
let!(:group) { create(:group) }
let!(:label1) { create(:group_label, title: 'Foo', description: 'Lorem ipsum', group: group) }
let!(:label2) { create(:group_label, title: 'Bar', description: 'Fusce consequat', group: group) }
it 'returns all group labels sorted by name if no params' do
result = described_class.new(group).execute
expect(result.to_a).to match_array([label2, label1])
end
it 'returns all group labels sorted by name desc' do
result = described_class.new(group, sort: 'name_desc').execute
expect(result.to_a).to match_array([label2, label1])
end
it 'returns group labels that march search' do
result = described_class.new(group, search: 'Foo').execute
expect(result.to_a).to match_array([label1])
end
it 'returns second page of labels' do
result = described_class.new(group, page: '2').execute
expect(result.to_a).to match_array([])
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment