diff --git a/app/controllers/admin/profile_fields_controller.rb b/app/controllers/admin/profile_fields_controller.rb index 218d9e6f4..977079348 100644 --- a/app/controllers/admin/profile_fields_controller.rb +++ b/app/controllers/admin/profile_fields_controller.rb @@ -1,5 +1,8 @@ module Admin class ProfileFieldsController < Admin::ApplicationController + ALLOWED_PARAMS = %i[ + input_type label active placeholder_text description + ].freeze layout "admin" def index @@ -7,26 +10,41 @@ module Admin end def update - @profile_fields = ProfileField.find(params[:id]) - @profile_fields.update!(profile_field_params) + profile_field = ProfileField.find(params[:id]) + if profile_field.update(profile_field_params) + flash[:success] = "Profile field #{profile_field.label} updated" + else + flash[:error] = "Error: #{profile_field.errors_as_sentence}" + end redirect_to admin_profile_fields_path end def create - @profile_field = ProfileField.create(profile_field_params) + profile_field = ProfileField.new(profile_field_params) + if profile_field.save + flash[:success] = "Profile field #{profile_field.label} created" + else + flash[:error] = "Error: #{profile_field.errors_as_sentence}" + end redirect_to admin_profile_fields_path end def destroy - @profile_field = ProfileField.find(params[:id]) - @profile_field.destroy + profile_field = ProfileField.find(params[:id]) + if profile_field.destroy + flash[:success] = "Profile field #{profile_field.label} deleted" + else + flash[:error] = "Error: #{profile_field.errors_as_sentence}" + end redirect_to admin_profile_fields_path end private + private_constant :ALLOWED_PARAMS + def profile_field_params - allowed_params = %i[input_type label active placeholder_text description] + allowed_params = ALLOWED_PARAMS params.require(:profile_field).permit(allowed_params) end end diff --git a/app/models/profile_field.rb b/app/models/profile_field.rb index c09e9e8fc..d53fe9e6f 100644 --- a/app/models/profile_field.rb +++ b/app/models/profile_field.rb @@ -1,13 +1,11 @@ class ProfileField < ApplicationRecord # Key names follow the Rails form helpers - INPUT_TYPES = { + enum input_type: { text_field: 0, text_area: 1, check_box: 2, color_field: 3 - }.freeze - - enum input_type: INPUT_TYPES + } validates :label, presence: true, uniqueness: { case_sensitive: false } validates :active, inclusion: { in: [true, false] } diff --git a/app/views/admin/profile_fields/_form.html.erb b/app/views/admin/profile_fields/_form.html.erb index b7b46d041..4e6577bdb 100644 --- a/app/views/admin/profile_fields/_form.html.erb +++ b/app/views/admin/profile_fields/_form.html.erb @@ -12,7 +12,7 @@
<%= form.label :input_type %> - <%= form.select :input_type, ProfileField::INPUT_TYPES.keys, class: "form-control" %> + <%= form.select :input_type, ProfileField.input_types.keys, class: "form-control" %>
<%= form.label :active %> diff --git a/app/views/admin/profile_fields/index.html.erb b/app/views/admin/profile_fields/index.html.erb index a1bc13b69..eddb14ba1 100644 --- a/app/views/admin/profile_fields/index.html.erb +++ b/app/views/admin/profile_fields/index.html.erb @@ -1,9 +1,9 @@
<%= form_for [:admin, ProfileField.new], html: { class: "inline-form" } do |form| %>
- <%= render "form", form: form %> - <%= form.submit class: "btn btn-primary" %> -
+ <%= render "form", form: form %> + <%= form.submit class: "btn btn-primary" %> +
<% end %>
diff --git a/config/blazer.yml b/config/blazer.yml index bbcce499b..017f76a58 100644 --- a/config/blazer.yml +++ b/config/blazer.yml @@ -31,6 +31,7 @@ data_sources: smart_columns: status: {0: "enqueued", 1: "working", 2: "succeeded", 3: "failed"} + input_types: {0: "text_field", 1: "text_area", 2: "check_box", 3: "color_field"} # create audits audit: true diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 3d1de2a5b..9bf304707 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -67,7 +67,6 @@ RSpec.configure do |config| config.include ApplicationHelper config.include ActionMailer::TestHelper - config.include ActiveJob::TestHelper config.include Devise::Test::ControllerHelpers, type: :view config.include Devise::Test::IntegrationHelpers, type: :system config.include Devise::Test::IntegrationHelpers, type: :request diff --git a/spec/requests/admin/chat_channel_spec.rb b/spec/requests/admin/chat_channel_spec.rb index 9b08b90d2..00bd65200 100644 --- a/spec/requests/admin/chat_channel_spec.rb +++ b/spec/requests/admin/chat_channel_spec.rb @@ -1,7 +1,6 @@ require "rails_helper" RSpec.describe "/admin/chat_channels", type: :request do - include ActiveJob::TestHelper let(:user) { create(:user) } let(:chat_channel) { create(:chat_channel) } diff --git a/spec/requests/admin/profile_fields_spec.rb b/spec/requests/admin/profile_fields_spec.rb index af5aec1b2..7ba13c630 100644 --- a/spec/requests/admin/profile_fields_spec.rb +++ b/spec/requests/admin/profile_fields_spec.rb @@ -1,16 +1,13 @@ require "rails_helper" RSpec.describe "/admin/profile_fields", type: :request do - include ActiveJob::TestHelper - let(:user) { create(:user) } + let(:admin) { create(:user, :super_admin) } - before do - user.add_role(:super_admin) - sign_in user - end + before do + sign_in admin + end describe "GET /admin/profile_fields" do - let(:profile_field) { create(:profile_field) } it "renders successfully" do get admin_profile_fields_path @@ -18,7 +15,7 @@ RSpec.describe "/admin/profile_fields", type: :request do end it "lists the profile fields" do - profile_field + profile_field = create(:profile_field) get admin_profile_fields_path expect(response.body).to include( profile_field.label,