From 80ef19e1a0b4fc9f0c5520fb5e29bf3eccfc7fd2 Mon Sep 17 00:00:00 2001 From: baarkerlounger Date: Wed, 2 Feb 2022 12:21:27 +0000 Subject: [PATCH] Validate phone number presence --- app/admin/admin_users.rb | 5 +- app/models/admin_user.rb | 2 + db/seeds.rb | 2 +- .../admin/admin_users_controller_spec.rb | 2 +- spec/models/admin_user_spec.rb | 52 +++++++++++++++++++ 5 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 spec/models/admin_user_spec.rb diff --git a/app/admin/admin_users.rb b/app/admin/admin_users.rb index fd15aa33d..e161e0202 100644 --- a/app/admin/admin_users.rb +++ b/app/admin/admin_users.rb @@ -1,5 +1,5 @@ ActiveAdmin.register AdminUser do - permit_params :email, :password, :password_confirmation + permit_params :email, :phone, :password, :password_confirmation controller do def update_resource(object, attributes) @@ -12,6 +12,7 @@ ActiveAdmin.register AdminUser do selectable_column id_column column :email + column "Phone Number", :phone column :current_sign_in_at column :sign_in_count column :created_at @@ -19,6 +20,7 @@ ActiveAdmin.register AdminUser do end filter :email + filter :phone filter :current_sign_in_at filter :sign_in_count filter :created_at @@ -26,6 +28,7 @@ ActiveAdmin.register AdminUser do form do |f| f.inputs do f.input :email + f.input :phone f.input :password f.input :password_confirmation end diff --git a/app/models/admin_user.rb b/app/models/admin_user.rb index 5c4f4b1c1..7fc666a7e 100644 --- a/app/models/admin_user.rb +++ b/app/models/admin_user.rb @@ -6,6 +6,8 @@ class AdminUser < ApplicationRecord has_one_time_password(encrypted: true) + validates :phone, presence: true, numericality: true + MFA_SMS_TEMPLATE_ID = "bf309d93-804e-4f95-b1f4-bd513c48ecb0".freeze def send_two_factor_authentication_code(code) diff --git a/db/seeds.rb b/db/seeds.rb index a59808694..14b5ea456 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -30,4 +30,4 @@ User.create!( role: "data_coordinator", ) -AdminUser.create!(email: "admin@example.com", password: "password") +AdminUser.create!(email: "admin@example.com", password: "password", phone: "000000000") diff --git a/spec/controllers/admin/admin_users_controller_spec.rb b/spec/controllers/admin/admin_users_controller_spec.rb index 17eb7fd6e..e5977d830 100644 --- a/spec/controllers/admin/admin_users_controller_spec.rb +++ b/spec/controllers/admin/admin_users_controller_spec.rb @@ -22,7 +22,7 @@ describe Admin::AdminUsersController, type: :controller do end describe "Create admin users" do - let(:params) { { admin_user: { email: "test2@example.com", password: "pAssword1" } } } + let(:params) { { admin_user: { email: "test2@example.com", password: "pAssword1", phone: "07566126368" } } } it "creates a new admin user" do expect { post :create, session: valid_session, params: params }.to change(AdminUser, :count).by(1) diff --git a/spec/models/admin_user_spec.rb b/spec/models/admin_user_spec.rb new file mode 100644 index 000000000..a112bfb5b --- /dev/null +++ b/spec/models/admin_user_spec.rb @@ -0,0 +1,52 @@ +require "rails_helper" + +RSpec.describe AdminUser, type: :model do + describe "#new" do + it "requires a phone number" do + expect { + described_class.create!( + email: "admin_test@example.com", + password: "password123", + ) + }.to raise_error(ActiveRecord::RecordInvalid) + end + + it "requires a numerical phone number" do + expect { + described_class.create!( + email: "admin_test@example.com", + password: "password123", + phone: "string", + ) + }.to raise_error(ActiveRecord::RecordInvalid) + end + end + + it "requires an email" do + expect { + described_class.create!( + password: "password123", + phone: "075752137", + ) + }.to raise_error(ActiveRecord::RecordInvalid) + end + + it "requires a password" do + expect { + described_class.create!( + email: "admin_test@example.com", + phone: "075752137", + ) + }.to raise_error(ActiveRecord::RecordInvalid) + end + + it "can be created" do + expect { + described_class.create!( + email: "admin_test@example.com", + password: "password123", + phone: "075752137", + ) + }.to change(described_class, :count).by(1) + end +end