@@ -150,6 +150,55 @@ func TestChecker_Check_FailOpenOnGetTeamBudgetError(t *testing.T) {
150150 assert .False (t , result .Warning )
151151}
152152
153+ func TestChecker_Check_FailOpenOnGetProviderUsageError (t * testing.T ) {
154+ checker := & budget.Checker {
155+ ResetMode : "calendar" ,
156+ ResetDay : 1 ,
157+ GetTotalUsage : func (ctx context.Context , period time.Time ) (int64 , error ) {
158+ return 0 , nil
159+ },
160+ GetProviderUsage : func (ctx context.Context , teamID , provider string , period time.Time ) (int64 , error ) {
161+ return 0 , fmt .Errorf ("provider usage query failed" )
162+ },
163+ GetTeamBudget : func (ctx context.Context , teamID , provider string ) (* budget.TeamBudget , error ) {
164+ return & budget.TeamBudget {MonthlyTokenLimit : 5000 , Enforcement : "hard" }, nil
165+ },
166+ }
167+
168+ result := checker .Check (context .Background (), budget.CheckInput {
169+ TeamID : "team-1" ,
170+ Provider : "openai" ,
171+ })
172+
173+ assert .False (t , result .Blocked )
174+ assert .False (t , result .Warning )
175+ }
176+
177+ func TestChecker_Check_TeamHardBlock (t * testing.T ) {
178+ checker := & budget.Checker {
179+ ResetMode : "calendar" ,
180+ ResetDay : 1 ,
181+ GetTotalUsage : func (ctx context.Context , period time.Time ) (int64 , error ) {
182+ return 0 , nil
183+ },
184+ GetProviderUsage : func (ctx context.Context , teamID , provider string , period time.Time ) (int64 , error ) {
185+ return 5001 , nil
186+ },
187+ GetTeamBudget : func (ctx context.Context , teamID , provider string ) (* budget.TeamBudget , error ) {
188+ return & budget.TeamBudget {MonthlyTokenLimit : 5000 , Enforcement : "hard" }, nil
189+ },
190+ }
191+
192+ result := checker .Check (context .Background (), budget.CheckInput {
193+ TeamID : "team-1" ,
194+ Provider : "openai" ,
195+ })
196+
197+ assert .True (t , result .Blocked )
198+ assert .Equal (t , "team" , result .BlockedBy )
199+ assert .Contains (t , result .Message , "team budget exceeded" )
200+ }
201+
153202func TestChecker_CheckExecutionBudget (t * testing.T ) {
154203 result := budget .CheckExecutionBudget (50000 , 50001 )
155204 assert .True (t , result .Blocked )
0 commit comments