require "rails_helper" describe "Admin dashboard actions", :admin do context "when visiting index" do context "and no actions defined" do before do visit admin_dashboard_actions_path end scenario "shows only default actions" do expect(page).to have_content("Polls") expect(page).to have_content("Email") expect(page).to have_content("Poster") expect(page).to have_link "Edit", count: 3 end end context "and actions defined" do let!(:action) { create(:dashboard_action) } before do visit admin_dashboard_actions_path end scenario "shows the action data" do expect(page).to have_content(action.title) end end end context "when creating an action" do let(:action) { build(:dashboard_action) } before do visit admin_dashboard_actions_path click_link "Create resource or action" end scenario "Creates a new action" do fill_in "Title", with: action.title fill_in_ckeditor "Description", with: action.description click_button "Save" expect(page).to have_content(action.title) end scenario "Renders create form in case data is invalid" do click_button "Save" expect(page).to have_content("error prevented this Dashboard/Action from being saved.") end end context "when editing an action" do let!(:action) { create(:dashboard_action) } before do visit admin_dashboard_actions_path within "#dashboard_action_#{action.id}" do click_link "Edit" end end scenario "Updates the action" do expect(page).to have_checked_field "Proposed action" expect(page).to have_unchecked_field "Resource" expect(page).not_to have_field "Short description" expect(page).not_to have_field "Include in the resource a button to " \ "request the resource from administrators" choose "Resource" check "Include in the resource a button to request the resource from administrators" fill_in "Title", with: "Great action!" fill_in "Short description", with: "And awesome too!" click_button "Save" expect(page).to have_content "Great action!" end scenario "Renders edit form in case data is invalid" do fill_in "Title", with: "x" click_button "Save" expect(page).to have_content("error prevented this Dashboard/Action from being saved.") end end context "when destroying an action" do let!(:action) { create(:dashboard_action) } scenario "deletes the action" do visit admin_dashboard_actions_path accept_confirm("Are you sure? This action will delete \"#{action.title}\" and can't be undone.") do click_button "Delete" end expect(page).not_to have_content(action.title) end scenario "cannot delete actions that have been executed" do create(:dashboard_executed_action, action: action) visit admin_dashboard_actions_path accept_confirm("Are you sure? This action will delete \"#{action.title}\" and can't be undone.") do click_button "Delete" end expect(page).to have_content("Cannot delete record because dependent executed actions exist") end end end