diff --git a/lib/travis/api/app/endpoint/assembla.rb b/lib/travis/api/app/endpoint/assembla.rb index 8601332c4..d42f6e725 100644 --- a/lib/travis/api/app/endpoint/assembla.rb +++ b/lib/travis/api/app/endpoint/assembla.rb @@ -12,7 +12,7 @@ class Endpoint class Assembla < Endpoint include Travis::Api::App::JWTUtils - REQUIRED_JWT_FIELDS = %w[name email login space_id id refresh_token].freeze + REQUIRED_JWT_FIELDS = %w[name email login space_id repository_id id refresh_token].freeze CLUSTER_HEADER = 'HTTP_X_ASSEMBLA_CLUSTER'.freeze set prefix: '/assembla' diff --git a/lib/travis/remote_vcs/user.rb b/lib/travis/remote_vcs/user.rb index f95b6e0eb..88abd095d 100644 --- a/lib/travis/remote_vcs/user.rb +++ b/lib/travis/remote_vcs/user.rb @@ -35,9 +35,11 @@ def generate_token(provider: :github, token:, app_id: 1) end end - def sync(user_id:) + def sync(user_id:, space_id: nil, repository_id: nil) request(:post, __method__) do |req| req.url "users/#{user_id}/sync_data" + req.params['space_id'] = space_id if space_id + req.params['repository_id'] = repository_id if repository_id end && true end diff --git a/lib/travis/services/assembla_user_service.rb b/lib/travis/services/assembla_user_service.rb index 884f33bb3..c2de21b8e 100644 --- a/lib/travis/services/assembla_user_service.rb +++ b/lib/travis/services/assembla_user_service.rb @@ -38,7 +38,7 @@ def create_org_subscription(user, organization_id) private def sync_user(user_id) - Travis::RemoteVCS::User.new.sync(user_id: user_id) + Travis::RemoteVCS::User.new.sync(user_id: user_id, space_id: @payload['space_id'], repository_id: @payload['repository_id']) rescue => e raise SyncError, "Failed to sync user: #{e.message}" end diff --git a/spec/travis/remote_vcs/user_spec.rb b/spec/travis/remote_vcs/user_spec.rb index 9c3c5f523..613719a7b 100644 --- a/spec/travis/remote_vcs/user_spec.rb +++ b/spec/travis/remote_vcs/user_spec.rb @@ -49,6 +49,32 @@ end end + describe '#sync' do + let(:user_id) { 123 } + let(:space_id) { 456 } + let(:repository_id) { 789 } + let(:instance) { described_class.new } + let(:req) { double(:request) } + let(:params) { double(:params) } + + subject { instance.sync(user_id: user_id, space_id: space_id, repository_id: repository_id) } + + before do + allow(req).to receive(:url) + allow(req).to receive(:params).and_return(params) + allow(params).to receive(:[]=) + end + + it 'performs POST to VCS with proper params' do + expect(instance).to receive(:request).with(:post, :sync).and_yield(req) + expect(req).to receive(:url).with("users/#{user_id}/sync_data") + expect(params).to receive(:[]=).with('space_id', space_id) + expect(params).to receive(:[]=).with('repository_id', repository_id) + + expect(subject).to be true + end + end + describe '#authenticate' do let(:user) { described_class.new } let(:provider) { 'assembla' } diff --git a/spec/unit/endpoint/assembla_spec.rb b/spec/unit/endpoint/assembla_spec.rb index b0fa48704..7ec4575f6 100644 --- a/spec/unit/endpoint/assembla_spec.rb +++ b/spec/unit/endpoint/assembla_spec.rb @@ -14,6 +14,7 @@ 'space_id' => 'space123', 'id' => 'assembla_vcs_user_id', 'access_token' => 'test_access_token', + 'repository_id' => 'repository123', 'refresh_token' => 'test_refresh_token' } end