@@ -23,6 +23,7 @@ type AccountRepoSuite struct {
2323
2424type schedulerCacheRecorder struct {
2525 setAccounts []* service.Account
26+ accounts map [int64 ]* service.Account
2627}
2728
2829func (s * schedulerCacheRecorder ) GetSnapshot (ctx context.Context , bucket service.SchedulerBucket ) ([]* service.Account , bool , error ) {
@@ -34,11 +35,20 @@ func (s *schedulerCacheRecorder) SetSnapshot(ctx context.Context, bucket service
3435}
3536
3637func (s * schedulerCacheRecorder ) GetAccount (ctx context.Context , accountID int64 ) (* service.Account , error ) {
37- return nil , nil
38+ if s .accounts == nil {
39+ return nil , nil
40+ }
41+ return s .accounts [accountID ], nil
3842}
3943
4044func (s * schedulerCacheRecorder ) SetAccount (ctx context.Context , account * service.Account ) error {
4145 s .setAccounts = append (s .setAccounts , account )
46+ if s .accounts == nil {
47+ s .accounts = make (map [int64 ]* service.Account )
48+ }
49+ if account != nil {
50+ s .accounts [account .ID ] = account
51+ }
4252 return nil
4353}
4454
@@ -623,21 +633,46 @@ func (s *AccountRepoSuite) TestUpdateExtra_NilExtra() {
623633 s .Require ().Equal ("val" , got .Extra ["key" ])
624634}
625635
626- func (s * AccountRepoSuite ) TestUpdateExtra_SchedulerNeutralKeysSkipOutbox () {
627- account := mustCreateAccount (s .T (), s .client , & service.Account {Name : "acc-extra-neutral" , Extra : map [string ]any {}})
628- _ , err := s .repo .sql .ExecContext (s .ctx , "TRUNCATE scheduler_outbox" )
629- s .Require ().NoError (err )
636+ func (s * AccountRepoSuite ) TestUpdateExtra_SchedulerNeutralSkipsOutboxAndSyncsFreshSnapshot () {
637+ account := mustCreateAccount (s .T (), s .client , & service.Account {
638+ Name : "acc-extra-neutral" ,
639+ Platform : service .PlatformOpenAI ,
640+ Extra : map [string ]any {"codex_usage_updated_at" : "old" },
641+ })
642+ cacheRecorder := & schedulerCacheRecorder {
643+ accounts : map [int64 ]* service.Account {
644+ account .ID : {
645+ ID : account .ID ,
646+ Platform : account .Platform ,
647+ Status : service .StatusDisabled ,
648+ Extra : map [string ]any {
649+ "codex_usage_updated_at" : "old" ,
650+ },
651+ },
652+ },
653+ }
654+ s .repo .schedulerCache = cacheRecorder
630655
631- s . Require (). NoError ( s . repo . UpdateExtra ( s . ctx , account . ID , map [string ]any {
632- "codex_usage_updated_at" : "2026-03-11T13 :00:00Z" ,
633- "codex_5h_used_percent" : 12 .5 ,
656+ updates := map [string ]any {
657+ "codex_usage_updated_at" : "2026-03-11T10 :00:00Z" ,
658+ "codex_5h_used_percent" : 88 .5 ,
634659 "session_window_utilization" : 0.42 ,
635- }))
660+ }
661+ s .Require ().NoError (s .repo .UpdateExtra (s .ctx , account .ID , updates ))
636662
637- var count int
638- err = scanSingleRow (s .ctx , s .repo .sql , "SELECT COUNT(*) FROM scheduler_outbox" , nil , & count )
663+ got , err := s .repo .GetByID (s .ctx , account .ID )
639664 s .Require ().NoError (err )
640- s .Require ().Equal (0 , count )
665+ s .Require ().Equal ("2026-03-11T10:00:00Z" , got .Extra ["codex_usage_updated_at" ])
666+ s .Require ().Equal (88.5 , got .Extra ["codex_5h_used_percent" ])
667+ s .Require ().Equal (0.42 , got .Extra ["session_window_utilization" ])
668+
669+ var outboxCount int
670+ s .Require ().NoError (scanSingleRow (s .ctx , s .repo .sql , "SELECT COUNT(*) FROM scheduler_outbox" , nil , & outboxCount ))
671+ s .Require ().Zero (outboxCount )
672+ s .Require ().Len (cacheRecorder .setAccounts , 1 )
673+ s .Require ().NotNil (cacheRecorder .accounts [account .ID ])
674+ s .Require ().Equal (service .StatusActive , cacheRecorder .accounts [account .ID ].Status )
675+ s .Require ().Equal ("2026-03-11T10:00:00Z" , cacheRecorder .accounts [account .ID ].Extra ["codex_usage_updated_at" ])
641676}
642677
643678func (s * AccountRepoSuite ) TestUpdateExtra_ExhaustedCodexSnapshotSyncsSchedulerCache () {
@@ -664,16 +699,22 @@ func (s *AccountRepoSuite) TestUpdateExtra_ExhaustedCodexSnapshotSyncsSchedulerC
664699 s .Require ().Equal (0 , count )
665700 s .Require ().Len (cacheRecorder .setAccounts , 1 )
666701 s .Require ().Equal (account .ID , cacheRecorder .setAccounts [0 ].ID )
702+ s .Require ().Equal (service .StatusActive , cacheRecorder .setAccounts [0 ].Status )
667703 s .Require ().Equal (100.0 , cacheRecorder .setAccounts [0 ].Extra ["codex_7d_used_percent" ])
668704}
669705
670- func (s * AccountRepoSuite ) TestUpdateExtra_CustomKeysStillEnqueueOutbox () {
671- account := mustCreateAccount (s .T (), s .client , & service.Account {Name : "acc-extra-custom" , Extra : map [string ]any {}})
706+ func (s * AccountRepoSuite ) TestUpdateExtra_SchedulerRelevantStillEnqueuesOutbox () {
707+ account := mustCreateAccount (s .T (), s .client , & service.Account {
708+ Name : "acc-extra-mixed" ,
709+ Platform : service .PlatformAntigravity ,
710+ Extra : map [string ]any {},
711+ })
672712 _ , err := s .repo .sql .ExecContext (s .ctx , "TRUNCATE scheduler_outbox" )
673713 s .Require ().NoError (err )
674714
675715 s .Require ().NoError (s .repo .UpdateExtra (s .ctx , account .ID , map [string ]any {
676- "custom_scheduler_sensitive_key" : true ,
716+ "mixed_scheduling" : true ,
717+ "codex_usage_updated_at" : "2026-03-11T10:00:00Z" ,
677718 }))
678719
679720 var count int
0 commit comments