diff --git a/app/views/volunteers/index.html.erb b/app/views/volunteers/index.html.erb index 2e4fe387df..b90f53baa8 100644 --- a/app/views/volunteers/index.html.erb +++ b/app/views/volunteers/index.html.erb @@ -176,7 +176,7 @@ - + Name Email diff --git a/spec/system/volunteers/index_spec.rb b/spec/system/volunteers/index_spec.rb index 459e38ff53..3a13357aaf 100644 --- a/spec/system/volunteers/index_spec.rb +++ b/spec/system/volunteers/index_spec.rb @@ -36,8 +36,8 @@ visit volunteers_path - expect(page.find("#casa-logo")["src"]).to match "default-logo" - expect(page.find("#casa-logo")["alt"]).to have_content "CASA Logo" + expect(page).to have_selector("#casa-logo[src*='default-logo']") + expect(page).to have_selector("#casa-logo[alt='CASA Logo']") end end @@ -104,7 +104,7 @@ inactive_volunteers.each do |inactive_volunteer| expect(page).to have_text inactive_volunteer.display_name end - expect(page.all("table#volunteers tbody tr").count).to eq inactive_volunteers.count + expect(page).to have_selector("table#volunteers tbody tr", count: inactive_volunteers.count) visit volunteers_path click_on "Supervisor" @@ -112,7 +112,7 @@ assigned_volunteers.each do |assigned_volunteer| expect(page).to have_text assigned_volunteer.display_name end - expect(page.all("table#volunteers tbody tr").count).to eq assigned_volunteers.count + expect(page).to have_selector("table#volunteers tbody tr", count: assigned_volunteers.count) end it "can go to the volunteer edit page from the volunteer list", js: true do @@ -136,7 +136,7 @@ click_on "New Volunteer" expect(page).to have_text("New Volunteer") - expect(page).to have_css("form#new_volunteer") + expect(page).to have_selector("form#new_volunteer") end describe "supervisor column of volunteers table" do @@ -147,9 +147,8 @@ visit volunteers_path click_on "Supervisor" find(:css, "#unassigned-vol-filter").set(true) - supervisor_cell = page.find("tbody .supervisor-column") - expect(supervisor_cell.text).to eq "" + expect(page).to have_selector("tbody .supervisor-column", text: "") end it "displays supervisor's name when volunteer has supervisor", js: true do @@ -159,9 +158,7 @@ sign_in admin visit volunteers_path - supervisor_cell = page.find("tbody .supervisor-column") - - expect(supervisor_cell.text).to eq name + expect(page).to have_selector("tbody .supervisor-column", text: name) end it "is blank when volunteer's supervisor is inactive", js: true do @@ -171,184 +168,170 @@ visit volunteers_path click_on "Supervisor" find(:css, "#unassigned-vol-filter").set(true) - supervisor_cell = page.find("tbody .supervisor-column") - expect(supervisor_cell.text).to eq "" + expect(page).to have_selector("tbody .supervisor-column", text: "") end end # These tests are very flaky do to the use of datatables on this page. # If the page is switched over to Hotwire, should try to re-instate these tests. describe "Manage Volunteers button" do - # let!(:volunteers) { - # [ - # create(:volunteer, casa_org: organization), - # create(:volunteer, casa_org: organization), - # create(:volunteer, casa_org: organization) - # ] - # } - # - # before do - # sign_in admin - # end - - xit "does not display by default" do - # visit volunteers_path - # expect(page).not_to have_text "Manage Volunteer" + let!(:volunteers) { + [ + create(:volunteer, casa_org: organization), + create(:volunteer, casa_org: organization), + create(:volunteer, casa_org: organization) + ] + } + + before do + sign_in admin + end + + it "does not display by default" do + visit volunteers_path + expect(page).not_to have_text "Manage Volunteer" end context "when one or more volunteers selected" do - xit "is displayed" do - # visit volunteers_path - # find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}", wait: 3).click + it "is displayed" do + visit volunteers_path + find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}").click - # expect(page).to have_text "Manage Volunteer" + expect(page).to have_text "Manage Volunteer" end - xit "displays number of volunteers selected" do - # visit volunteers_path - # volunteers.each_with_index do |volunteer, index| - # find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}", wait: 3).click - # button = find("[data-select-all-target='buttonLabel']", wait: 3) - # expect(button).to have_text "(#{index + 1})" - # end + it "displays number of volunteers selected" do + visit volunteers_path + volunteers.each_with_index do |volunteer, index| + find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}").click + expect(page).to have_selector("[data-select-all-target='buttonLabel']", text: "#{index + 1})") + end end - xit "text matches pluralization of volunteers selected" do - # visit volunteers_path - # find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}", wait: 3).click - # expect(page).not_to have_text "Manage Volunteers" - # - # find("#supervisor_volunteer_volunteer_ids_#{volunteers[1].id}").click - # expect(page).to have_text "Manage Volunteers" + it "text matches pluralization of volunteers selected" do + visit volunteers_path + find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}").click + expect(page).not_to have_text "Manage Volunteers" + + find("#supervisor_volunteer_volunteer_ids_#{volunteers[1].id}").click + expect(page).to have_text "Manage Volunteers" end - xit "is hidden when all volunteers unchecked" do - # visit volunteers_path - # find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}", wait: 3).click - # expect(page).to have_text "Manage Volunteer" - # - # find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}").click - # expect(page).not_to have_text "Manage Volunteer" + it "is hidden when all volunteers unchecked" do + visit volunteers_path + find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}").click + expect(page).to have_text "Manage Volunteer" + + find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}").click + expect(page).not_to have_text "Manage Volunteer" end end end describe "Select All Checkbox" do - # let!(:volunteers) { - # [ - # create(:volunteer, casa_org: organization), - # create(:volunteer, casa_org: organization), - # create(:volunteer, casa_org: organization) - # ] - # } - - # before do - # sign_in admin - # end - - xit "selects all volunteers" do - # visit volunteers_path - # find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}") # Wait for data table to be loaded - # find("[data-select-all-target='checkboxAll']").click - # - # volunteers.each do |volunteer| - # expect(find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}").checked?).to be true - # end + let!(:volunteers) { + [ + create(:volunteer, casa_org: organization), + create(:volunteer, casa_org: organization), + create(:volunteer, casa_org: organization) + ] + } + + before do + sign_in admin + end + + it "selects all volunteers" do + visit volunteers_path + find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}") # Wait for data table to be loaded + find("#checkbox-toggle-all").click + + volunteers.each do |volunteer| + expect(page).to have_field("supervisor_volunteer_volunteer_ids_#{volunteer.id}", checked: true) + end end context "when all are checked" do - xit "deselects all volunteers" do - # visit volunteers_path - # volunteers.each do |volunteer| - # find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}").click - # end - # - # find("[data-select-all-target='checkboxAll']").click - # expect(find("[data-select-all-target='checkboxAll']").checked?).to be false - # - # volunteers.each do |volunteer| - # expect(find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}").checked?).to be false - # end + it "deselects all volunteers" do + visit volunteers_path + volunteers.each do |volunteer| + find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}").click + end + + find("#checkbox-toggle-all").click + expect(page).to have_field("checkbox-toggle-all", checked: false) + + volunteers.each do |volunteer| + expect(page).to have_field("supervisor_volunteer_volunteer_ids_#{volunteer.id}", checked: false) + end end end context "when some are checked" do - xit "is semi-checked (indeterminate)" do - # visit volunteers_path - # find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}").click - # sleep(1) - # - # expect(find("[data-select-all-target='checkboxAll']").checked?).to be false - # expect(find("[data-select-all-target='checkboxAll']")[:indeterminate]).to eq("true") + it "is semi-checked (indeterminate)" do + visit volunteers_path + find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}").click + + expect(page).to have_field("checkbox-toggle-all", checked: false) + expect(find("#checkbox-toggle-all")[:indeterminate]).to eq("true") end - xit "selects all volunteers" do - # visit volunteers_path - # find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}").click - # find("[data-select-all-target='checkboxAll']").click - # - # volunteers.each do |volunteer| - # expect(find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}").checked?).to be true - # end + it "selects all volunteers" do + visit volunteers_path + find("#supervisor_volunteer_volunteer_ids_#{volunteers[0].id}").click + find("#checkbox-toggle-all").click + + volunteers.each do |volunteer| + expect(page).to have_field("supervisor_volunteer_volunteer_ids_#{volunteer.id}", checked: true) + end end end end describe "Select Supervisor Modal Submit button" do - # let!(:volunteer) { create(:volunteer, casa_org: organization) } - # let!(:supervisor) { create(:supervisor, casa_org: organization) } - # - # before do - # sign_in admin - # end + let!(:volunteer) { create(:volunteer, casa_org: organization) } + let!(:supervisor) { create(:supervisor, casa_org: organization) } + + before do + sign_in admin + end - xit "is disabled by default" + pending "is disabled by default" context "when none is selected" do - xit "is enabled" do # TODO: Flaky. Fix this test - # visit volunteers_path - # find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}", wait: 3).click - # find("[data-select-all-target='button']", wait: 3).click - # select "None", from: "supervisor_volunteer_supervisor_id" - # - # button = find("[data-disable-form-target='submitButton']") - # - # expect(button.disabled?).to be false - # expect(button[:class].include?("deactive-btn")).to be false - # expect(button[:class].include?("dark-btn")).to be true - # expect(button[:class].include?("btn-hover")).to be true + it "is enabled" do + visit volunteers_path + find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}").click + find("[data-select-all-target='button']").click + select "None", from: "supervisor_volunteer_supervisor_id" + + expect(page).to have_button("Confirm", disabled: false, class: %w[!deactive-btn dark-btn btn-hover]) end end context "when a supervisor is selected" do - xit "is enabled" do - # visit volunteers_path - # find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}", wait: 3).click - # find("[data-select-all-target='button']", wait: 3).click - # - # select supervisor.display_name, from: "supervisor_volunteer_supervisor_id" - # button = find("[data-disable-form-target='submitButton']") - # expect(button.disabled?).to be false - # expect(button[:class].include?("deactive-btn")).to be false - # expect(button[:class].include?("dark-btn")).to be true - # expect(button[:class].include?("btn-hover")).to be true + it "is enabled" do + visit volunteers_path + find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}").click + find("[data-select-all-target='button']").click + + select supervisor.display_name, from: "supervisor_volunteer_supervisor_id" + + expect(page).to have_button("Confirm", disabled: false, class: %w[!deactive-btn dark-btn btn-hover]) end end context "when Choose a supervisor is selected" do - xit "is disabled" do - # visit volunteers_path - # find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}", wait: 3).click - # find("[data-select-all-target='button']", wait: 3).click - # - # select supervisor.display_name, from: "supervisor_volunteer_supervisor_id" - # select "Choose a supervisor", from: "supervisor_volunteer_supervisor_id" - # button = find("[data-disable-form-target='submitButton']") - # expect(button.disabled?).to be true - # expect(button[:class].include?("deactive-btn")).to be true - # expect(button[:class].include?("dark-btn")).to be false - # expect(button[:class].include?("btn-hover")).to be false + it "is disabled" do + visit volunteers_path + find("#supervisor_volunteer_volunteer_ids_#{volunteer.id}").click + find("[data-select-all-target='button']").click + + select supervisor.display_name, from: "supervisor_volunteer_supervisor_id" + select "Choose a supervisor", from: "supervisor_volunteer_supervisor_id" + + expect(page).to have_button("Confirm", disabled: true, class: %w[deactive-btn !dark-btn !btn-hover]) end end end @@ -356,7 +339,6 @@ context "supervisor user" do let(:supervisor) { create(:supervisor, casa_org: organization) } - let(:input_field) { "div#volunteers_filter input" } it "can filter volunteers", js: true do active_volunteers = create_list(:volunteer, 3, :with_assigned_supervisor, casa_org: organization) @@ -370,8 +352,7 @@ visit volunteers_path expect(page).to have_selector(".volunteer-filters") - - expect(page.all("table#volunteers tbody tr").count).to eq 1 + expect(page).to have_selector("table#volunteers tbody tr", count: 1) click_on "Status" find(:css, 'input[data-value="true"]').set(false) @@ -381,7 +362,7 @@ inactive_volunteers.each do |inactive_volunteer| expect(page).to have_text inactive_volunteer.display_name end - expect(page.all("table#volunteers tbody tr").count).to eq inactive_volunteers.count + expect(page).to have_selector("table#volunteers tbody tr", count: inactive_volunteers.count) end it "can show/hide columns on volunteers table", js: true do @@ -474,12 +455,12 @@ sign_in supervisor visit volunteers_path - page.find(input_field).set("Test") + page.fill_in("Search:", with: "Test") visit supervisors_path visit volunteers_path - input_search = page.find(input_field) - expect(input_search.value).to eq("") + + expect(page).to have_selector("#volunteers_filter input", text: "") end end end