diff --git a/app/dashboards/user_dashboard.rb b/app/dashboards/user_dashboard.rb index 753b617ef..b499193cc 100644 --- a/app/dashboards/user_dashboard.rb +++ b/app/dashboards/user_dashboard.rb @@ -25,7 +25,7 @@ class UserDashboard < Administrate::BaseDashboard current_sign_in_ip: Field::String, last_sign_in_ip: Field::String, confirmation_token: Field::String, - confirmed_at: Field::DateTime, + confirmed_at: ConfirmedAtField, confirmation_sent_at: Field::DateTime, unconfirmed_email: Field::String, name: Field::String.with_options(searchable: true), diff --git a/app/fields/confirmed_at_field.rb b/app/fields/confirmed_at_field.rb new file mode 100644 index 000000000..67e04c4a0 --- /dev/null +++ b/app/fields/confirmed_at_field.rb @@ -0,0 +1,4 @@ +require 'administrate/field/base' + +class ConfirmedAtField < Administrate::Field::DateTime +end diff --git a/app/views/fields/confirmed_at_field/_form.html.erb b/app/views/fields/confirmed_at_field/_form.html.erb new file mode 100644 index 000000000..9d4c3029c --- /dev/null +++ b/app/views/fields/confirmed_at_field/_form.html.erb @@ -0,0 +1,8 @@ +
+ <%= f.label field.attribute %> +
+
+ <% value = field.data %> + <% value = Time.current if value.blank? && action_name == 'new' %> + <%= f.datetime_local_field field.attribute, step: 1, value: value %> +
diff --git a/spec/controllers/super_admin/users_controller_spec.rb b/spec/controllers/super_admin/users_controller_spec.rb index e1461f554..724e4fa91 100644 --- a/spec/controllers/super_admin/users_controller_spec.rb +++ b/spec/controllers/super_admin/users_controller_spec.rb @@ -23,6 +23,25 @@ RSpec.describe 'Super Admin Users API', type: :request do type: 'SuperAdmin' } } end + let!(:params_without_confirmed_at) do + { user: { + name: 'agent@example.com', + display_name: 'agent@example.com', + email: 'agent@example.com', + password: 'Password1!', + type: 'SuperAdmin' + } } + end + let!(:params_with_blank_confirmed_at) do + { user: { + name: 'agent-2@example.com', + display_name: 'agent-2@example.com', + email: 'agent-2@example.com', + password: 'Password1!', + confirmed_at: '', + type: 'SuperAdmin' + } } + end it 'shows the list of users' do sign_in(super_admin, scope: :super_admin) @@ -36,6 +55,16 @@ RSpec.describe 'Super Admin Users API', type: :request do expect(header_texts).not_to include('MFA') end + it 'prefills confirmed_at on new user form' do + sign_in(super_admin, scope: :super_admin) + get '/super_admin/users/new' + + expect(response).to have_http_status(:success) + expect(response.body).to include('name="user[confirmed_at]"') + confirmed_at_value = response.body[/name="user\[confirmed_at\]".*?value="([^"]+)"/m, 1] + expect(confirmed_at_value).to be_present + end + it 'creates the new super_admin record' do sign_in(super_admin, scope: :super_admin) @@ -47,6 +76,24 @@ RSpec.describe 'Super Admin Users API', type: :request do post '/super_admin/users', params: params expect(response).to redirect_to('http://www.example.com/super_admin/users/new') end + + it 'creates unconfirmed users when confirmed_at is not provided in payload' do + sign_in(super_admin, scope: :super_admin) + + post '/super_admin/users', params: params_without_confirmed_at + + expect(response).to redirect_to("http://www.example.com/super_admin/users/#{User.last.id}") + expect(User.last).not_to be_confirmed + end + + it 'creates unconfirmed users when confirmed_at is explicitly cleared' do + sign_in(super_admin, scope: :super_admin) + + post '/super_admin/users', params: params_with_blank_confirmed_at + + expect(response).to redirect_to("http://www.example.com/super_admin/users/#{User.last.id}") + expect(User.last).not_to be_confirmed + end end end