diff --git a/Gemfile.lock b/Gemfile.lock index ac3f3829..139f61d9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -31,7 +31,7 @@ GIT GIT remote: git://github.com/travis-ci/travis-core.git - revision: 6e4fea97354782ea89acc26f1cc291980ee2462c + revision: 0a194c97c857a39c03a5a02eec283e751099d402 specs: travis-core (0.0.1) actionmailer (~> 3.2.12) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 61c34e9e..112316cc 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -196,6 +196,8 @@ class Travis::Api::App end class UserManager < Struct.new(:data, :token, :drop_token) + include User::Renaming + def info(attributes = {}) info = data.to_hash.slice('name', 'login', 'gravatar_id') info.merge! attributes.stringify_keys @@ -207,10 +209,15 @@ class Travis::Api::App user = ::User.find_by_github_id(data['id']) info = drop_token ? info : info(github_oauth_token: token) - if user - user.update_attributes info - else - user = ::User.create! info + ActiveRecord::Base.transaction do + if user + rename_repos_owner(user.login, info['login']) + user.update_attributes info + else + user = ::User.create! info + end + + nullify_logins(user.github_id, user.login) end user diff --git a/spec/unit/endpoint/authorization/user_manager_spec.rb b/spec/unit/endpoint/authorization/user_manager_spec.rb index 5ec2d89d..f8067cd0 100644 --- a/spec/unit/endpoint/authorization/user_manager_spec.rb +++ b/spec/unit/endpoint/authorization/user_manager_spec.rb @@ -31,7 +31,7 @@ describe Travis::Api::App::Endpoint::Authorization::UserManager do context 'with existing user' do it 'updates user data' do - user = mock('user') + user = stub('user', login: 'drogus', github_id: 456) User.expects(:find_by_github_id).with(456).returns(user) attributes = { login: 'drogus', github_id: 456, github_oauth_token: 'abc123' }.stringify_keys user.expects(:update_attributes).with(attributes) @@ -42,7 +42,7 @@ describe Travis::Api::App::Endpoint::Authorization::UserManager do context 'without existing user' do it 'creates new user' do - user = mock('user') + user = stub('user', login: 'drogus', github_id: 456) User.expects(:find_by_github_id).with(456).returns(nil) attributes = { login: 'drogus', github_id: 456, github_oauth_token: 'abc123' }.stringify_keys User.expects(:create!).with(attributes).returns(user)