@@ -9,6 +9,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
99import { NavigationEnd , ResolveStart , Router } from '@angular/router' ;
1010
1111import { ENVIRONMENT } from '@core/provider/environment.provider' ;
12+ import { MaintenanceModeService } from '@core/services/maintenance-mode.service' ;
1213import { GetCurrentUser } from '@core/store/user' ;
1314import { GetEmails , UserEmailsSelectors } from '@core/store/user-emails' ;
1415import { AccountEmailModel } from '@osf/shared/models/emails/account-email.model' ;
@@ -17,6 +18,10 @@ import { CustomDialogService } from '@osf/shared/services/custom-dialog.service'
1718import { provideOSFCore } from '@testing/osf.testing.provider' ;
1819import { CustomDialogServiceMockBuilder } from '@testing/providers/custom-dialog-provider.mock' ;
1920import { LoaderServiceMock , provideLoaderServiceMock } from '@testing/providers/loader-service.mock' ;
21+ import {
22+ MaintenanceModeServiceMock ,
23+ MaintenanceModeServiceMockType ,
24+ } from '@testing/providers/maintenance-mode.service.mock' ;
2025import { RouterMockBuilder , RouterMockType } from '@testing/providers/router-provider.mock' ;
2126import { BaseSetupOverrides , mergeSignalOverrides , provideMockStore } from '@testing/providers/store-provider.mock' ;
2227
@@ -36,6 +41,7 @@ describe('AppComponent', () => {
3641 let loaderServiceMock : LoaderServiceMock ;
3742 let customDialogServiceMock : ReturnType < CustomDialogServiceMockBuilder [ 'build' ] > ;
3843 let gtmServiceMock : { pushTag : Mock } ;
44+ let maintenanceModeServiceMock : MaintenanceModeServiceMockType ;
3945
4046 const unverifiedEmail : AccountEmailModel = {
4147 id : 'email-1' ,
@@ -50,6 +56,7 @@ describe('AppComponent', () => {
5056 isBrowser ?: boolean ;
5157 unverifiedEmails ?: AccountEmailModel [ ] ;
5258 googleTagManagerId ?: string ;
59+ isMaintenanceMode ?: boolean ;
5360 }
5461
5562 function setup ( overrides : SetupOverrides = { } ) {
@@ -58,6 +65,7 @@ describe('AppComponent', () => {
5865 loaderServiceMock = new LoaderServiceMock ( ) ;
5966 customDialogServiceMock = CustomDialogServiceMockBuilder . create ( ) . withDefaultOpen ( ) . build ( ) ;
6067 gtmServiceMock = { pushTag : vi . fn ( ) } ;
68+ maintenanceModeServiceMock = MaintenanceModeServiceMock . simple ( overrides . isMaintenanceMode ?? false ) ;
6169
6270 TestBed . configureTestingModule ( {
6371 imports : [ AppComponent , ...MockComponents ( ToastComponent , FullScreenLoaderComponent ) ] ,
@@ -67,6 +75,7 @@ describe('AppComponent', () => {
6775 MockProvider ( Router , routerMock ) ,
6876 MockProvider ( CustomDialogService , customDialogServiceMock ) ,
6977 MockProvider ( GoogleTagManagerService , gtmServiceMock ) ,
78+ MockProvider ( MaintenanceModeService , maintenanceModeServiceMock ) ,
7079 MockProvider ( PLATFORM_ID , overrides . isBrowser === false ? 'server' : 'browser' ) ,
7180 provideMockStore ( {
7281 signals : mergeSignalOverrides (
@@ -149,6 +158,21 @@ describe('AppComponent', () => {
149158 } ) ;
150159 } ) ;
151160
161+ it ( 'should probe maintenance mode once on init in browser' , ( ) => {
162+ setup ( ) ;
163+ expect ( maintenanceModeServiceMock . checkOnce ) . toHaveBeenCalledTimes ( 1 ) ;
164+ } ) ;
165+
166+ it ( 'should render the maintenance overlay when maintenance mode is active' , ( ) => {
167+ setup ( { isMaintenanceMode : true } ) ;
168+ expect ( fixture . nativeElement . querySelector ( '.maintenance-overlay' ) ) . toBeTruthy ( ) ;
169+ } ) ;
170+
171+ it ( 'should not render the maintenance overlay when maintenance mode is inactive' , ( ) => {
172+ setup ( ) ;
173+ expect ( fixture . nativeElement . querySelector ( '.maintenance-overlay' ) ) . toBeFalsy ( ) ;
174+ } ) ;
175+
152176 it ( 'should not subscribe to router events on server' , ( ) => {
153177 setup ( { isBrowser : false } ) ;
154178 routerBuilder . emit ( new ResolveStart ( 1 , '/next' , '/next' , { } as any ) ) ;
0 commit comments