summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzegorz.bizon@ntsn.pl>2015-12-11 13:37:54 +0000
committerGrzegorz Bizon <grzegorz.bizon@ntsn.pl>2015-12-11 14:39:51 +0100
commit917effb7379f8e871dbc113d7c7dab89473d4bc8 (patch)
treebbb2f322bb44fe524d02c846d3b17f34f3c983a2
parent28ad40d9740076677420612443358c2976fe0916 (diff)
downloadgitlab-ce-917effb7379f8e871dbc113d7c7dab89473d4bc8.tar.gz
Make sure that token `ensure_*` method always returns a token
-rw-r--r--app/models/concerns/token_authenticatable.rb8
-rw-r--r--spec/models/concerns/token_authenticatable_spec.rb9
2 files changed, 14 insertions, 3 deletions
diff --git a/app/models/concerns/token_authenticatable.rb b/app/models/concerns/token_authenticatable.rb
index fe764e8da41..56d38fe8250 100644
--- a/app/models/concerns/token_authenticatable.rb
+++ b/app/models/concerns/token_authenticatable.rb
@@ -17,8 +17,12 @@ module TokenAuthenticatable
end
define_method("ensure_#{token_field}") do
- write_attribute(token_field, generate_token_for(token_field)) if
- read_attribute(token_field).blank?
+ current_token = read_attribute(token_field)
+ if current_token.blank?
+ write_attribute(token_field, generate_token_for(token_field))
+ else
+ current_token
+ end
end
define_method("reset_#{token_field}!") do
diff --git a/spec/models/concerns/token_authenticatable_spec.rb b/spec/models/concerns/token_authenticatable_spec.rb
index 1b553173415..a9b0b64e5de 100644
--- a/spec/models/concerns/token_authenticatable_spec.rb
+++ b/spec/models/concerns/token_authenticatable_spec.rb
@@ -13,7 +13,7 @@ describe User, 'TokenAuthenticatable' do
let(:token_field) { :authentication_token }
it_behaves_like 'TokenAuthenticatable'
- describe 'ensured authentication token' do
+ describe 'ensures authentication token' do
subject { create(:user).send(token_field) }
it { is_expected.to be_a String }
end
@@ -29,6 +29,13 @@ describe ApplicationSetting, 'TokenAuthenticatable' do
context 'token is not generated yet' do
it { expect(token).to be nil }
+
+ describe 'ensured token' do
+ subject { described_class.new.send("ensure_#{token_field}") }
+
+ it { is_expected.to be_a String }
+ it { is_expected.to_not be_blank }
+ end
end
context 'token is generated' do