11import { instrumentAuthProvider , instrumentForAuth } from "test/utils/mocks/auth" ;
22import AuthProvider from "./auth-provider" ;
33import { AuthObserver } from "./auth-observer" ;
4+ import { PublicClientApplication } from "@azure/msal-node" ;
45
56const FAKE_GET_TOKEN_ARGS = {
67 resourceURI : "resourceURI1" ,
@@ -20,6 +21,7 @@ describe("AuthProvider", () => {
2021 } ;
2122 let mockAuthCode ;
2223 let authObserver : jasmine . SpyObj < AuthObserver > ;
24+ let clientSpy : jasmine . SpyObj < PublicClientApplication > ;
2325
2426 instrumentForAuth ( appSpy ) ;
2527 const config : any = {
@@ -44,7 +46,7 @@ describe("AuthProvider", () => {
4446 authObserver . fetchAuthCode . and . returnValue ( Promise . resolve ( mockAuthCode ) ) ;
4547
4648 const call = async ( ) => await authProvider . getToken ( FAKE_GET_TOKEN_ARGS ) ;
47- const clientSpy = createClientSpy ( ) ;
49+ clientSpy = createClientSpy ( ) ;
4850 instrumentAuthProvider ( authProvider ) ;
4951
5052 returnToken ( clientSpy . acquireTokenSilent , "silent-token-1" ) ;
@@ -79,39 +81,48 @@ describe("AuthProvider", () => {
7981 expect ( result2 . accessToken ) . toEqual ( "tenant2-token" ) ;
8082 } ) ;
8183
82- it ( "should use external browser when externalBrowserAuth is true" , async ( ) => {
83- createClientSpy ( ) ;
84- authObserver . selectUserAuthMethod . and . returnValue (
85- Promise . resolve ( { externalBrowserAuth : true } )
86- ) ;
87-
88- const browserSpy =
89- spyOn < any > ( authProvider , "_createExternalBrowserRequest" ) ;
90- await authProvider . getToken ( FAKE_GET_TOKEN_ARGS ) ;
91- expect ( browserSpy ) . toHaveBeenCalled ( ) ;
92- } ) ;
93-
94- it ( "should use built-in window when externalBrowserAuth is false" , async ( ) => {
95- const clientSpy = createClientSpy ( ) ;
96- authObserver . selectUserAuthMethod . and . returnValue (
97- Promise . resolve ( { externalBrowserAuth : false } )
98- ) ;
99-
100- await authProvider . getToken ( FAKE_GET_TOKEN_ARGS ) ;
101- expect ( clientSpy . getAuthCodeUrl ) . toHaveBeenCalled ( ) ;
102- expect ( authObserver . fetchAuthCode ) . toHaveBeenCalled ( ) ;
103- expect ( clientSpy . acquireTokenByCode ) . toHaveBeenCalled ( ) ;
84+ describe ( "#_externalBrowserAuth" , ( ) => {
85+ beforeEach ( ( ) => {
86+ clientSpy = createClientSpy ( ) ;
87+ authObserver . selectUserAuthMethod . and . returnValue (
88+ Promise . resolve ( { externalBrowserAuth : true } )
89+ ) ;
90+ } ) ;
91+ it ( "is called when externalBrowserAuth is true" , async ( ) => {
92+ const browserSpy =
93+ spyOn < any > ( authProvider , "_createExternalBrowserRequest" ) ;
94+ await authProvider . getToken ( FAKE_GET_TOKEN_ARGS ) ;
95+ expect ( browserSpy ) . toHaveBeenCalled ( ) ;
96+ } ) ;
97+ it ( "handles error thrown by _createExternalBrowserRequest()" , async ( ) => {
98+ const err = "fake external browser error" ;
99+ spyOn < any > ( authProvider , "_createExternalBrowserRequest" )
100+ . and . returnValue ( Promise . reject ( err ) ) ;
101+ await expectAsync ( authProvider . getToken ( FAKE_GET_TOKEN_ARGS ) )
102+ . toBeRejectedWith ( err ) ;
103+ expect ( authObserver . onAuthFailure ) . toHaveBeenCalledWith ( err ) ;
104+ } ) ;
105+ it ( "calls acquireTokenInteractive() with select_account prompt" , async ( ) => {
106+ await authProvider . getToken ( FAKE_GET_TOKEN_ARGS ) ;
107+ expect ( clientSpy . acquireTokenInteractive ) . toHaveBeenCalledWith (
108+ jasmine . objectContaining ( { prompt : "select_account" } ) ) ;
109+ } ) ;
104110 } ) ;
105111
106112 describe ( "#_builtInWindowAuth" , ( ) => {
107- let clientSpy ;
108113 beforeEach ( ( ) => {
109114 clientSpy = createClientSpy ( ) ;
110115 authObserver . selectUserAuthMethod . and . returnValue (
111116 Promise . resolve ( { externalBrowserAuth : false } )
112117 ) ;
113118 } ) ;
114- it ( "should handle error thrown by client.getAuthCodeUrl()" , async ( ) => {
119+ it ( "is called when externalBrowserAuth is false" , async ( ) => {
120+ await authProvider . getToken ( FAKE_GET_TOKEN_ARGS ) ;
121+ expect ( clientSpy . getAuthCodeUrl ) . toHaveBeenCalled ( ) ;
122+ expect ( authObserver . fetchAuthCode ) . toHaveBeenCalled ( ) ;
123+ expect ( clientSpy . acquireTokenByCode ) . toHaveBeenCalled ( ) ;
124+ } ) ;
125+ it ( "handles error thrown by client.getAuthCodeUrl()" , async ( ) => {
115126 const err = "fake getAuthCodeUrl error" ;
116127 clientSpy . getAuthCodeUrl . and . returnValue ( Promise . reject ( err ) ) ;
117128 await expectAsync ( authProvider . getToken ( FAKE_GET_TOKEN_ARGS ) )
@@ -120,7 +131,7 @@ describe("AuthProvider", () => {
120131 expect ( clientSpy . acquireTokenByCode ) . not . toHaveBeenCalled ( ) ;
121132 expect ( authObserver . fetchAuthCode ) . not . toHaveBeenCalled ( ) ;
122133 } ) ;
123- it ( "should handle error thrown by fetchAuthCode()" , async ( ) => {
134+ it ( "handles error thrown by fetchAuthCode()" , async ( ) => {
124135 const err = "fake fetchAuthCode error" ;
125136 authObserver . fetchAuthCode . and . returnValue ( Promise . reject ( err ) ) ;
126137 await expectAsync ( authProvider . getToken ( FAKE_GET_TOKEN_ARGS ) )
@@ -153,7 +164,8 @@ const makeClientApplicationSpy = () => jasmine.createSpyObj(
153164 acquireTokenSilent : jasmine . anything ,
154165 getAuthCodeUrl : jasmine . anything ,
155166 acquireTokenByCode : jasmine . anything ,
156- getTokenCache : makeTokenCacheSpy ( )
167+ getTokenCache : makeTokenCacheSpy ( ) ,
168+ acquireTokenInteractive : jasmine . anything
157169 }
158170) ;
159171
0 commit comments