@@ -33,6 +33,7 @@ import {
3333 type ReferralProgramEditionSlug ,
3434 ReferralProgramEditionStatuses ,
3535 ReferralProgramEditionSummariesResponseCodes ,
36+ type ReferralProgramRulesPieSplit ,
3637 ReferrerEditionMetricsTypeIds ,
3738 type ReferrerLeaderboard ,
3839 ReferrerLeaderboardPageResponseCodes ,
@@ -868,20 +869,33 @@ describe("/v1/ensanalytics", () => {
868869 } ,
869870 ) ;
870871
871- // Mock caches middleware with a cache for each edition
872+ // Each leaderboard carries its edition's own rules so the per-edition summaries don't
873+ // collapse onto a single time window and trip the non-overlap invariant on the response.
874+ const leaderboardFor = ( config : {
875+ rules : ReferralProgramRulesPieSplit ;
876+ } ) : ReferrerLeaderboard => ( {
877+ ...emptyReferralLeaderboard ,
878+ rules : config . rules ,
879+ } ) ;
872880 const mockEditionsCaches = new Map < ReferralProgramEditionSlug , SWRCache < ReferrerLeaderboard > > (
873881 [
874882 [
875883 "2025-12" ,
876- { read : async ( ) => emptyReferralLeaderboard } as SWRCache < ReferrerLeaderboard > ,
884+ {
885+ read : async ( ) => leaderboardFor ( mockEditionConfigSet . get ( "2025-12" ) ! ) ,
886+ } as SWRCache < ReferrerLeaderboard > ,
877887 ] ,
878888 [
879889 "2026-03" ,
880- { read : async ( ) => emptyReferralLeaderboard } as SWRCache < ReferrerLeaderboard > ,
890+ {
891+ read : async ( ) => leaderboardFor ( mockEditionConfigSet . get ( "2026-03" ) ! ) ,
892+ } as SWRCache < ReferrerLeaderboard > ,
881893 ] ,
882894 [
883895 "2026-06" ,
884- { read : async ( ) => emptyReferralLeaderboard } as SWRCache < ReferrerLeaderboard > ,
896+ {
897+ read : async ( ) => leaderboardFor ( mockEditionConfigSet . get ( "2026-06" ) ! ) ,
898+ } as SWRCache < ReferrerLeaderboard > ,
885899 ] ,
886900 ] ,
887901 ) ;
0 commit comments