From 0c15326df60245bcb1449f46f4c874941c761c2a Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Mon, 7 Oct 2019 15:39:35 +0200 Subject: [PATCH 1/2] User: inactive user have never signed_in --- app/models/administrateur.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/administrateur.rb b/app/models/administrateur.rb index c0a32352e..250953cdd 100644 --- a/app/models/administrateur.rb +++ b/app/models/administrateur.rb @@ -13,7 +13,7 @@ class Administrateur < ApplicationRecord before_validation -> { sanitize_email(:email) } - scope :inactive, -> { where(active: false) } + scope :inactive, -> { joins(:user).where(users: { last_sign_in_at: nil }) } scope :with_publiees_ou_archivees, -> { joins(:procedures).where(procedures: { aasm_state: [:publiee, :archivee] }) } # validate :password_complexity, if: Proc.new { |a| Devise.password_length.include?(a.password.try(:size)) } From 725798da6afb0dfb60196bac6b0033419c38135f Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Mon, 7 Oct 2019 15:41:16 +0200 Subject: [PATCH 2/2] [fix #4361] Update user table sign_in --- ...07124230_update_admin_last_sign_in_at.rake | 17 ++++++++++++ ..._update_admin_last_sign_in_at.rake_spec.rb | 27 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 lib/tasks/deployment/20191007124230_update_admin_last_sign_in_at.rake create mode 100644 spec/lib/tasks/deployment/20191007124230_update_admin_last_sign_in_at.rake_spec.rb diff --git a/lib/tasks/deployment/20191007124230_update_admin_last_sign_in_at.rake b/lib/tasks/deployment/20191007124230_update_admin_last_sign_in_at.rake new file mode 100644 index 000000000..45218712a --- /dev/null +++ b/lib/tasks/deployment/20191007124230_update_admin_last_sign_in_at.rake @@ -0,0 +1,17 @@ +namespace :after_party do + desc 'Deployment task: update_admin_last_sign_in_at' + task update_admin_last_sign_in_at: :environment do + sql = <<-SQL + UPDATE users + SET last_sign_in_at = administrateurs.updated_at + FROM administrateurs + WHERE administrateur_id = administrateurs.id + AND users.last_sign_in_at IS NULL + AND administrateurs.active = true + SQL + + ActiveRecord::Base.connection.execute(sql) + + AfterParty::TaskRecord.create version: '20191007124230' + end +end diff --git a/spec/lib/tasks/deployment/20191007124230_update_admin_last_sign_in_at.rake_spec.rb b/spec/lib/tasks/deployment/20191007124230_update_admin_last_sign_in_at.rake_spec.rb new file mode 100644 index 000000000..a671a535e --- /dev/null +++ b/spec/lib/tasks/deployment/20191007124230_update_admin_last_sign_in_at.rake_spec.rb @@ -0,0 +1,27 @@ +describe '20191007124230_update_admin_last_sign_in_at.rake' do + let(:rake_task) { Rake::Task['after_party:update_admin_last_sign_in_at'] } + + subject { rake_task.invoke } + after { rake_task.reenable } + + context 'with 2 administrateurs' do + let!(:admin) { create(:administrateur, active: true) } + let(:user) { admin.user } + let!(:admin2) { create(:administrateur, active: false) } + let(:user2) { admin2.user } + + before do + end + + it do + expect(admin.active).to be true + expect(user.last_sign_in_at).to be_nil + expect(admin.updated_at).not_to be_nil + + subject + + expect(user.reload.last_sign_in_at).to eq(admin.reload.updated_at) + expect(user2.reload.last_sign_in_at).to be_nil + end + end +end