@@ -30,7 +30,6 @@ vi.mock('@sim/db', () => {
3030 set : ( ) => updateBuilder ,
3131 where : ( ) => updateBuilder ,
3232 returning : ( ) => Promise . resolve ( mockClaim ( ) ) ,
33- // Awaited directly by the re-arm path (no `.returning()`).
3433 then : ( f : ( v : unknown ) => unknown , r ?: ( e : unknown ) => unknown ) =>
3534 Promise . resolve ( undefined ) . then ( f , r ) ,
3635 }
@@ -40,7 +39,6 @@ vi.mock('@sim/db', () => {
4039 innerJoin : ( ) => selectBuilder ,
4140 leftJoin : ( ) => selectBuilder ,
4241 limit : ( ) => Promise . resolve ( mockSelectRows ( ) ) ,
43- // Awaited directly by the org-admins query (no `.limit()`).
4442 then : ( f : ( v : unknown ) => unknown , r ?: ( e : unknown ) => unknown ) =>
4543 Promise . resolve ( mockSelectRows ( ) ) . then ( f , r ) ,
4644 }
@@ -81,8 +79,8 @@ describe('maybeSendLimitThresholdEmail', () => {
8179 beforeEach ( ( ) => {
8280 vi . clearAllMocks ( )
8381 billingFlag . enabled = true
84- mockClaim . mockReturnValue ( [ { id : 'u1' } ] ) // claim wins by default
85- mockSelectRows . mockReturnValue ( [ ] ) // no settings row / no admins by default
82+ mockClaim . mockReturnValue ( [ { id : 'u1' } ] )
83+ mockSelectRows . mockReturnValue ( [ ] )
8684 getEmailPreferencesMock . mockResolvedValue ( null )
8785 } )
8886
@@ -100,8 +98,6 @@ describe('maybeSendLimitThresholdEmail', () => {
10098 } )
10199
102100 it ( 'never sends in rearmOnly mode, even when usage is above a threshold' , async ( ) => {
103- // A storage shrink that still leaves usage at 90% must only re-arm, not send,
104- // even if the stored threshold is 0 (claim would otherwise win).
105101 await maybeSendLimitThresholdEmail ( {
106102 ...baseUserParams ,
107103 currentUsage : 4.5 ,
@@ -113,14 +109,12 @@ describe('maybeSendLimitThresholdEmail', () => {
113109 } )
114110
115111 it ( 'does not send when the atomic claim is lost (already notified)' , async ( ) => {
116- mockClaim . mockReturnValue ( [ ] ) // someone else already advanced the threshold
112+ mockClaim . mockReturnValue ( [ ] )
117113 await maybeSendLimitThresholdEmail ( { ...baseUserParams , currentUsage : 4.5 , limit : 5 } )
118114 expect ( sendEmailSpy ) . not . toHaveBeenCalled ( )
119115 } )
120116
121117 it ( 'claims without re-arming on a crossing (re-arm and claim are mutually exclusive)' , async ( ) => {
122- // 90% crossing: a single claim update, no re-arm — so there is no re-arm/claim
123- // interleaving for a concurrent caller to exploit into a duplicate email.
124118 await maybeSendLimitThresholdEmail ( { ...baseUserParams , currentUsage : 4.5 , limit : 5 } )
125119 expect ( dbUpdateSpy ) . toHaveBeenCalledTimes ( 1 )
126120 expect ( mockClaim ) . toHaveBeenCalledTimes ( 1 )
@@ -143,8 +137,6 @@ describe('maybeSendLimitThresholdEmail', () => {
143137 mockSelectRows . mockReturnValue ( [ { enabled : false } ] )
144138 await maybeSendLimitThresholdEmail ( { ...baseUserParams , currentUsage : 4.5 , limit : 5 } )
145139 expect ( sendEmailSpy ) . not . toHaveBeenCalled ( )
146- // Recipient resolution gates the claim, so the threshold isn't advanced —
147- // re-enabling notifications later still lets the email fire.
148140 expect ( mockClaim ) . not . toHaveBeenCalled ( )
149141 } )
150142
@@ -164,7 +156,7 @@ describe('maybeSendLimitThresholdEmail', () => {
164156
165157 it ( 're-arms but does not send when usage is fully cleared (zero usage)' , async ( ) => {
166158 await maybeSendLimitThresholdEmail ( { ...baseUserParams , currentUsage : 0 , limit : 5 } )
167- expect ( dbUpdateSpy ) . toHaveBeenCalledTimes ( 1 ) // re-arm only
159+ expect ( dbUpdateSpy ) . toHaveBeenCalledTimes ( 1 )
168160 expect ( mockClaim ) . not . toHaveBeenCalled ( )
169161 expect ( sendEmailSpy ) . not . toHaveBeenCalled ( )
170162 } )
0 commit comments