From 4275069a1ed324604ad602edc6f14a0015aaa450 Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Tue, 5 Jun 2018 12:21:03 -0400 Subject: [PATCH] Include tests for recommendations feature --- spec/features/account_spec.rb | 26 +++++++++++++ spec/features/debates_spec.rb | 64 +++++++++++++++++++++++-------- spec/features/proposals_spec.rb | 68 ++++++++++++++++++++++++++------- 3 files changed, 129 insertions(+), 29 deletions(-) diff --git a/spec/features/account_spec.rb b/spec/features/account_spec.rb index 2713815ae..0cbe6a4bd 100644 --- a/spec/features/account_spec.rb +++ b/spec/features/account_spec.rb @@ -174,4 +174,30 @@ feature 'Account' do expect(page).to have_content "Invalid login or password" end + + context 'Recommendations' do + + background do + Setting['feature.user.recommendations'] = true + Setting['feature.user.recommendations_on_debates'] = true + Setting['feature.user.recommendations_on_proposals'] = true + end + + after do + Setting['feature.user.recommendations'] = nil + Setting['feature.user.recommendations_on_debates'] = nil + Setting['feature.user.recommendations_on_proposals'] = nil + end + + scenario 'show checkboxes to enable/disable recommendations (disabled by default)' do + visit account_path + + expect(page).to have_content('Recommendations') + expect(page).to have_content('Show debates recommendations') + expect(page).to have_content('Show proposals recommendations') + expect(find("#account_recommended_debates")).not_to be_checked + expect(find("#account_recommended_proposals")).not_to be_checked + end + + end end diff --git a/spec/features/debates_spec.rb b/spec/features/debates_spec.rb index 2f55dba85..ceb551765 100644 --- a/spec/features/debates_spec.rb +++ b/spec/features/debates_spec.rb @@ -397,9 +397,9 @@ feature 'Debates' do context 'Recommendations' do - let!(:best_debate) { create(:debate, title: 'Best', cached_votes_total: 10, tag_list: "Sport") } - let!(:medium_debate) { create(:debate, title: 'Medium', cached_votes_total: 5, tag_list: "Sport") } - let!(:worst_debate) { create(:debate, title: 'Worst', cached_votes_total: 1, tag_list: "Sport") } + let!(:best_debate) { create(:debate, title: 'Best', cached_votes_total: 10, tag_list: "Sport") } + let!(:medium_debate) { create(:debate, title: 'Medium', cached_votes_total: 5, tag_list: "Sport") } + let!(:worst_debate) { create(:debate, title: 'Worst', cached_votes_total: 1, tag_list: "Sport") } background do Setting['feature.user.recommendations'] = true @@ -411,17 +411,27 @@ feature 'Debates' do Setting['feature.user.recommendations_on_debates'] = nil end - scenario 'Debates can not ordered by recommendations when there is not an user logged', :js do + scenario 'Debates can not ordered by recommendations when there is not an user logged' do visit debates_path - expect(page).not_to have_selector('a', text: 'recommendations') end scenario 'Show recommended debates on index header' do + user = create(:user) proposal = create(:proposal, tag_list: "Sport") - user = create(:user) create(:follow, followable: proposal, user: user) + login_as(user) + visit account_path + + expect(page).to have_content('Recommendations') + expect(page).to have_content('Show debates recommendations') + expect(find("#account_recommended_debates")).not_to be_checked + + check 'account_recommended_debates' + click_button 'Save changes' + + expect(find("#account_recommended_debates")).to be_checked visit debates_path @@ -432,10 +442,11 @@ feature 'Debates' do expect(page).to have_link "See more recommendations" end - scenario 'Should display text when there are not recommendeds results', :js do - user = create(:user) + scenario 'Should display text when there are not recommended results' do + user = create(:user, recommended_debates: true) proposal = create(:proposal, tag_list: "Distinct_to_sport") create(:follow, followable: proposal, user: user) + login_as(user) visit debates_path @@ -444,8 +455,8 @@ feature 'Debates' do expect(page).to have_content "There are not debates related to your interests" end - scenario 'Should display text when user has not related interests', :js do - user = create(:user) + scenario 'Should display text when user has not related interests' do + user = create(:user, recommended_debates: true) login_as(user) visit debates_path @@ -454,12 +465,12 @@ feature 'Debates' do expect(page).to have_content "Follow proposals so we can give you recommendations" end - scenario 'Debates are ordered by recommendations when there is a user logged', :js do + scenario 'Debates are ordered by recommendations when there is a user logged' do + user = create(:user, recommended_debates: true) proposal = create(:proposal, tag_list: "Sport") - user = create(:user) create(:follow, followable: proposal, user: user) - login_as(user) + login_as(user) visit debates_path click_link 'recommendations' @@ -474,6 +485,24 @@ feature 'Debates' do expect(current_url).to include('order=recommendations') expect(current_url).to include('page=1') end + + scenario 'Recommendations are not shown if feature is disabled' do + user = create(:user) + proposal = create(:proposal, tag_list: "Sport") + create(:follow, followable: proposal, user: user) + + login_as(user) + visit account_path + + expect(page).to have_content('Recommendations') + expect(page).to have_content('Show debates recommendations') + expect(find("#account_recommended_debates")).not_to be_checked + + visit debates_path + + expect(page).not_to have_css('.recommendation', count: 3) + expect(page).not_to have_link('recommendations') + end end end @@ -883,10 +912,13 @@ feature 'Debates' do end end - scenario "Reorder by recommendations results maintaing search", :js do + scenario "Reorder by recommendations results maintaing search" do Setting['feature.user.recommendations'] = true - user = create(:user) + Setting['feature.user.recommendations_for_debates'] = true + + user = create(:user, recommended_debates: true) login_as(user) + debate1 = create(:debate, title: "Show you got", cached_votes_total: 10, tag_list: "Sport") debate2 = create(:debate, title: "Show what you got", cached_votes_total: 1, tag_list: "Sport") debate3 = create(:debate, title: "Do not display with same tag", cached_votes_total: 100, tag_list: "Sport") @@ -906,7 +938,9 @@ feature 'Debates' do expect(page).not_to have_content "Do not display with same tag" expect(page).not_to have_content "Do not display" end + Setting['feature.user.recommendations'] = nil + Setting['feature.user.recommendations_for_debates'] = nil end scenario 'After a search do not show featured debates' do diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index 95037ca23..4000eb504 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -721,9 +721,9 @@ feature 'Proposals' do context 'Recommendations' do - let!(:best_proposal) { create(:proposal, title: 'Best', cached_votes_up: 10, tag_list: "Sport") } - let!(:medium_proposal) { create(:proposal, title: 'Medium', cached_votes_up: 5, tag_list: "Sport") } - let!(:worst_proposal) { create(:proposal, title: 'Worst', cached_votes_up: 1, tag_list: "Sport") } + let!(:best_proposal) { create(:proposal, title: 'Best', cached_votes_up: 10, tag_list: "Sport") } + let!(:medium_proposal) { create(:proposal, title: 'Medium', cached_votes_up: 5, tag_list: "Sport") } + let!(:worst_proposal) { create(:proposal, title: 'Worst', cached_votes_up: 1, tag_list: "Sport") } before do Setting['feature.user.recommendations'] = true @@ -735,18 +735,29 @@ feature 'Proposals' do Setting['feature.user.recommendations_on_proposals'] = nil end - scenario 'Proposals can not ordered by recommendations when there is not an user logged', :js do + scenario 'Proposals can not ordered by recommendations when there is not an user logged' do visit proposals_path - expect(page).not_to have_selector('a', text: 'recommendations') end scenario 'Show recommended proposals on index header' do + user = create(:user) proposal = create(:proposal, tag_list: "Sport") - user = create(:user) create(:follow, followable: proposal, user: user) + login_as(user) + visit account_path + + expect(page).to have_content('Recommendations') + expect(page).to have_content('Show proposals recommendations') + expect(find("#account_recommended_proposals")).not_to be_checked + + check 'account_recommended_proposals' + click_button 'Save changes' + + expect(find("#account_recommended_proposals")).to be_checked + visit proposals_path expect(page).to have_css('.recommendation', count: 3) @@ -756,11 +767,13 @@ feature 'Proposals' do expect(page).to have_link "See more recommendations" end - scenario 'Should display text when there are not recommendeds results', :js do - user = create(:user) + scenario 'Should display text when there are not recommended results' do + user = create(:user, recommended_proposals: true) proposal = create(:proposal, tag_list: "Distinct_to_sport") create(:follow, followable: proposal, user: user) + login_as(user) + visit proposals_path click_link 'recommendations' @@ -768,9 +781,11 @@ feature 'Proposals' do expect(page).to have_content "There are not proposals related to your interests" end - scenario 'Should display text when user has not related interests', :js do - user = create(:user) + scenario 'Should display text when user has not related interests' do + user = create(:user, recommended_proposals: true) + login_as(user) + visit proposals_path click_link 'recommendations' @@ -778,10 +793,11 @@ feature 'Proposals' do expect(page).to have_content "Follow proposals so we can give you recommendations" end - scenario 'Proposals are ordered by recommendations when there is an user logged', :js do - user = create(:user) + scenario 'Proposals are ordered by recommendations when there is an user logged' do + user = create(:user, recommended_proposals: true) proposal = create(:proposal, tag_list: "Sport") create(:follow, followable: proposal, user: user) + login_as(user) visit proposals_path @@ -798,6 +814,25 @@ feature 'Proposals' do expect(current_url).to include('order=recommendations') expect(current_url).to include('page=1') end + + scenario 'Recommendations are not shown if feature is disabled' do + user = create(:user) + proposal = create(:proposal, tag_list: "Sport") + create(:follow, followable: proposal, user: user) + + login_as(user) + + visit account_path + + expect(page).to have_content('Recommendations') + expect(page).to have_content('Show proposals recommendations') + expect(find("#account_recommended_proposals")).not_to be_checked + + visit proposals_path + + expect(page).not_to have_css('.recommendation', count: 3) + expect(page).not_to have_link('recommendations') + end end end @@ -1334,10 +1369,13 @@ feature 'Proposals' do end end - scenario "Reorder by recommendations results maintaing search", :js do + scenario "Reorder by recommendations results maintaing search" do Setting['feature.user.recommendations'] = true - user = create(:user) + Setting['feature.user.recommendations_for_proposals'] = true + + user = create(:user, recommended_proposals: true) login_as(user) + proposal1 = create(:proposal, title: "Show you got", cached_votes_up: 10, tag_list: "Sport") proposal2 = create(:proposal, title: "Show what you got", cached_votes_up: 1, tag_list: "Sport") proposal3 = create(:proposal, title: "Do not display with same tag", cached_votes_up: 100, tag_list: "Sport") @@ -1357,7 +1395,9 @@ feature 'Proposals' do expect(page).not_to have_content "Do not display with same tag" expect(page).not_to have_content "Do not display" end + Setting['feature.user.recommendations'] = nil + Setting['feature.user.recommendations_for_proposals'] = nil end scenario 'After a search do not show featured proposals' do