From 548d64d66d6c2d132c4613bef73839b99bd1ce9a Mon Sep 17 00:00:00 2001 From: Gena M Date: Mon, 14 Oct 2019 13:46:29 -0700 Subject: [PATCH] Fix wrong value for lteq_datetime predicate --- .gitignore | 4 +- Gemfile | 1 + .../active_admin_datetimepicker.rb | 8 ++ .../inputs/filters/date_time_range_input.rb | 8 ++ spec/edit_form_spec.rb | 28 ++++++ spec/filter_form_spec.rb | 89 +++++++++++++++++++ spec/filters_and_edit_form_spec.rb | 87 ------------------ 7 files changed, 137 insertions(+), 88 deletions(-) create mode 100644 spec/edit_form_spec.rb create mode 100644 spec/filter_form_spec.rb delete mode 100644 spec/filters_and_edit_form_spec.rb diff --git a/.gitignore b/.gitignore index 6de1148..7120e5f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ Gemfile.lock coverage/ -spec/rails/rails-5.2.1/ +spec/rails/rails-* pkg +.bundle +vendor/bundl diff --git a/Gemfile b/Gemfile index 13980a7..a97e51f 100644 --- a/Gemfile +++ b/Gemfile @@ -10,6 +10,7 @@ group :test do gem 'rails', "~> #{ENV['RAILS'] || default_rails_version}" gem 'activeadmin', "~> #{ENV['AA'] || default_activeadmin_version}" + gem 'sprockets-rails', '3.0.4' gem 'rspec-rails' gem 'coveralls', require: false # Test coverage website. Go to https://coveralls.io gem 'sass-rails' diff --git a/config/initializers/active_admin_datetimepicker.rb b/config/initializers/active_admin_datetimepicker.rb index 4325594..15c8199 100644 --- a/config/initializers/active_admin_datetimepicker.rb +++ b/config/initializers/active_admin_datetimepicker.rb @@ -1,3 +1,11 @@ ActiveAdmin.setup do |config| config.register_stylesheet 'jquery.xdan.datetimepicker.css' end + +Ransack.configure do |config| + config.add_predicate 'gteq_datetime_picker', + arel_predicate: 'gteq' + + config.add_predicate 'lteq_datetime_picker', + arel_predicate: 'lt' +end diff --git a/lib/active_admin_datetimepicker/inputs/filters/date_time_range_input.rb b/lib/active_admin_datetimepicker/inputs/filters/date_time_range_input.rb index 1dc4673..f3ea97b 100644 --- a/lib/active_admin_datetimepicker/inputs/filters/date_time_range_input.rb +++ b/lib/active_admin_datetimepicker/inputs/filters/date_time_range_input.rb @@ -11,6 +11,14 @@ def input_html_options(input_name = gt_input_name, placeholder = gt_input_placeh end end + def gt_input_name + column && column.type == :date ? super : "#{method}_gteq_datetime_picker" + end + + def lt_input_name + column && column.type == :date ? super : "#{method}_lteq_datetime_picker" + end + end end end diff --git a/spec/edit_form_spec.rb b/spec/edit_form_spec.rb new file mode 100644 index 0000000..214656b --- /dev/null +++ b/spec/edit_form_spec.rb @@ -0,0 +1,28 @@ +require 'spec_helper' + +describe 'authors index', type: :feature, js: true do + before do + add_author_resource + end + + context 'edit form' do + before do + visit '/admin/authors/new' + end + + before do + page.find('#author_birthday').click + + page.find('.xdsoft_datetimepicker', visible: true) + .find('.xdsoft_calendar td.xdsoft_date[data-date="1"]').click + page.find('.xdsoft_datetimepicker', visible: true) + .find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click + end + + it 'can set birthday' do + date_birthday = Date.today.beginning_of_month.strftime("%Y-%m-%d") + expect(page.find('#author_birthday').value).to start_with(date_birthday) + expect(page).to have_css('#author_birthday[placeholder="Formtastic placeholder"]') + end + end +end diff --git a/spec/filter_form_spec.rb b/spec/filter_form_spec.rb new file mode 100644 index 0000000..f46fe50 --- /dev/null +++ b/spec/filter_form_spec.rb @@ -0,0 +1,89 @@ +require 'spec_helper' + +describe 'authors index', type: :feature, js: true do + before do + add_author_resource + end + + context 'index filters' do + before do + visit '/admin/authors' + end + + context 'filter by Date column' do + before do + page.find('input#q_birthday_gteq').click + + page.find('.xdsoft_datetimepicker', visible: true) + .find('.xdsoft_calendar td.xdsoft_date[data-date="1"]').click + page.find('.xdsoft_datetimepicker', visible: true) + .find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click + + page.find('input#q_birthday_lteq').click + + page.find('.xdsoft_datetimepicker', visible: true) + .find('.xdsoft_calendar td.xdsoft_date[data-date="20"]').click + page.find('.xdsoft_datetimepicker', visible: true) + .find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click + end + + it 'can set date from/to' do + date_from = Date.today.beginning_of_month.strftime("%Y-%m-%d") + date_to = (Date.today.beginning_of_month + 19.days).strftime("%Y-%m-%d") + + expect(page.find('input#q_birthday_gteq').value).to start_with(date_from) + expect(page.find('input#q_birthday_lteq').value).to start_with(date_to) + + expect(page).to have_css('input#q_birthday_gteq[placeholder="From"]') + expect(page).to have_css('input#q_birthday_lteq[placeholder="To"]') + + page.find('#sidebar input[type=submit]').click + page.has_css?('h4', text: 'Current filters:') + + # birthday(Date type) is a Date column, should not contain H:M + expect(page.find('#q_birthday_gteq').value).to match(/\A\d{4}-\d{2}-\d{2}\z/) + end + end + + context 'filter by DateTime/Timestamp column' do + before do + Author.create!(name: "Ren", + last_name: "from-20-day-of-month", + created_at: (Time.now.change(day: 20) - 1.hour).to_s(:db)) + + Author.create!(name: "Rey", + last_name: "from-the-future", + created_at: (Time.now.change(day: 20) + 2.hours).to_s(:db)) + + # chose 01 and 20 day of the current month + + page.find('input#q_created_at_gteq_datetime_picker').click + + page.find('.xdsoft_datetimepicker', visible: true) + .find('.xdsoft_calendar td.xdsoft_date[data-date="1"]').click + page.find('.xdsoft_datetimepicker', visible: true) + .find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click + + page.find('input#q_created_at_lteq_datetime_picker').click + + page.find('.xdsoft_datetimepicker', visible: true) + .find('.xdsoft_calendar td.xdsoft_date[data-date="20"]').click + page.find('.xdsoft_datetimepicker', visible: true) + .find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click + + page.find('#sidebar input[type=submit]').click + page.has_css?('h4', text: 'Current filters:') + end + + it 'q_created_at_lteq_datetime send correct value to SQL' do + expect(page).to have_text('from-20-day-of-month') + expect(page).not_to have_text('from-the-future') + end + + it 'submit filter form' do + # created_at(Timestamp type) should contain Hours:Minutes, as selected before submit + expect(page.find('#q_created_at_gteq_datetime_picker').value).to match(/\A\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}\z/) + end + end + end +end diff --git a/spec/filters_and_edit_form_spec.rb b/spec/filters_and_edit_form_spec.rb deleted file mode 100644 index ef12838..0000000 --- a/spec/filters_and_edit_form_spec.rb +++ /dev/null @@ -1,87 +0,0 @@ -require 'spec_helper' - -describe 'authors index', type: :feature, js: true do - - before do - Author.create!(name: "John", last_name: "Doe") - Author.create!(name: "Jane", last_name: "Roe") - end - - before do - add_author_resource - end - - context 'index filters' do - before do - visit '/admin/authors' - end - - before do - page.find('input#q_birthday_gteq').click - - page.find('.xdsoft_datetimepicker', visible: true) - .find('.xdsoft_calendar td.xdsoft_date[data-date="1"]').click - page.find('.xdsoft_datetimepicker', visible: true) - .find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click - - page.find('input#q_birthday_lteq').click - - page.find('.xdsoft_datetimepicker', visible: true) - .find('.xdsoft_calendar td.xdsoft_date[data-date="20"]').click - page.find('.xdsoft_datetimepicker', visible: true) - .find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click - end - - it 'can set date from/to' do - date_from = Date.today.beginning_of_month.strftime("%Y-%m-%d") - date_to = (Date.today.beginning_of_month + 19.days).strftime("%Y-%m-%d") - - expect(page.find('input#q_birthday_gteq').value).to start_with(date_from) - expect(page.find('input#q_birthday_lteq').value).to start_with(date_to) - - expect(page).to have_css('input#q_birthday_gteq[placeholder="From"]') - expect(page).to have_css('input#q_birthday_lteq[placeholder="To"]') - end - - it 'submit filter form' do - page.find('#q_created_at_gteq_datetime').click - - page.find('.xdsoft_datetimepicker', visible: true) - .find('.xdsoft_calendar td.xdsoft_date[data-date="1"]').click - page.find('.xdsoft_datetimepicker', visible: true) - .find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click - - page.find('#sidebar input[type=submit]').click - expect(page).to have_css('h4', text: 'Current filters:') - - # should contain Hours:Minutes, as selected before submit - expect(page.find('#q_created_at_gteq_datetime').value).to match(/\A\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}\z/) - - # birthday is a Date column, should not contain H:M - expect(page.find('#q_birthday_gteq').value).to match(/\A\d{4}-\d{2}-\d{2}\z/) - end - end - - - context 'edit form' do - before do - visit '/admin/authors/new' - end - - before do - page.find('#author_birthday').click - - page.find('.xdsoft_datetimepicker', visible: true) - .find('.xdsoft_calendar td.xdsoft_date[data-date="1"]').click - page.find('.xdsoft_datetimepicker', visible: true) - .find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click - end - - it 'can set birthday' do - date_birthday = Date.today.beginning_of_month.strftime("%Y-%m-%d") - expect(page.find('#author_birthday').value).to start_with(date_birthday) - expect(page).to have_css('#author_birthday[placeholder="Formtastic placeholder"]') - end - end - -end