diff --git a/app/controllers/concerns/commentable_actions.rb b/app/controllers/concerns/commentable_actions.rb index f9212e7c2..b4b3c06df 100644 --- a/app/controllers/concerns/commentable_actions.rb +++ b/app/controllers/concerns/commentable_actions.rb @@ -90,17 +90,26 @@ module CommentableActions def parse_search_date return unless search_by_date? - - start = eval(params[:advanced_search][:date_min].inspect).to_time - finish = params[:advanced_search][:date_max].try(:to_time) || Date.today - - params[:advanced_search][:date_range] = start.beginning_of_day..finish.end_of_day + params[:advanced_search][:date_range] = search_date_range end def search_by_date? params[:advanced_search] && params[:advanced_search][:date_min].present? end + def search_start_date + date = Date.parse(params[:advanced_search][:date_min]) rescue nil + date || eval(params[:advanced_search][:date_min]).to_date + end + + def search_finish_date + params[:advanced_search][:date_max].try(:to_date) || Date.today + end + + def search_date_range + search_start_date.beginning_of_day..search_finish_date.end_of_day + end + def set_search_order if params[:search].present? && params[:order].blank? params[:order] = 'relevance' diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb index 9deab2efe..eb027aae3 100644 --- a/app/helpers/search_helper.rb +++ b/app/helpers/search_helper.rb @@ -14,7 +14,7 @@ module SearchHelper options_for_select([ [t("shared.advanced_search.date_1"), "24.hours.ago"], [t("shared.advanced_search.date_2"), "1.week.ago"], - [t("shared.advanced_search.date_3"), "1.month.ago"], + [t("shared.advanced_search.date_3"), "30.days.ago"], [t("shared.advanced_search.date_4"), "1.year.ago"], [t("shared.advanced_search.date_5"), 'custom']], selected_date_range) diff --git a/config/locales/en.yml b/config/locales/en.yml index fae9929c3..951d6db12 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -390,7 +390,7 @@ en: date: 'By date' date_1: 'Last 24 hours' date_2: 'Last week' - date_3: 'Last 30 days' + date_3: 'Last month' date_4: 'Last year' date_5: 'Customized' from: 'From' diff --git a/config/locales/es.yml b/config/locales/es.yml index 5729e38d4..57781b3a9 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -390,7 +390,7 @@ es: date: 'Por fecha' date_1: 'Últimas 24 horas' date_2: 'Última semana' - date_3: 'Últimos 30 días' + date_3: 'Último mes' date_4: 'Último año' date_5: 'Personalizada' from: 'Desde' diff --git a/spec/features/debates_spec.rb b/spec/features/debates_spec.rb index f48e03635..8447004c3 100644 --- a/spec/features/debates_spec.rb +++ b/spec/features/debates_spec.rb @@ -535,42 +535,20 @@ feature 'Debates' do end end - #NOTE: Test the different offical levels with unit tests. - scenario "Search by author type", :js do - ana = create :user, official_level: 1 - john = create :user, official_level: 2 + context "Search by author type" do - debate1 = create(:debate, author: ana) - debate2 = create(:debate, author: ana) - debate3 = create(:debate, author: john) + scenario "Public employee", :js do + ana = create :user, official_level: 1 + john = create :user, official_level: 2 - visit debates_path - - click_link "Advanced search" - select "Public employee", from: "advanced_search_official_level" - click_button "Filter" - - within("#debates") do - expect(page).to have_css('.debate', count: 2) - - expect(page).to have_content(debate1.title) - expect(page).to have_content(debate2.title) - expect(page).to_not have_content(debate3.title) - end - end - - context "Search by date" do - - #NOTE: Test the different date ranges with unit tests. - scenario "Search by predefined date range", :js do - debate1 = create(:debate, created_at: 1.minute.ago) - debate2 = create(:debate, created_at: 1.hour.ago) - debate3 = create(:debate, created_at: 2.days.ago) + debate1 = create(:debate, author: ana) + debate2 = create(:debate, author: ana) + debate3 = create(:debate, author: john) visit debates_path click_link "Advanced search" - select "Last 24 hours", from: "js-advanced-search-date-min" + select "Public employee", from: "advanced_search_official_level" click_button "Filter" within("#debates") do @@ -582,6 +560,186 @@ feature 'Debates' do end end + scenario "Municipal Organization", :js do + ana = create :user, official_level: 2 + john = create :user, official_level: 3 + + debate1 = create(:debate, author: ana) + debate2 = create(:debate, author: ana) + debate3 = create(:debate, author: john) + + visit debates_path + + click_link "Advanced search" + select "Municipal Organization", from: "advanced_search_official_level" + click_button "Filter" + + within("#debates") do + expect(page).to have_css('.debate', count: 2) + + expect(page).to have_content(debate1.title) + expect(page).to have_content(debate2.title) + expect(page).to_not have_content(debate3.title) + end + end + + scenario "General director", :js do + ana = create :user, official_level: 3 + john = create :user, official_level: 4 + + debate1 = create(:debate, author: ana) + debate2 = create(:debate, author: ana) + debate3 = create(:debate, author: john) + + visit debates_path + + click_link "Advanced search" + select "General director", from: "advanced_search_official_level" + click_button "Filter" + + within("#debates") do + expect(page).to have_css('.debate', count: 2) + + expect(page).to have_content(debate1.title) + expect(page).to have_content(debate2.title) + expect(page).to_not have_content(debate3.title) + end + end + + scenario "City councillor", :js do + ana = create :user, official_level: 4 + john = create :user, official_level: 5 + + debate1 = create(:debate, author: ana) + debate2 = create(:debate, author: ana) + debate3 = create(:debate, author: john) + + visit debates_path + + click_link "Advanced search" + select "City councillor", from: "advanced_search_official_level" + click_button "Filter" + + within("#debates") do + expect(page).to have_css('.debate', count: 2) + + expect(page).to have_content(debate1.title) + expect(page).to have_content(debate2.title) + expect(page).to_not have_content(debate3.title) + end + end + + scenario "Mayoress", :js do + ana = create :user, official_level: 5 + john = create :user, official_level: 4 + + debate1 = create(:debate, author: ana) + debate2 = create(:debate, author: ana) + debate3 = create(:debate, author: john) + + visit debates_path + + click_link "Advanced search" + select "Mayoress", from: "advanced_search_official_level" + click_button "Filter" + + within("#debates") do + expect(page).to have_css('.debate', count: 2) + + expect(page).to have_content(debate1.title) + expect(page).to have_content(debate2.title) + expect(page).to_not have_content(debate3.title) + end + end + + end + + context "Search by date" do + + context "Predefined date ranges" do + + scenario "Last day", :js do + debate1 = create(:debate, created_at: 1.minute.ago) + debate2 = create(:debate, created_at: 1.hour.ago) + debate3 = create(:debate, created_at: 2.days.ago) + + visit debates_path + + click_link "Advanced search" + select "Last 24 hours", from: "js-advanced-search-date-min" + click_button "Filter" + + within("#debates") do + expect(page).to have_css('.debate', count: 2) + + expect(page).to have_content(debate1.title) + expect(page).to have_content(debate2.title) + expect(page).to_not have_content(debate3.title) + end + end + + scenario "Last week", :js do + debate1 = create(:debate, created_at: 1.day.ago) + debate2 = create(:debate, created_at: 5.days.ago) + debate3 = create(:debate, created_at: 8.days.ago) + + visit debates_path + + click_link "Advanced search" + select "Last week", from: "js-advanced-search-date-min" + click_button "Filter" + + within("#debates") do + expect(page).to have_css('.debate', count: 2) + + expect(page).to have_content(debate1.title) + expect(page).to have_content(debate2.title) + expect(page).to_not have_content(debate3.title) + end + end + + scenario "Last month", :js do + debate1 = create(:debate, created_at: 10.days.ago) + debate2 = create(:debate, created_at: 20.days.ago) + debate3 = create(:debate, created_at: 33.days.ago) + + visit debates_path + + click_link "Advanced search" + select "Last month", from: "js-advanced-search-date-min" + click_button "Filter" + + within("#debates") do + expect(page).to have_css('.debate', count: 2) + + expect(page).to have_content(debate1.title) + expect(page).to have_content(debate2.title) + expect(page).to_not have_content(debate3.title) + end + end + + scenario "Last year", :js do + debate1 = create(:debate, created_at: 300.days.ago) + debate2 = create(:debate, created_at: 350.days.ago) + debate3 = create(:debate, created_at: 370.days.ago) + + visit debates_path + + click_link "Advanced search" + select "Last year", from: "js-advanced-search-date-min" + click_button "Filter" + + within("#debates") do + expect(page).to have_css('.debate', count: 2) + + expect(page).to have_content(debate1.title) + expect(page).to have_content(debate2.title) + expect(page).to_not have_content(debate3.title) + end + end + + end + scenario "Search by custom date range", :js do debate1 = create(:debate, created_at: 2.days.ago) debate2 = create(:debate, created_at: 3.days.ago) diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index 1a922b253..ec1085dc0 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -598,42 +598,20 @@ feature 'Proposals' do end end - #NOTE: Test the different offical levels with unit tests. - scenario "Search by author type", :js do - ana = create :user, official_level: 1 - john = create :user, official_level: 2 + context "Search by author type" do - proposal1 = create(:proposal, author: ana) - proposal2 = create(:proposal, author: ana) - proposal3 = create(:proposal, author: john) + scenario "Public employee", :js do + ana = create :user, official_level: 1 + john = create :user, official_level: 2 - visit proposals_path - - click_link "Advanced search" - select "Public employee", from: "advanced_search_official_level" - click_button "Filter" - - within("#proposals") do - expect(page).to have_css('.proposal', count: 2) - - expect(page).to have_content(proposal1.title) - expect(page).to have_content(proposal2.title) - expect(page).to_not have_content(proposal3.title) - end - end - - context "Search by date" do - - #NOTE: Test the different date ranges with unit tests. - scenario "Search by predefined date range", :js do - proposal1 = create(:proposal, created_at: 1.minute.ago) - proposal2 = create(:proposal, created_at: 1.hour.ago) - proposal3 = create(:proposal, created_at: 2.days.ago) + proposal1 = create(:proposal, author: ana) + proposal2 = create(:proposal, author: ana) + proposal3 = create(:proposal, author: john) visit proposals_path click_link "Advanced search" - select "Last 24 hours", from: "js-advanced-search-date-min" + select "Public employee", from: "advanced_search_official_level" click_button "Filter" within("#proposals") do @@ -645,6 +623,186 @@ feature 'Proposals' do end end + scenario "Municipal Organization", :js do + ana = create :user, official_level: 2 + john = create :user, official_level: 3 + + proposal1 = create(:proposal, author: ana) + proposal2 = create(:proposal, author: ana) + proposal3 = create(:proposal, author: john) + + visit proposals_path + + click_link "Advanced search" + select "Municipal Organization", from: "advanced_search_official_level" + click_button "Filter" + + within("#proposals") do + expect(page).to have_css('.proposal', count: 2) + + expect(page).to have_content(proposal1.title) + expect(page).to have_content(proposal2.title) + expect(page).to_not have_content(proposal3.title) + end + end + + scenario "General director", :js do + ana = create :user, official_level: 3 + john = create :user, official_level: 4 + + proposal1 = create(:proposal, author: ana) + proposal2 = create(:proposal, author: ana) + proposal3 = create(:proposal, author: john) + + visit proposals_path + + click_link "Advanced search" + select "General director", from: "advanced_search_official_level" + click_button "Filter" + + within("#proposals") do + expect(page).to have_css('.proposal', count: 2) + + expect(page).to have_content(proposal1.title) + expect(page).to have_content(proposal2.title) + expect(page).to_not have_content(proposal3.title) + end + end + + scenario "City councillor", :js do + ana = create :user, official_level: 4 + john = create :user, official_level: 5 + + proposal1 = create(:proposal, author: ana) + proposal2 = create(:proposal, author: ana) + proposal3 = create(:proposal, author: john) + + visit proposals_path + + click_link "Advanced search" + select "City councillor", from: "advanced_search_official_level" + click_button "Filter" + + within("#proposals") do + expect(page).to have_css('.proposal', count: 2) + + expect(page).to have_content(proposal1.title) + expect(page).to have_content(proposal2.title) + expect(page).to_not have_content(proposal3.title) + end + end + + scenario "Mayoress", :js do + ana = create :user, official_level: 5 + john = create :user, official_level: 4 + + proposal1 = create(:proposal, author: ana) + proposal2 = create(:proposal, author: ana) + proposal3 = create(:proposal, author: john) + + visit proposals_path + + click_link "Advanced search" + select "Mayoress", from: "advanced_search_official_level" + click_button "Filter" + + within("#proposals") do + expect(page).to have_css('.proposal', count: 2) + + expect(page).to have_content(proposal1.title) + expect(page).to have_content(proposal2.title) + expect(page).to_not have_content(proposal3.title) + end + end + + end + + context "Search by date" do + + context "Predefined date ranges" do + + scenario "Last day", :js do + proposal1 = create(:proposal, created_at: 1.minute.ago) + proposal2 = create(:proposal, created_at: 1.hour.ago) + proposal3 = create(:proposal, created_at: 2.days.ago) + + visit proposals_path + + click_link "Advanced search" + select "Last 24 hours", from: "js-advanced-search-date-min" + click_button "Filter" + + within("#proposals") do + expect(page).to have_css('.proposal', count: 2) + + expect(page).to have_content(proposal1.title) + expect(page).to have_content(proposal2.title) + expect(page).to_not have_content(proposal3.title) + end + end + + scenario "Last week", :js do + proposal1 = create(:proposal, created_at: 1.day.ago) + proposal2 = create(:proposal, created_at: 5.days.ago) + proposal3 = create(:proposal, created_at: 8.days.ago) + + visit proposals_path + + click_link "Advanced search" + select "Last week", from: "js-advanced-search-date-min" + click_button "Filter" + + within("#proposals") do + expect(page).to have_css('.proposal', count: 2) + + expect(page).to have_content(proposal1.title) + expect(page).to have_content(proposal2.title) + expect(page).to_not have_content(proposal3.title) + end + end + + scenario "Last month", :js do + proposal1 = create(:proposal, created_at: 10.days.ago) + proposal2 = create(:proposal, created_at: 20.days.ago) + proposal3 = create(:proposal, created_at: 33.days.ago) + + visit proposals_path + + click_link "Advanced search" + select "Last month", from: "js-advanced-search-date-min" + click_button "Filter" + + within("#proposals") do + expect(page).to have_css('.proposal', count: 2) + + expect(page).to have_content(proposal1.title) + expect(page).to have_content(proposal2.title) + expect(page).to_not have_content(proposal3.title) + end + end + + scenario "Last year", :js do + proposal1 = create(:proposal, created_at: 300.days.ago) + proposal2 = create(:proposal, created_at: 350.days.ago) + proposal3 = create(:proposal, created_at: 370.days.ago) + + visit proposals_path + + click_link "Advanced search" + select "Last year", from: "js-advanced-search-date-min" + click_button "Filter" + + within("#proposals") do + expect(page).to have_css('.proposal', count: 2) + + expect(page).to have_content(proposal1.title) + expect(page).to have_content(proposal2.title) + expect(page).to_not have_content(proposal3.title) + end + end + + end + scenario "Search by custom date range", :js do proposal1 = create(:proposal, created_at: 2.days.ago) proposal2 = create(:proposal, created_at: 3.days.ago) @@ -716,8 +874,8 @@ feature 'Proposals' do click_link "Advanced search" select "Customized", from: "js-advanced-search-date-min" - fill_in "advanced_search_date_min", with: 7.days.ago - fill_in "advanced_search_date_max", with: 1.days.ago + fill_in "advanced_search_date_min", with: 7.days.ago.to_date + fill_in "advanced_search_date_max", with: 1.days.ago.to_date click_button "Filter" within "#js-advanced-search" do