@@ -9,6 +9,7 @@ import { Router } from '@angular/router';
99
1010import { SENTRY_TOKEN } from '@core/provider/sentry.provider' ;
1111import { AuthService } from '@core/services/auth.service' ;
12+ import { UserSelectors } from '@core/store/user' ;
1213import { ToastService } from '@osf/shared/services/toast.service' ;
1314import { ViewOnlyLinkHelperService } from '@osf/shared/services/view-only-link-helper.service' ;
1415
@@ -17,6 +18,7 @@ import { AuthServiceMock, AuthServiceMockType } from '@testing/providers/auth-se
1718import { LoaderServiceMock , provideLoaderServiceMock } from '@testing/providers/loader-service.mock' ;
1819import { RouterMockBuilder , RouterMockType } from '@testing/providers/router-provider.mock' ;
1920import { SentryMock , SentryMockType } from '@testing/providers/sentry-provider.mock' ;
21+ import { provideMockStore } from '@testing/providers/store-provider.mock' ;
2022import { ToastServiceMock , ToastServiceMockType } from '@testing/providers/toast-provider.mock' ;
2123import { ViewOnlyLinkHelperMock , ViewOnlyLinkHelperMockType } from '@testing/providers/view-only-link-helper.mock' ;
2224
@@ -31,7 +33,12 @@ describe('errorInterceptor', () => {
3133 let viewOnlyHelperMock : ViewOnlyLinkHelperMockType ;
3234 let sentryMock : SentryMockType ;
3335
34- function setup ( platformId : 'browser' | 'server' = 'browser' , viewOnly = false , routerUrl = '/dashboard' ) {
36+ function setup (
37+ platformId : 'browser' | 'server' = 'browser' ,
38+ viewOnly = false ,
39+ routerUrl = '/dashboard' ,
40+ isAuthenticated = false
41+ ) {
3542 router = RouterMockBuilder . create ( ) . withUrl ( routerUrl ) . withNavigate ( vi . fn ( ) . mockResolvedValue ( true ) ) . build ( ) ;
3643 toastServiceMock = ToastServiceMock . simple ( ) ;
3744 loaderServiceMock = new LoaderServiceMock ( ) ;
@@ -43,6 +50,9 @@ describe('errorInterceptor', () => {
4350 providers : [
4451 provideOSFCore ( ) ,
4552 provideLoaderServiceMock ( loaderServiceMock ) ,
53+ provideMockStore ( {
54+ selectors : [ { selector : UserSelectors . isAuthenticated , value : isAuthenticated } ] ,
55+ } ) ,
4656 MockProvider ( Router , router ) ,
4757 MockProvider ( ToastService , toastServiceMock ) ,
4858 MockProvider ( AuthService , authServiceMock ) ,
@@ -107,15 +117,30 @@ describe('errorInterceptor', () => {
107117 expect ( toastServiceMock . showError ) . not . toHaveBeenCalled ( ) ;
108118 } ) ;
109119
110- it ( 'should logout on 401 in browser when not view-only' , async ( ) => {
111- setup ( 'browser' , false ) ;
120+ it ( 'should navigate to sign in on 401 in browser when anonymous and not view-only' , async ( ) => {
121+ setup ( 'browser' , false , '/dashboard' , false ) ;
112122 const request = createRequest ( '/api/v2/nodes/abc' ) ;
113123 const error = new HttpErrorResponse ( { status : 401 , error : { } , url : request . url } ) ;
114124
115125 const caught = await runInterceptor ( request , error ) ;
116126
117127 expect ( caught ?. status ) . toBe ( 401 ) ;
118- expect ( authServiceMock . logout ) . toHaveBeenCalled ( ) ;
128+ expect ( authServiceMock . navigateToSignIn ) . toHaveBeenCalled ( ) ;
129+ expect ( authServiceMock . logout ) . not . toHaveBeenCalled ( ) ;
130+ expect ( loaderServiceMock . hide ) . not . toHaveBeenCalled ( ) ;
131+ expect ( toastServiceMock . showError ) . not . toHaveBeenCalled ( ) ;
132+ } ) ;
133+
134+ it ( 'should logout on 401 in browser when authenticated and not view-only' , async ( ) => {
135+ setup ( 'browser' , false , '/dashboard' , true ) ;
136+ const request = createRequest ( '/api/v2/nodes/abc' ) ;
137+ const error = new HttpErrorResponse ( { status : 401 , error : { } , url : request . url } ) ;
138+
139+ const caught = await runInterceptor ( request , error ) ;
140+
141+ expect ( caught ?. status ) . toBe ( 401 ) ;
142+ expect ( authServiceMock . logout ) . toHaveBeenCalledWith ( window . location . href ) ;
143+ expect ( authServiceMock . navigateToSignIn ) . not . toHaveBeenCalled ( ) ;
119144 expect ( loaderServiceMock . hide ) . not . toHaveBeenCalled ( ) ;
120145 expect ( toastServiceMock . showError ) . not . toHaveBeenCalled ( ) ;
121146 } ) ;
0 commit comments