require "rails_helper" feature "Proposal's dashboard" do let!(:proposal) { create(:proposal, :draft) } before do login_as(proposal.author) visit proposal_dashboard_path(proposal) end scenario "Dashboard has a link to my proposal" do expect(page).to have_link("My proposal") end scenario "My proposal has a link to edit the proposal" do expect(page).to have_link("Edit proposal") end scenario "My proposal has a link to retire the proposal" do expect(page).to have_link("Retire proposal") end scenario "My proposal has a link to publish the proposal" do expect(page).to have_link("Publish proposal") end scenario "Publish link dissapears after proposal's publication" do click_link "Publish proposal" expect(page).not_to have_link("Publish proposal") end scenario "Dashboard progress shows current goal", js: true do goal = create(:dashboard_action, :resource, :active, required_supports: proposal.votes_for.size + 1_000) future_goal = create(:dashboard_action, :resource, :active, required_supports: proposal.votes_for.size + 2_000) visit progress_proposal_dashboard_path(proposal) within "div#goals-section" do expect(page).to have_content(goal.title) expect(page).not_to have_content(future_goal.title) find(:css, "#see_complete_course_link").click expect(page).to have_content(goal.title) expect(page).to have_content(future_goal.title) end end scenario "Dashboard progress show proposed actions" do action = create(:dashboard_action, :proposed_action, :active) visit progress_proposal_dashboard_path(proposal) expect(page).to have_content(action.title) end scenario "Dashboard progress do not display from the fourth proposed actions", js: true do create_list(:dashboard_action, 4, :proposed_action, :active) action_5 = create(:dashboard_action, :proposed_action, :active) visit progress_proposal_dashboard_path(proposal) expect(page).not_to have_content(action_5.title) end scenario "Dashboard progress display link to new page for proposed actions when there are more than four proposed actions", js: true do create_list(:dashboard_action, 4, :proposed_action, :active) action_5 = create(:dashboard_action, :proposed_action, :active) visit progress_proposal_dashboard_path(proposal) expect(page).to have_link("Go to recommended actions") end scenario "Dashboard progress do not display link to new page for proposed actions when there are less than five proposed actions", js: true do create_list(:dashboard_action, 4, :proposed_action, :active) visit progress_proposal_dashboard_path(proposal) expect(page).not_to have_link("Check out recommended actions") end scenario "Dashboard progress display proposed_action pending on his section" do action = create(:dashboard_action, :proposed_action, :active) visit progress_proposal_dashboard_path(proposal) within "#proposed_actions_pending" do expect(page).to have_content(action.title) end end scenario "Dashboard progress display contains no results text when there are not proposed_actions pending" do visit progress_proposal_dashboard_path(proposal) expect(page).to have_content("No recommended actions pending") end scenario "Dashboard progress display proposed_action done on his section" do action = create(:dashboard_action, :proposed_action, :active) visit progress_proposal_dashboard_path(proposal) find(:css, "#dashboard_action_#{action.id}_execute").click within "#proposed_actions_done" do expect(page).to have_content(action.title) end end scenario "Display no results text when there are not proposed_actions done" do visit progress_proposal_dashboard_path(proposal) expect(page).to have_content("No recommended actions done") end scenario "Dashboard progress can execute proposed action" do action = create(:dashboard_action, :proposed_action, :active) visit progress_proposal_dashboard_path(proposal) expect(page).to have_content(action.title) find(:css, "#dashboard_action_#{action.id}_execute").click expect(page).not_to have_selector(:css, "#dashboard_action_#{action.id}_execute") end scenario "Dashboard progress dont show proposed actions with published_proposal: true" do action = create(:dashboard_action, :proposed_action, :active, published_proposal: true) visit progress_proposal_dashboard_path(proposal) expect(page).not_to have_content(action.title) end scenario "Dashboard progress show available resources for proposal draft" do available = create(:dashboard_action, :resource, :active) requested = create(:dashboard_action, :resource, :admin_request, :active) executed_action = create(:dashboard_executed_action, action: requested, proposal: proposal, executed_at: Time.current) _task = create(:dashboard_administrator_task, :pending, source: executed_action) solved = create(:dashboard_action, :resource, :admin_request, :active) executed_solved_action = create(:dashboard_executed_action, action: solved, proposal: proposal, executed_at: Time.current) _solved_task = create(:dashboard_administrator_task, :done, source: executed_solved_action) unavailable = create(:dashboard_action, :resource, :active, required_supports: proposal.votes_for.size + 1_000) visit progress_proposal_dashboard_path(proposal) within "div#available-resources-section" do expect(page).to have_content("Polls") expect(page).to have_content("E-mail") expect(page).to have_content("Poster") expect(page).to have_content(available.title) expect(page).to have_content(unavailable.title) expect(page).to have_content(requested.title) expect(page).to have_content(solved.title) within "div#dashboard_action_#{available.id}" do expect(page).to have_link("Request resource") end within "div#dashboard_action_#{requested.id}" do expect(page).to have_content("Resource already requested") end within "div#dashboard_action_#{unavailable.id}" do expect(page).to have_content("1.000 supports required") end within "div#dashboard_action_#{solved.id}" do expect(page).to have_link("See resource") end end end scenario "Dashboard progress show available resources for published proposal" do proposal.update(published_at: Date.today) available = create(:dashboard_action, :resource, :active) requested = create(:dashboard_action, :resource, :admin_request, :active) executed_action = create(:dashboard_executed_action, action: requested, proposal: proposal, executed_at: Time.current) _task = create(:dashboard_administrator_task, :pending, source: executed_action) solved = create(:dashboard_action, :resource, :admin_request, :active) executed_solved_action = create(:dashboard_executed_action, action: solved, proposal: proposal, executed_at: Time.current) _solved_task = create(:dashboard_administrator_task, :done, source: executed_solved_action) unavailable = create(:dashboard_action, :resource, :active, required_supports: proposal.votes_for.size + 1_000) visit progress_proposal_dashboard_path(proposal) within "div#available-resources-section" do expect(page).to have_content("Polls") expect(page).to have_content("E-mail") expect(page).to have_content("Poster") expect(page).to have_content(available.title) expect(page).to have_content(unavailable.title) expect(page).to have_content(requested.title) expect(page).to have_content(solved.title) within "div#dashboard_action_#{available.id}" do expect(page).to have_link("Request resource") end within "div#dashboard_action_#{requested.id}" do expect(page).to have_content("Resource already requested") end within "div#dashboard_action_#{unavailable.id}" do expect(page).to have_content("1.000 supports required") end within "div#dashboard_action_#{solved.id}" do expect(page).to have_link("See resource") end end end scenario "Dashboard progress dont show resources with published_proposal: true" do available = create(:dashboard_action, :resource, :active, published_proposal: true) unavailable = create(:dashboard_action, :resource, :active, required_supports: proposal.votes_for.size + 1_000, published_proposal: true) visit progress_proposal_dashboard_path(proposal) within "div#available-resources-section" do expect(page).to have_content("Polls") expect(page).to have_content("E-mail") expect(page).to have_content("Poster") expect(page).not_to have_content(available.title) expect(page).not_to have_content(unavailable.title) end end scenario "Dashboard has a link to polls feature" do expect(page).to have_link("Polls") end scenario "Dashboard has a link to e-mail feature" do expect(page).to have_link("E-mail") end scenario "Dashboard has a link to poster feature" do expect(page).to have_link("Poster") end scenario "Dashboard has a link to resources on main menu" do feature = create(:dashboard_action, :resource, :active) visit proposal_dashboard_path(proposal) expect(page).to have_link(feature.title) end scenario "Request resource with admin request", js: true do feature = create(:dashboard_action, :resource, :active, :admin_request) visit proposal_dashboard_path(proposal) click_link(feature.title) click_button "Request" expect(page).to have_content("The request for the administrator has been successfully sent.") end scenario "Request already requested resource with admin request", js: true do feature = create(:dashboard_action, :resource, :active, :admin_request) visit proposal_dashboard_path(proposal) click_link(feature.title) create(:dashboard_executed_action, action: feature, proposal: proposal) click_button "Request" expect(page).to have_content("Proposal has already been taken") end scenario "Resource without admin request do not have a request link", js: true do feature = create(:dashboard_action, :resource, :active) visit proposal_dashboard_path(proposal) click_link(feature.title) expect(page).not_to have_button("Request") end scenario "Dashboard has a link to dashboard community", js: true do expect(page).to have_link("Community") click_link "Community" expect(page).to have_content("Participants") expect(page).to have_content("Debates") expect(page).to have_content("Comments") expect(page).to have_link("Access the community") end scenario "Dashboard has a link to recommended_actions", js: true do expect(page).to have_link("Recommended actions") click_link "Recommended actions" expect(page).to have_content("Recommended actions") expect(page).to have_content("Pending") expect(page).to have_content("Done") end scenario "On recommended actions section display from the fourth proposed actions when click see_proposed_actions_link", js: true do create_list(:dashboard_action, 4, :proposed_action, :active) action_5 = create(:dashboard_action, :proposed_action, :active) visit recommended_actions_proposal_dashboard_path(proposal.to_param) find(:css, "#see_proposed_actions_link_pending").click expect(page).to have_content(action_5.title) end scenario "On recommended actions section display four proposed actions", js: true do create_list(:dashboard_action, 4, :proposed_action, :active) action_5 = create(:dashboard_action, :proposed_action, :active) visit recommended_actions_proposal_dashboard_path(proposal.to_param) expect(page).not_to have_content(action_5.title) end scenario "On recommended actions section display link for toggle when there are more than four proposed actions", js: true do create_list(:dashboard_action, 4, :proposed_action, :active) action_5 = create(:dashboard_action, :proposed_action, :active) visit recommended_actions_proposal_dashboard_path(proposal.to_param) expect(page).to have_content("Check out recommended actions") end scenario "On recommended actions section do not display link for toggle when there are less than five proposed actions", js: true do create_list(:dashboard_action, 4, :proposed_action, :active) visit recommended_actions_proposal_dashboard_path(proposal.to_param) expect(page).not_to have_link("Check out recommended actions") end scenario "On recommended actions section display proposed_action pending on his section" do action = create(:dashboard_action, :proposed_action, :active) visit recommended_actions_proposal_dashboard_path(proposal.to_param) within "#proposed_actions_pending" do expect(page).to have_content(action.title) end end scenario "On recommended actions section contains no results text when there are not proposed_actions pending" do visit recommended_actions_proposal_dashboard_path(proposal.to_param) expect(page).to have_content("No recommended actions pending") end scenario "On recommended actions section display proposed_action done on his section" do action = create(:dashboard_action, :proposed_action, :active) visit recommended_actions_proposal_dashboard_path(proposal.to_param) find(:css, "#dashboard_action_#{action.id}_execute").click within "#proposed_actions_done" do expect(page).to have_content(action.title) end end scenario "On recommended actions section contains no_results_text when there are not proposed_actions pending" do visit progress_proposal_dashboard_path(proposal) expect(page).to have_content("No recommended actions done") end end