@@ -9,13 +9,18 @@ import { Router } from '@angular/router';
99
1010import { SENTRY_TOKEN } from '@core/provider/sentry.provider' ;
1111import { AuthService } from '@core/services/auth.service' ;
12+ import { MaintenanceModeService } from '@core/services/maintenance-mode.service' ;
1213import { UserSelectors } from '@core/store/user' ;
1314import { ToastService } from '@osf/shared/services/toast.service' ;
1415import { ViewOnlyLinkHelperService } from '@osf/shared/services/view-only-link-helper.service' ;
1516
1617import { provideOSFCore } from '@testing/osf.testing.provider' ;
1718import { AuthServiceMock , AuthServiceMockType } from '@testing/providers/auth-service.mock' ;
1819import { LoaderServiceMock , provideLoaderServiceMock } from '@testing/providers/loader-service.mock' ;
20+ import {
21+ MaintenanceModeServiceMock ,
22+ MaintenanceModeServiceMockType ,
23+ } from '@testing/providers/maintenance-mode.service.mock' ;
1924import { RouterMockBuilder , RouterMockType } from '@testing/providers/router-provider.mock' ;
2025import { SentryMock , SentryMockType } from '@testing/providers/sentry-provider.mock' ;
2126import { provideMockStore } from '@testing/providers/store-provider.mock' ;
@@ -30,6 +35,7 @@ describe('errorInterceptor', () => {
3035 let toastServiceMock : ToastServiceMockType ;
3136 let loaderServiceMock : LoaderServiceMock ;
3237 let authServiceMock : AuthServiceMockType ;
38+ let maintenanceModeServiceMock : MaintenanceModeServiceMockType ;
3339 let viewOnlyHelperMock : ViewOnlyLinkHelperMockType ;
3440 let sentryMock : SentryMockType ;
3541
@@ -43,6 +49,7 @@ describe('errorInterceptor', () => {
4349 toastServiceMock = ToastServiceMock . simple ( ) ;
4450 loaderServiceMock = new LoaderServiceMock ( ) ;
4551 authServiceMock = AuthServiceMock . simple ( ) ;
52+ maintenanceModeServiceMock = MaintenanceModeServiceMock . simple ( ) ;
4653 viewOnlyHelperMock = ViewOnlyLinkHelperMock . simple ( viewOnly ) ;
4754 sentryMock = SentryMock . simple ( ) ;
4855
@@ -56,6 +63,7 @@ describe('errorInterceptor', () => {
5663 MockProvider ( Router , router ) ,
5764 MockProvider ( ToastService , toastServiceMock ) ,
5865 MockProvider ( AuthService , authServiceMock ) ,
66+ MockProvider ( MaintenanceModeService , maintenanceModeServiceMock ) ,
5967 MockProvider ( ViewOnlyLinkHelperService , viewOnlyHelperMock ) ,
6068 MockProvider ( PLATFORM_ID , platformId ) ,
6169 { provide : SENTRY_TOKEN , useValue : sentryMock } ,
@@ -181,4 +189,21 @@ describe('errorInterceptor', () => {
181189 expect ( loaderServiceMock . hide ) . toHaveBeenCalled ( ) ;
182190 expect ( toastServiceMock . showError ) . not . toHaveBeenCalled ( ) ;
183191 } ) ;
192+
193+ it ( 'should activate maintenance mode on 503 maintenance response' , async ( ) => {
194+ setup ( 'browser' , false ) ;
195+ const request = createRequest ( '/api/v2/' ) ;
196+ const error = new HttpErrorResponse ( {
197+ status : 503 ,
198+ error : { meta : { maintenance_mode : true } } ,
199+ url : request . url ,
200+ } ) ;
201+
202+ const caught = await runInterceptor ( request , error ) ;
203+
204+ expect ( caught ?. status ) . toBe ( 503 ) ;
205+ expect ( maintenanceModeServiceMock . activate ) . toHaveBeenCalled ( ) ;
206+ expect ( loaderServiceMock . hide ) . toHaveBeenCalled ( ) ;
207+ expect ( toastServiceMock . showError ) . not . toHaveBeenCalled ( ) ;
208+ } ) ;
184209} ) ;
0 commit comments