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)