@@ -640,6 +640,60 @@ describe('HeaderFooterSessionManager', () => {
640640 expect ( payload ! . items ! [ 0 ] ! . blockId ) . toBe ( 'p1' ) ;
641641 } ) ;
642642
643+ it ( 'uses the default variant layout when odd ref lookup falls back to default' , ( ) => {
644+ const deps : SessionManagerDependencies = {
645+ getLayoutOptions : vi . fn ( ( ) => ( { } ) ) ,
646+ getPageElement : vi . fn ( ( ) => null ) ,
647+ scrollPageIntoView : vi . fn ( ) ,
648+ waitForPageMount : vi . fn ( async ( ) => true ) ,
649+ convertPageLocalToOverlayCoords : vi . fn ( ( ) => ( { x : 0 , y : 0 } ) ) ,
650+ isViewLocked : vi . fn ( ( ) => false ) ,
651+ getBodyPageHeight : vi . fn ( ( ) => 800 ) ,
652+ notifyInputBridgeTargetChanged : vi . fn ( ) ,
653+ scheduleRerender : vi . fn ( ) ,
654+ setPendingDocChange : vi . fn ( ) ,
655+ getBodyPageCount : vi . fn ( ( ) => 1 ) ,
656+ } ;
657+
658+ manager = new HeaderFooterSessionManager ( {
659+ painterHost,
660+ visibleHost,
661+ selectionOverlay,
662+ editor : createMainEditorStub ( ) ,
663+ defaultPageSize : { w : 612 , h : 792 } ,
664+ defaultMargins : { top : 72 , right : 72 , bottom : 72 , left : 72 , header : 36 , footer : 36 } ,
665+ } ) ;
666+ manager . setDependencies ( deps ) ;
667+ manager . headerFooterIdentifier = {
668+ headerIds : { default : null , first : null , even : null , odd : 'rId-header-odd' } ,
669+ footerIds : { default : null , first : null , even : null , odd : null } ,
670+ titlePg : false ,
671+ alternateHeaders : true ,
672+ } ;
673+ manager . setLayoutResults ( [ buildHeaderResult ( ) ] , null ) ;
674+
675+ const layout : Layout = {
676+ version : 1 ,
677+ flowMode : 'paginated' ,
678+ pageGap : 0 ,
679+ pageSize : { w : 612 , h : 792 } ,
680+ pages : [
681+ {
682+ number : 1 ,
683+ sectionRefs : { headerRefs : { default : 'rId-header-default' } , footerRefs : { } } ,
684+ margins : { top : 72 , right : 72 , bottom : 72 , left : 72 , header : 36 , footer : 36 } ,
685+ } as never ,
686+ ] ,
687+ } as unknown as Layout ;
688+ const provider = manager . createDecorationProvider ( 'header' , layout as unknown as ResolvedLayout ) ;
689+ const payload = provider ! ( 1 , layout . pages [ 0 ] ! . margins , layout . pages [ 0 ] as unknown as ResolvedPage ) ;
690+
691+ expect ( payload ) . not . toBeNull ( ) ;
692+ expect ( payload ! . headerFooterRefId ) . toBe ( 'rId-header-default' ) ;
693+ expect ( payload ! . sectionType ) . toBe ( 'odd' ) ;
694+ expect ( payload ! . items ?. [ 0 ] ?. blockId ) . toBe ( 'p1' ) ;
695+ } ) ;
696+
643697 it ( 'recomputes variant items when cached resolved items become misaligned' , ( ) => {
644698 const deps : SessionManagerDependencies = {
645699 getLayoutOptions : vi . fn ( ( ) => ( { } ) ) ,
0 commit comments