@@ -10,6 +10,7 @@ import { Router } from '@angular/router';
1010import { SENTRY_TOKEN } from '@core/provider/sentry.provider' ;
1111import { AuthService } from '@core/services/auth.service' ;
1212import { MaintenanceModeService } from '@core/services/maintenance-mode.service' ;
13+ import { 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
@@ -22,6 +23,7 @@ import {
2223} from '@testing/providers/maintenance-mode.service.mock' ;
2324import { RouterMockBuilder , RouterMockType } from '@testing/providers/router-provider.mock' ;
2425import { SentryMock , SentryMockType } from '@testing/providers/sentry-provider.mock' ;
26+ import { provideMockStore } from '@testing/providers/store-provider.mock' ;
2527import { ToastServiceMock , ToastServiceMockType } from '@testing/providers/toast-provider.mock' ;
2628import { ViewOnlyLinkHelperMock , ViewOnlyLinkHelperMockType } from '@testing/providers/view-only-link-helper.mock' ;
2729
@@ -37,7 +39,12 @@ describe('errorInterceptor', () => {
3739 let viewOnlyHelperMock : ViewOnlyLinkHelperMockType ;
3840 let sentryMock : SentryMockType ;
3941
40- function setup ( platformId : 'browser' | 'server' = 'browser' , viewOnly = false , routerUrl = '/dashboard' ) {
42+ function setup (
43+ platformId : 'browser' | 'server' = 'browser' ,
44+ viewOnly = false ,
45+ routerUrl = '/dashboard' ,
46+ isAuthenticated = false
47+ ) {
4148 router = RouterMockBuilder . create ( ) . withUrl ( routerUrl ) . withNavigate ( vi . fn ( ) . mockResolvedValue ( true ) ) . build ( ) ;
4249 toastServiceMock = ToastServiceMock . simple ( ) ;
4350 loaderServiceMock = new LoaderServiceMock ( ) ;
@@ -50,6 +57,9 @@ describe('errorInterceptor', () => {
5057 providers : [
5158 provideOSFCore ( ) ,
5259 provideLoaderServiceMock ( loaderServiceMock ) ,
60+ provideMockStore ( {
61+ selectors : [ { selector : UserSelectors . isAuthenticated , value : isAuthenticated } ] ,
62+ } ) ,
5363 MockProvider ( Router , router ) ,
5464 MockProvider ( ToastService , toastServiceMock ) ,
5565 MockProvider ( AuthService , authServiceMock ) ,
@@ -115,15 +125,30 @@ describe('errorInterceptor', () => {
115125 expect ( toastServiceMock . showError ) . not . toHaveBeenCalled ( ) ;
116126 } ) ;
117127
118- it ( 'should logout on 401 in browser when not view-only' , async ( ) => {
119- setup ( 'browser' , false ) ;
128+ it ( 'should navigate to sign in on 401 in browser when anonymous and not view-only' , async ( ) => {
129+ setup ( 'browser' , false , '/dashboard' , false ) ;
130+ const request = createRequest ( '/api/v2/nodes/abc' ) ;
131+ const error = new HttpErrorResponse ( { status : 401 , error : { } , url : request . url } ) ;
132+
133+ const caught = await runInterceptor ( request , error ) ;
134+
135+ expect ( caught ?. status ) . toBe ( 401 ) ;
136+ expect ( authServiceMock . navigateToSignIn ) . toHaveBeenCalled ( ) ;
137+ expect ( authServiceMock . logout ) . not . toHaveBeenCalled ( ) ;
138+ expect ( loaderServiceMock . hide ) . not . toHaveBeenCalled ( ) ;
139+ expect ( toastServiceMock . showError ) . not . toHaveBeenCalled ( ) ;
140+ } ) ;
141+
142+ it ( 'should logout on 401 in browser when authenticated and not view-only' , async ( ) => {
143+ setup ( 'browser' , false , '/dashboard' , true ) ;
120144 const request = createRequest ( '/api/v2/nodes/abc' ) ;
121145 const error = new HttpErrorResponse ( { status : 401 , error : { } , url : request . url } ) ;
122146
123147 const caught = await runInterceptor ( request , error ) ;
124148
125149 expect ( caught ?. status ) . toBe ( 401 ) ;
126- expect ( authServiceMock . logout ) . toHaveBeenCalled ( ) ;
150+ expect ( authServiceMock . logout ) . toHaveBeenCalledWith ( window . location . href ) ;
151+ expect ( authServiceMock . navigateToSignIn ) . not . toHaveBeenCalled ( ) ;
127152 expect ( loaderServiceMock . hide ) . not . toHaveBeenCalled ( ) ;
128153 expect ( toastServiceMock . showError ) . not . toHaveBeenCalled ( ) ;
129154 } ) ;
0 commit comments