From 2bb08d93e4c32dbd62150d2a4d588960b96ae5bd Mon Sep 17 00:00:00 2001 From: David Taylor Date: Wed, 28 Aug 2019 12:44:16 +0100 Subject: [PATCH] FIX: When activating a user, ensure the change is reflected immediately When activating a user via an external provider, this would cause the "this account is not activated" message to show on the first attempt, even though the account had been activated correctly. --- app/models/user.rb | 4 +--- spec/models/user_spec.rb | 6 ++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index b0be74a26be..c1a94949a62 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -903,10 +903,8 @@ class User < ActiveRecord::Base def activate if email_token = self.email_tokens.active.where(email: self.email).first user = EmailToken.confirm(email_token.token, skip_reviewable: true) - self.update!(active: true) if user.nil? - else - self.update!(active: true) end + self.update!(active: true) create_reviewable end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index b06dc815f92..cc50d88b2ea 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1867,6 +1867,12 @@ describe User do expect(inactive.active).to eq(true) end + it 'works without needing to reload the model' do + inactive.activate + expect(inactive.email_confirmed?).to eq(true) + expect(inactive.active).to eq(true) + end + it 'activates user even if email token is already confirmed' do token = inactive.email_tokens.find_by(email: inactive.email) token.update_column(:confirmed, true)