summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/user.rb12
-rw-r--r--test/unit/user_test.rb16
2 files changed, 24 insertions, 4 deletions
diff --git a/app/models/user.rb b/app/models/user.rb
index b377dda67..6e7e94cf6 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -284,14 +284,18 @@ class User < Principal
# Return user's RSS key (a 40 chars long string), used to access feeds
def rss_key
- token = self.rss_token || Token.create(:user => self, :action => 'feeds')
- token.value
+ if rss_token.nil?
+ create_rss_token(:action => 'feeds')
+ end
+ rss_token.value
end
# Return user's API key (a 40 chars long string), used to access the API
def api_key
- token = self.api_token || self.create_api_token(:action => 'api')
- token.value
+ if api_token.nil?
+ create_api_token(:action => 'api')
+ end
+ api_token.value
end
# Return an array of project ids for which the user has explicitly turned mail notifications on
diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb
index 607f23770..a85d56adb 100644
--- a/test/unit/user_test.rb
+++ b/test/unit/user_test.rb
@@ -585,6 +585,22 @@ class UserTest < ActiveSupport::TestCase
assert_equal key, @jsmith.rss_key
end
+ def test_rss_key_should_not_be_generated_twice
+ assert_difference 'Token.count', 1 do
+ key1 = @jsmith.rss_key
+ key2 = @jsmith.rss_key
+ assert_equal key1, key2
+ end
+ end
+
+ def test_api_key_should_not_be_generated_twice
+ assert_difference 'Token.count', 1 do
+ key1 = @jsmith.api_key
+ key2 = @jsmith.api_key
+ assert_equal key1, key2
+ end
+ end
+
context "User#api_key" do
should "generate a new one if the user doesn't have one" do
user = User.generate_with_protected!(:api_token => nil)