@@ -9,12 +9,17 @@ 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 { ToastService } from '@osf/shared/services/toast.service' ;
1314import { ViewOnlyLinkHelperService } from '@osf/shared/services/view-only-link-helper.service' ;
1415
1516import { provideOSFCore } from '@testing/osf.testing.provider' ;
1617import { AuthServiceMock , AuthServiceMockType } from '@testing/providers/auth-service.mock' ;
1718import { LoaderServiceMock , provideLoaderServiceMock } from '@testing/providers/loader-service.mock' ;
19+ import {
20+ MaintenanceModeServiceMock ,
21+ MaintenanceModeServiceMockType ,
22+ } from '@testing/providers/maintenance-mode.service.mock' ;
1823import { RouterMockBuilder , RouterMockType } from '@testing/providers/router-provider.mock' ;
1924import { SentryMock , SentryMockType } from '@testing/providers/sentry-provider.mock' ;
2025import { ToastServiceMock , ToastServiceMockType } from '@testing/providers/toast-provider.mock' ;
@@ -28,6 +33,7 @@ describe('errorInterceptor', () => {
2833 let toastServiceMock : ToastServiceMockType ;
2934 let loaderServiceMock : LoaderServiceMock ;
3035 let authServiceMock : AuthServiceMockType ;
36+ let maintenanceModeServiceMock : MaintenanceModeServiceMockType ;
3137 let viewOnlyHelperMock : ViewOnlyLinkHelperMockType ;
3238 let sentryMock : SentryMockType ;
3339
@@ -36,6 +42,7 @@ describe('errorInterceptor', () => {
3642 toastServiceMock = ToastServiceMock . simple ( ) ;
3743 loaderServiceMock = new LoaderServiceMock ( ) ;
3844 authServiceMock = AuthServiceMock . simple ( ) ;
45+ maintenanceModeServiceMock = MaintenanceModeServiceMock . simple ( ) ;
3946 viewOnlyHelperMock = ViewOnlyLinkHelperMock . simple ( viewOnly ) ;
4047 sentryMock = SentryMock . simple ( ) ;
4148
@@ -46,6 +53,7 @@ describe('errorInterceptor', () => {
4653 MockProvider ( Router , router ) ,
4754 MockProvider ( ToastService , toastServiceMock ) ,
4855 MockProvider ( AuthService , authServiceMock ) ,
56+ MockProvider ( MaintenanceModeService , maintenanceModeServiceMock ) ,
4957 MockProvider ( ViewOnlyLinkHelperService , viewOnlyHelperMock ) ,
5058 MockProvider ( PLATFORM_ID , platformId ) ,
5159 { provide : SENTRY_TOKEN , useValue : sentryMock } ,
@@ -156,4 +164,21 @@ describe('errorInterceptor', () => {
156164 expect ( loaderServiceMock . hide ) . toHaveBeenCalled ( ) ;
157165 expect ( toastServiceMock . showError ) . not . toHaveBeenCalled ( ) ;
158166 } ) ;
167+
168+ it ( 'should activate maintenance mode on 503 maintenance response' , async ( ) => {
169+ setup ( 'browser' , false ) ;
170+ const request = createRequest ( '/api/v2/' ) ;
171+ const error = new HttpErrorResponse ( {
172+ status : 503 ,
173+ error : { meta : { maintenance_mode : true } } ,
174+ url : request . url ,
175+ } ) ;
176+
177+ const caught = await runInterceptor ( request , error ) ;
178+
179+ expect ( caught ?. status ) . toBe ( 503 ) ;
180+ expect ( maintenanceModeServiceMock . activate ) . toHaveBeenCalled ( ) ;
181+ expect ( loaderServiceMock . hide ) . toHaveBeenCalled ( ) ;
182+ expect ( toastServiceMock . showError ) . not . toHaveBeenCalled ( ) ;
183+ } ) ;
159184} ) ;
0 commit comments