aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXinhui2017-04-25 15:41:51 +0200
committerXinhui2017-04-25 15:41:51 +0200
commit219c856566cb861cee82288adeda02cf5b9ca751 (patch)
tree98e56d9d6e9ca83bce90633afc0727bdf682cfb9
parent9399071affee50b3f92df0121374bec22cbc6e4c (diff)
downloadchouette-core-219c856566cb861cee82288adeda02cf5b9ca751.tar.bz2
Fix calendar ransack filter
Refs #3173
-rw-r--r--app/controllers/calendars_controller.rb14
-rw-r--r--app/views/calendars/_filters.html.slim5
-rw-r--r--spec/features/calendars_spec.rb31
3 files changed, 30 insertions, 20 deletions
diff --git a/app/controllers/calendars_controller.rb b/app/controllers/calendars_controller.rb
index 3e7a05231..c33aa9373 100644
--- a/app/controllers/calendars_controller.rb
+++ b/app/controllers/calendars_controller.rb
@@ -1,7 +1,7 @@
class CalendarsController < BreadcrumbController
include PolicyChecker
defaults resource_class: Calendar
-
+ before_action :ransack_contains_date, only: [:index]
respond_to :html
respond_to :js, only: :index
@@ -39,5 +39,17 @@ class CalendarsController < BreadcrumbController
calendars = calendars.order(sort_column + ' ' + sort_direction) if sort_column && sort_direction
@calendars = calendars.paginate(page: params[:page])
end
+
+ def ransack_contains_date
+ # 3 parts to date object, in order to use in ransackable_scopes
+ if params[:q] && !params[:q]['contains_date(1i)'].empty?
+ date =[]
+ ['contains_date(1i)', 'contains_date(2i)', 'contains_date(3i)'].each do |key|
+ date << params[:q][key]
+ params[:q].delete(key)
+ end
+ params[:q]['contains_date'] = Date.parse(date.join('-'))
+ end
+ end
end
diff --git a/app/views/calendars/_filters.html.slim b/app/views/calendars/_filters.html.slim
index 4fc11b5c7..d8707ba0f 100644
--- a/app/views/calendars/_filters.html.slim
+++ b/app/views/calendars/_filters.html.slim
@@ -9,12 +9,11 @@
.ffg-row
.form-group.has_switch style='width: 260px'
= f.label Calendar.human_attribute_name(:shared), class: 'col-sm-4 control-label'
- = f.input :shared, as: :boolean, checked_value: true, unchecked_value: false, label: content_tag(:span, '', class: 'switch-label', data: {checkedValue: t('true'), uncheckedValue: t('false')}), wrapper_html: { class: 'col-sm-8' }
+ = f.input :shared_true, as: :boolean, checked_value: true, unchecked_value: false, label: content_tag(:span, '', class: 'switch-label', data: {checkedValue: t('true'), uncheckedValue: t('false')}), wrapper_html: { class: 'col-sm-8' }
.form-group
= f.label Calendar.human_attribute_name(:date), class: 'control-label'
- = f.input :contains_date, as: :date, label: false, wrapper_html: { class: 'date' }, class: 'form-control'
-
+ = f.input :contains_date, as: :date, label: false, wrapper_html: { class: 'date' }, class: 'form-control', include_blank: true
.actions
= link_to 'Effacer', calendars_path, class: 'btn btn-link'
= f.submit 'Filtrer', id: 'filter_btn', class: 'btn btn-default'
diff --git a/spec/features/calendars_spec.rb b/spec/features/calendars_spec.rb
index bb30cff0f..d4234fc50 100644
--- a/spec/features/calendars_spec.rb
+++ b/spec/features/calendars_spec.rb
@@ -18,23 +18,22 @@ describe 'Calendars', type: :feature do
end
context 'filtering' do
- # Fixme !
- # it 'supports filtering by short name' do
- # fill_in 'q[short_name_cont]', with: calendars.first.short_name
- # click_button 'search_btn'
- # expect(page).to have_content(calendars.first.short_name)
- # expect(page).not_to have_content(calendars.last.short_name)
- # end
+ it 'supports filtering by short name' do
+ fill_in 'q[short_name_cont]', with: calendars.first.short_name
+ click_button 'search_btn'
+ expect(page).to have_content(calendars.first.short_name)
+ expect(page).not_to have_content(calendars.last.short_name)
+ end
- # it 'supports filtering by shared' do
- # shared_calendar = create :calendar, organisation_id: 1, shared: true
- # visit calendars_path
- # # select I18n.t('true'), from: 'q[shared]'
- # find(:css, '#q_shared').set(true)
- # click_button 'filter_btn'
- # expect(page).to have_content(shared_calendar.short_name)
- # expect(page).not_to have_content(calendars.first.short_name)
- # end
+ it 'supports filtering by shared' do
+ shared_calendar = create :calendar, organisation_id: 1, shared: true
+ visit calendars_path
+ # select I18n.t('true'), from: 'q[shared]'
+ find(:css, '#q_shared_true').set(true)
+ click_button 'filter_btn'
+ expect(page).to have_content(shared_calendar.short_name)
+ expect(page).not_to have_content(calendars.first.short_name)
+ end
# wip
# it 'supports filtering by date' do