From 9b07efa5e9f3e957e6321758cf5b3f8c0b110e0b Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Thu, 28 Aug 2014 17:18:07 +0200 Subject: [PATCH 1/4] Check for user education status on signin/signup --- Gemfile | 2 +- Gemfile.lock | 3 +- lib/travis/api/app/endpoint/authorization.rb | 5 +++ .../authorization/user_manager_spec.rb | 32 ++++++++++++++----- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/Gemfile b/Gemfile index 49579f5c..1fa1b345 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ ruby '2.1.2' source 'https://rubygems.org' gemspec -gem 'travis-core', github: 'travis-ci/travis-core' +gem 'travis-core', github: 'travis-ci/travis-core', branch: 'ps-education-sync' gem 'travis-support', github: 'travis-ci/travis-support' gem 'travis-sidekiqs', github: 'travis-ci/travis-sidekiqs', require: nil, ref: 'cde9741' gem 'travis-yaml', github: 'travis-ci/travis-yaml' diff --git a/Gemfile.lock b/Gemfile.lock index 1aa2a7c2..97eaff2b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -37,7 +37,8 @@ GIT GIT remote: git://github.com/travis-ci/travis-core.git - revision: 0c4922f7cbf644ccc97677643bb09f26a919e64c + revision: 8f2b4add4581f2897ce14edca26aff99cc60f280 + branch: ps-education-sync specs: travis-core (0.0.1) actionmailer (~> 3.2.19) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 94b3f9ad..24fddbcd 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -216,6 +216,7 @@ class Travis::Api::App def info(attributes = {}) info = data.to_hash.slice('name', 'login', 'gravatar_id') info.merge! attributes.stringify_keys + info['education'] = education info['github_id'] ||= data['id'] info end @@ -224,6 +225,10 @@ class Travis::Api::App user end + def education + Travis::Github::Education.new(token.to_s).student? + end + def fetch retried ||= false info = drop_token ? self.info : self.info(github_oauth_token: token) diff --git a/spec/unit/endpoint/authorization/user_manager_spec.rb b/spec/unit/endpoint/authorization/user_manager_spec.rb index 914cca27..5e48ec0b 100644 --- a/spec/unit/endpoint/authorization/user_manager_spec.rb +++ b/spec/unit/endpoint/authorization/user_manager_spec.rb @@ -10,32 +10,35 @@ describe Travis::Api::App::Endpoint::Authorization::UserManager do }.stringify_keys } + before { manager.stubs(:education).returns(false) } + it 'gets data from github payload' do manager.info.should == { - name: 'Piotr Sarnacki', login: 'drogus', gravatar_id: '123', github_id: 456 + name: 'Piotr Sarnacki', login: 'drogus', gravatar_id: '123', github_id: 456, education: false }.stringify_keys end it 'allows to overwrite existing keys' do manager.info({login: 'piotr.sarnacki', bar: 'baz'}.stringify_keys).should == { name: 'Piotr Sarnacki', login: 'piotr.sarnacki', gravatar_id: '123', - github_id: 456, bar: 'baz' + github_id: 456, bar: 'baz', education: false }.stringify_keys end end describe '#fetch' do - let(:data) { - { login: 'drogus', id: 456 }.stringify_keys - } + let(:data) { + { login: 'drogus', id: 456 }.stringify_keys + } it 'drops the token when drop_token is set to true' do user = stub('user', login: 'drogus', github_id: 456) User.expects(:find_by_github_id).with(456).returns(user) manager = described_class.new(data, 'abc123', true) + manager.stubs(:education).returns(false) - attributes = { login: 'drogus', github_id: 456 }.stringify_keys + attributes = { login: 'drogus', github_id: 456, education: false }.stringify_keys user.expects(:update_attributes).with(attributes) @@ -46,8 +49,9 @@ describe Travis::Api::App::Endpoint::Authorization::UserManager do it 'updates user data' do 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 + attributes = { login: 'drogus', github_id: 456, github_oauth_token: 'abc123', education: false }.stringify_keys user.expects(:update_attributes).with(attributes) + manager.stubs(:education).returns(false) manager.fetch.should == user end @@ -57,11 +61,23 @@ describe Travis::Api::App::Endpoint::Authorization::UserManager do it 'creates new user' do 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 + attributes = { login: 'drogus', github_id: 456, github_oauth_token: 'abc123', education: false }.stringify_keys User.expects(:create!).with(attributes).returns(user) + manager.stubs(:education).returns(false) manager.fetch.should == user end end end + + describe '#education' do + let(:data) { {} } + it 'runs students check with token' do + education = stub(:education) + education.expects(:student?).returns(true) + Travis::Github::Education.expects(:new).with('abc123').returns(education) + + manager.education.should be_truthy + end + end end From f91c54725e563b7f82c77e617efa354449ac150e Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Tue, 2 Sep 2014 10:44:31 +0200 Subject: [PATCH 2/4] Add a feature flip for education field update --- lib/travis/api/app/endpoint/authorization.rb | 5 ++++- spec/unit/endpoint/authorization/user_manager_spec.rb | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 24fddbcd..5733959d 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -216,7 +216,10 @@ class Travis::Api::App def info(attributes = {}) info = data.to_hash.slice('name', 'login', 'gravatar_id') info.merge! attributes.stringify_keys - info['education'] = education + if Travis::Features.feature_active?(:education_data_sync) || + (user && Travis::Features.owner_active?(:education_data_sync, user)) + info['education'] = education + end info['github_id'] ||= data['id'] info end diff --git a/spec/unit/endpoint/authorization/user_manager_spec.rb b/spec/unit/endpoint/authorization/user_manager_spec.rb index 5e48ec0b..4b5b5c04 100644 --- a/spec/unit/endpoint/authorization/user_manager_spec.rb +++ b/spec/unit/endpoint/authorization/user_manager_spec.rb @@ -3,6 +3,10 @@ require 'spec_helper' describe Travis::Api::App::Endpoint::Authorization::UserManager do let(:manager) { described_class.new(data, 'abc123') } + before do + Travis::Features.enable_for_all(:education_data_sync) + end + describe '#info' do let(:data) { { From ea73404eb309608a602eacbdfc095b962d7da0b9 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Tue, 2 Sep 2014 10:44:52 +0200 Subject: [PATCH 3/4] Bump travis-core --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 97eaff2b..bb8afdf8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -37,7 +37,7 @@ GIT GIT remote: git://github.com/travis-ci/travis-core.git - revision: 8f2b4add4581f2897ce14edca26aff99cc60f280 + revision: 2115edc5994422748071c73561514703fe708e0c branch: ps-education-sync specs: travis-core (0.0.1) From eab57dfb8f42e91c77a5a966abb785c50dd4d371 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Tue, 2 Sep 2014 11:47:58 +0200 Subject: [PATCH 4/4] Use travis-core from master --- Gemfile | 2 +- Gemfile.lock | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 1fa1b345..49579f5c 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ ruby '2.1.2' source 'https://rubygems.org' gemspec -gem 'travis-core', github: 'travis-ci/travis-core', branch: 'ps-education-sync' +gem 'travis-core', github: 'travis-ci/travis-core' gem 'travis-support', github: 'travis-ci/travis-support' gem 'travis-sidekiqs', github: 'travis-ci/travis-sidekiqs', require: nil, ref: 'cde9741' gem 'travis-yaml', github: 'travis-ci/travis-yaml' diff --git a/Gemfile.lock b/Gemfile.lock index bb8afdf8..a9b9c803 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -37,8 +37,7 @@ GIT GIT remote: git://github.com/travis-ci/travis-core.git - revision: 2115edc5994422748071c73561514703fe708e0c - branch: ps-education-sync + revision: c33c0d40306e2493d4b65ca00be6731a4e614bed specs: travis-core (0.0.1) actionmailer (~> 3.2.19)