@@ -558,6 +558,89 @@ describe('EditorDraftComponent', () => {
558558 } ) ) ;
559559 } ) ;
560560
561+ describe ( 'canConfigureFormatting' , ( ) => {
562+ beforeEach ( ( ) => {
563+ when ( mockFeatureFlagService . newDraftHistory ) . thenReturn ( createTestFeatureFlag ( true ) ) ;
564+ when ( mockDraftGenerationService . getGeneratedDraftHistory ( anything ( ) , anything ( ) , anything ( ) ) ) . thenReturn (
565+ of ( draftHistory )
566+ ) ;
567+ spyOn < any > ( component , 'getTargetOps' ) . and . returnValue ( of ( targetDelta . ops ) ) ;
568+ when ( mockDraftHandlingService . getDraft ( anything ( ) , anything ( ) ) ) . thenReturn ( of ( draftDelta . ops ! ) ) ;
569+ when ( mockDraftHandlingService . draftDataToOps ( anything ( ) , anything ( ) ) ) . thenReturn ( draftDelta . ops ! ) ;
570+ } ) ;
571+
572+ it ( 'should be true when latest build has draft and selected revision is latest' , fakeAsync ( ( ) => {
573+ const testProjectDoc : SFProjectProfileDoc = {
574+ data : createTestProjectProfile ( {
575+ texts : [
576+ {
577+ bookNum : 1 ,
578+ chapters : [ { number : 1 , permissions : { user01 : SFProjectRole . ParatextAdministrator } , hasDraft : true } ]
579+ }
580+ ]
581+ } )
582+ } as SFProjectProfileDoc ;
583+ when ( mockDraftGenerationService . draftExists ( anything ( ) , anything ( ) , anything ( ) ) ) . thenReturn ( of ( true ) ) ;
584+ when ( mockActivatedProjectService . changes$ ) . thenReturn ( of ( testProjectDoc ) ) ;
585+
586+ fixture . detectChanges ( ) ;
587+ tick ( EDITOR_READY_TIMEOUT ) ;
588+
589+ expect ( component . isSelectedDraftLatest ) . toBe ( true ) ;
590+ expect ( component . canConfigureFormatting ) . toBe ( true ) ;
591+ flush ( ) ;
592+ } ) ) ;
593+
594+ it ( 'should be false when selected revision is not the latest' , fakeAsync ( ( ) => {
595+ const testProjectDoc : SFProjectProfileDoc = {
596+ data : createTestProjectProfile ( {
597+ texts : [
598+ {
599+ bookNum : 1 ,
600+ chapters : [ { number : 1 , permissions : { user01 : SFProjectRole . ParatextAdministrator } , hasDraft : true } ]
601+ }
602+ ]
603+ } )
604+ } as SFProjectProfileDoc ;
605+ when ( mockDraftGenerationService . draftExists ( anything ( ) , anything ( ) , anything ( ) ) ) . thenReturn ( of ( true ) ) ;
606+ when ( mockActivatedProjectService . changes$ ) . thenReturn ( of ( testProjectDoc ) ) ;
607+
608+ fixture . detectChanges ( ) ;
609+ tick ( EDITOR_READY_TIMEOUT ) ;
610+ expect ( component . canConfigureFormatting ) . toBe ( true ) ;
611+
612+ // Select earlier revision
613+ component . onSelectionChanged ( { value : draftHistory [ 1 ] } as MatSelectChange ) ;
614+ fixture . detectChanges ( ) ;
615+ tick ( EDITOR_READY_TIMEOUT ) ;
616+
617+ expect ( component . isSelectedDraftLatest ) . toBe ( false ) ;
618+ expect ( component . canConfigureFormatting ) . toBe ( false ) ;
619+ flush ( ) ;
620+ } ) ) ;
621+
622+ it ( 'should be false when latest build does not have a draft' , fakeAsync ( ( ) => {
623+ const testProjectDoc : SFProjectProfileDoc = {
624+ data : createTestProjectProfile ( {
625+ texts : [
626+ {
627+ bookNum : 1 ,
628+ chapters : [ { number : 1 , permissions : { user01 : SFProjectRole . ParatextAdministrator } , hasDraft : false } ]
629+ }
630+ ]
631+ } )
632+ } as SFProjectProfileDoc ;
633+ when ( mockDraftGenerationService . draftExists ( anything ( ) , anything ( ) , anything ( ) ) ) . thenReturn ( of ( false ) ) ;
634+ when ( mockActivatedProjectService . changes$ ) . thenReturn ( of ( testProjectDoc ) ) ;
635+
636+ fixture . detectChanges ( ) ;
637+ tick ( EDITOR_READY_TIMEOUT ) ;
638+ expect ( component . isSelectedDraftLatest ) . toBe ( true ) ;
639+ expect ( component . canConfigureFormatting ) . toBe ( false ) ;
640+ flush ( ) ;
641+ } ) ) ;
642+ } ) ;
643+
561644 describe ( 'getLocalizedBookChapter' , ( ) => {
562645 it ( 'should return an empty string if bookNum or chapter is undefined' , ( ) => {
563646 component . bookNum = undefined ;
0 commit comments