File tree Expand file tree Collapse file tree 6 files changed +39
-2
lines changed
spec/lib/travis/api/enqueue/services Expand file tree Collapse file tree 6 files changed +39
-2
lines changed Original file line number Diff line number Diff line change @@ -45,8 +45,8 @@ def billing?
4545 @cause_of_denial = e . message
4646 false
4747 rescue Travis ::API ::V3 ::NotFound
48- # Owner is on a legacy plan
49- if subscription &. active?
48+ if subscription &. active? || owner_group_subscription?
49+ # Owner is on a legacy plan or belongs to a group
5050 true
5151 else
5252 @cause_of_denial = 'You do not seem to have active subscription.'
@@ -86,6 +86,18 @@ def subscription
8686 Subscription . where ( owner : repository . owner ) &.first
8787 end
8888
89+ def owner_group
90+ repository &.owner &.owner_group
91+ end
92+
93+ def owner_group_subscription?
94+ return false if owner_group . blank?
95+
96+ group_owners = OwnerGroup . where ( uuid : owner_group . uuid ) . map ( &:owner )
97+ active_subscriptions = Subscription . where ( owner : group_owners ) . select ( &:active? )
98+ active_subscriptions . present?
99+ end
100+
89101 def permission?
90102 current_user && current_user . permission? ( required_role , repository_id : target . repository_id ) && !abusive? && build_permission?
91103 end
Original file line number Diff line number Diff line change @@ -18,6 +18,7 @@ class Model < ActiveRecord::Base
1818 require 'travis/model/job'
1919 require 'travis/model/membership'
2020 require 'travis/model/organization'
21+ require 'travis/model/owner_group'
2122 require 'travis/model/permission'
2223 require 'travis/model/pull_request'
2324 require 'travis/model/repository'
Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ class Organization < Travis::Model
55 has_many :memberships
66 has_many :users , :through => :memberships
77 has_many :repositories , :as => :owner
8+ has_one :owner_group , as : :owner
89
910 def education?
1011 Travis ::Features . owner_active? ( :educational_org , self )
Original file line number Diff line number Diff line change 1+ require 'gh'
2+ require 'travis/model'
3+
4+ class OwnerGroup < Travis ::Model
5+ belongs_to :owner , polymorphic : true
6+ end
Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ class User < Travis::Model
1212 has_many :permissions , dependent : :destroy
1313 has_many :repositories , through : :permissions
1414 has_many :emails , dependent : :destroy
15+ has_one :owner_group , as : :owner
1516
1617 before_create :set_as_recent
1718 after_create :create_a_token
Original file line number Diff line number Diff line change 118118 include_examples 'does not restart the job'
119119 end
120120
121+ context 'when customer belongs to a group' do
122+ let ( :uuid ) { SecureRandom . uuid }
123+ let! ( :travis ) { FactoryBot . create ( :org , login : 'travis' ) }
124+ let! ( :john ) { FactoryBot . create ( :user , login : 'john' ) }
125+ let! ( :doe ) { FactoryBot . create ( :user , login : 'doe' ) }
126+ before do
127+ repository . permissions . create ( user : user , build : true )
128+ FactoryBot . create ( :valid_stripe_subs , owner : john )
129+ OwnerGroup . create ( uuid : uuid , owner : owner )
130+ OwnerGroup . create ( uuid : uuid , owner : john )
131+ OwnerGroup . create ( uuid : uuid , owner : doe )
132+ end
133+
134+ include_examples 'restarts the job'
135+ end
136+
121137 end
122138 end
123139end
You can’t perform that action at this time.
0 commit comments