@@ -123,6 +123,37 @@ describe("resolveTeamGroupId", () => {
123123 const result = await resolveTeamGroupId ( "tok" , "team-fallback" ) ;
124124 expect ( result ) . toBe ( "team-fallback" ) ;
125125 } ) ;
126+
127+ it ( "caps cache at 500 entries — evicts oldest on overflow" , async ( ) => {
128+ vi . mocked ( fetchGraphJson ) . mockResolvedValue ( { id : "group-guid" } as never ) ;
129+
130+ const token = "test-token" ;
131+ for ( let i = 0 ; i < 500 ; i ++ ) {
132+ await resolveTeamGroupId ( token , `team-${ i } ` ) ;
133+ }
134+ expect ( _teamGroupIdCacheForTest . size ) . toBe ( 500 ) ;
135+ expect ( _teamGroupIdCacheForTest . has ( "team-0" ) ) . toBe ( true ) ;
136+ expect ( _teamGroupIdCacheForTest . has ( "team-499" ) ) . toBe ( true ) ;
137+
138+ vi . mocked ( fetchGraphJson ) . mockClear ( ) ;
139+ await resolveTeamGroupId ( token , "team-500" ) ;
140+ expect ( fetchGraphJson ) . toHaveBeenCalledTimes ( 1 ) ;
141+ expect ( _teamGroupIdCacheForTest . size ) . toBe ( 500 ) ;
142+ expect ( _teamGroupIdCacheForTest . has ( "team-0" ) ) . toBe ( false ) ;
143+ expect ( _teamGroupIdCacheForTest . has ( "team-500" ) ) . toBe ( true ) ;
144+
145+ vi . mocked ( fetchGraphJson ) . mockClear ( ) ;
146+ await resolveTeamGroupId ( token , "team-0" ) ;
147+ expect ( fetchGraphJson ) . toHaveBeenCalledTimes ( 1 ) ;
148+ expect ( _teamGroupIdCacheForTest . size ) . toBe ( 500 ) ;
149+ expect ( _teamGroupIdCacheForTest . has ( "team-1" ) ) . toBe ( false ) ;
150+ expect ( _teamGroupIdCacheForTest . has ( "team-500" ) ) . toBe ( true ) ;
151+
152+ // team-500 remains cached after team-0 is reinserted at the insertion-order tail.
153+ vi . mocked ( fetchGraphJson ) . mockClear ( ) ;
154+ await resolveTeamGroupId ( token , "team-500" ) ;
155+ expect ( fetchGraphJson ) . toHaveBeenCalledTimes ( 0 ) ;
156+ } ) ;
126157} ) ;
127158
128159describe ( "fetchChannelMessage" , ( ) => {
0 commit comments