# frozen_string_literal: true require "rspec" RSpec.describe EditDirectoryColumnsController do fab!(:admin) fab!(:user) describe "#update" do let(:first_directory_column_id) { DirectoryColumn.first.id } let(:second_directory_column_id) { DirectoryColumn.second.id } let!(:payload) do { directory_columns: { "0": { id: first_directory_column_id, enabled: "false", position: "2", }, "1": { id: second_directory_column_id, enabled: "true", position: "1", }, }, format: "json", } end describe "#update" do describe "when user is an admin or moderator" do before { sign_in(admin) } describe "user saves a new configuration" do it "logs the new information using StaffActionLogger" do expect { put edit_directory_columns_path(params: payload) }.to change { DirectoryColumn.find(first_directory_column_id).enabled }.from(true).to(false) staff_log = UserHistory.last expect(staff_log.custom_type).to eq("update_directory_columns") end it "does not let all columns be disabled" do sign_in(admin) bad_params = payload bad_params[:directory_columns][:"1"][:enabled] = "false" put edit_directory_columns_path(params: bad_params) expect(response.status).to eq(400) end end end end describe "when user is not an admin or moderator" do before { sign_in(user) } describe "user saves a new configuration" do it "does not allow saving" do put edit_directory_columns_path(params: payload) expect(response.status).to eq(403) end end end end describe "#index" do fab!(:public_user_field) { Fabricate(:user_field, show_on_profile: true) } fab!(:private_user_field) do Fabricate(:user_field, show_on_profile: false, show_on_user_card: false) end it "creates directory column records for public user fields" do sign_in(admin) expect { get "/edit-directory-columns.json" }.to change { DirectoryColumn.count }.by(1) end it "returns a 403 when not logged in as staff member" do sign_in(user) get "/edit-directory-columns.json" expect(response.status).to eq(403) end end end