@@ -20,6 +20,8 @@ import {validateSession} from './session/validate.js'
2020import { applicationId } from './session/identity.js'
2121import { pollForDeviceAuthorization , requestDeviceAuthorization } from './session/device-authorization.js'
2222import { getCurrentSessionId } from './conf-store.js'
23+ import { getIdentityClient } from './clients/identity/instance.js'
24+ import { IdentityMockClient } from './clients/identity/identity-mock-client.js'
2325import * as fqdnModule from '../../public/node/context/fqdn.js'
2426import { themeToken } from '../../public/node/context/local.js'
2527import { partnersRequest } from '../../public/node/api/partners.js'
@@ -31,7 +33,7 @@ import {vi, describe, expect, test, beforeEach} from 'vitest'
3133
3234const futureDate = new Date ( 2022 , 1 , 1 , 11 )
3335
34- const userId = '1234-5678 '
36+ const userId = '08978734-325e-44ce-bc65-34823a8d5180 '
3537
3638const defaultApplications : OAuthApplications = {
3739 adminApi : { storeFqdn : 'mystore' , scopes : [ ] } ,
@@ -105,6 +107,8 @@ const invalidSessions: Sessions = {
105107 } ,
106108}
107109
110+ const mockIdentityClient = new IdentityMockClient ( )
111+
108112vi . mock ( '../../public/node/context/local.js' )
109113vi . mock ( './session/identity' )
110114vi . mock ( './session/authorize' )
@@ -119,6 +123,7 @@ vi.mock('../../public/node/environment.js')
119123vi . mock ( './session/device-authorization' )
120124vi . mock ( './conf-store' )
121125vi . mock ( '../../public/node/system.js' )
126+ vi . mock ( './clients/identity/instance.js' )
122127
123128beforeEach ( ( ) => {
124129 vi . spyOn ( fqdnModule , 'identityFqdn' ) . mockResolvedValue ( fqdn )
@@ -149,6 +154,11 @@ beforeEach(() => {
149154 email : 'user@example.com' ,
150155 } ,
151156 } )
157+
158+ vi . mocked ( getIdentityClient ) . mockImplementation ( ( ) => mockIdentityClient )
159+ vi . spyOn ( mockIdentityClient , 'refreshAccessToken' ) . mockResolvedValue ( validIdentityToken )
160+ vi . spyOn ( mockIdentityClient , 'requestAccessToken' ) . mockResolvedValue ( validIdentityToken )
161+ vi . spyOn ( mockIdentityClient , 'exchangeAccessForApplicationTokens' ) . mockResolvedValue ( appTokens )
152162} )
153163
154164describe ( 'ensureAuthenticated when previous session is invalid' , ( ) => {
@@ -172,7 +182,7 @@ describe('ensureAuthenticated when previous session is invalid', () => {
172182 expect ( storedSession [ fqdn ] ! [ userId ] ! . identity . alias ) . toBe ( 'user@example.com' )
173183
174184 // The userID is cached in memory and the secureStore is not accessed again
175- await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '1234-5678 ' )
185+ await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '08978734-325e-44ce-bc65-34823a8d5180 ' )
176186 await expect ( getLastSeenAuthMethod ( ) ) . resolves . toEqual ( 'device_auth' )
177187 expect ( fetchSessions ) . toHaveBeenCalledOnce ( )
178188 } )
@@ -223,7 +233,7 @@ The CLI is currently unable to prompt for reauthentication.`,
223233 expect ( refreshAccessToken ) . not . toBeCalled ( )
224234 expect ( storeSessions ) . toBeCalledWith ( expectedSessions )
225235 expect ( got ) . toEqual ( validTokens )
226- await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '1234-5678 ' )
236+ await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '08978734-325e-44ce-bc65-34823a8d5180 ' )
227237 await expect ( getLastSeenAuthMethod ( ) ) . resolves . toEqual ( 'device_auth' )
228238 expect ( fetchSessions ) . toHaveBeenCalledOnce ( )
229239 } )
@@ -290,7 +300,7 @@ The CLI is currently unable to prompt for reauthentication.`,
290300 expect ( storedSession [ fqdn ] ! [ userId ] ! . identity . alias ) . toBe ( 'user@example.com' )
291301
292302 expect ( got ) . toEqual ( validTokens )
293- await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '1234-5678 ' )
303+ await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '08978734-325e-44ce-bc65-34823a8d5180 ' )
294304 await expect ( getLastSeenAuthMethod ( ) ) . resolves . toEqual ( 'device_auth' )
295305 expect ( fetchSessions ) . toHaveBeenCalledOnce ( )
296306 } )
@@ -309,7 +319,7 @@ describe('when existing session is valid', () => {
309319 expect ( exchangeAccessForApplicationTokens ) . not . toBeCalled ( )
310320 expect ( refreshAccessToken ) . not . toBeCalled ( )
311321 expect ( got ) . toEqual ( validTokens )
312- await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '1234-5678 ' )
322+ await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '08978734-325e-44ce-bc65-34823a8d5180 ' )
313323 await expect ( getLastSeenAuthMethod ( ) ) . resolves . toEqual ( 'device_auth' )
314324 expect ( fetchSessions ) . toHaveBeenCalledOnce ( )
315325 } )
@@ -328,7 +338,7 @@ describe('when existing session is valid', () => {
328338 expect ( exchangeAccessForApplicationTokens ) . not . toBeCalled ( )
329339 expect ( refreshAccessToken ) . not . toBeCalled ( )
330340 expect ( got ) . toEqual ( expected )
331- await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '1234-5678 ' )
341+ await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '08978734-325e-44ce-bc65-34823a8d5180 ' )
332342 await expect ( getLastSeenAuthMethod ( ) ) . resolves . toEqual ( 'partners_token' )
333343 expect ( fetchSessions ) . toHaveBeenCalledOnce ( )
334344 } )
@@ -342,11 +352,11 @@ describe('when existing session is valid', () => {
342352 const got = await ensureAuthenticated ( defaultApplications , process . env , { forceRefresh : true } )
343353
344354 // Then
345- expect ( refreshAccessToken ) . toBeCalled ( )
355+ expect ( mockIdentityClient . refreshAccessToken ) . toBeCalled ( )
346356 expect ( exchangeAccessForApplicationTokens ) . toBeCalled ( )
347357 expect ( storeSessions ) . toBeCalledWith ( validSessions )
348358 expect ( got ) . toEqual ( validTokens )
349- await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '1234-5678 ' )
359+ await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '08978734-325e-44ce-bc65-34823a8d5180 ' )
350360 await expect ( getLastSeenAuthMethod ( ) ) . resolves . toEqual ( 'device_auth' )
351361 expect ( fetchSessions ) . toHaveBeenCalledOnce ( )
352362 } )
@@ -362,11 +372,11 @@ describe('when existing session is expired', () => {
362372 const got = await ensureAuthenticated ( defaultApplications )
363373
364374 // Then
365- expect ( refreshAccessToken ) . toBeCalled ( )
375+ expect ( mockIdentityClient . refreshAccessToken ) . toBeCalled ( )
366376 expect ( exchangeAccessForApplicationTokens ) . toBeCalled ( )
367377 expect ( storeSessions ) . toBeCalledWith ( validSessions )
368378 expect ( got ) . toEqual ( validTokens )
369- await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '1234-5678 ' )
379+ await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '08978734-325e-44ce-bc65-34823a8d5180 ' )
370380 await expect ( getLastSeenAuthMethod ( ) ) . resolves . toEqual ( 'device_auth' )
371381 expect ( fetchSessions ) . toHaveBeenCalledOnce ( )
372382 } )
@@ -377,13 +387,13 @@ describe('when existing session is expired', () => {
377387
378388 vi . mocked ( validateSession ) . mockResolvedValueOnce ( 'needs_refresh' )
379389 vi . mocked ( fetchSessions ) . mockResolvedValue ( validSessions )
380- vi . mocked ( refreshAccessToken ) . mockRejectedValueOnce ( tokenResponseError )
390+ vi . spyOn ( mockIdentityClient , ' refreshAccessToken' ) . mockRejectedValueOnce ( tokenResponseError )
381391
382392 // When
383393 const got = await ensureAuthenticated ( defaultApplications )
384394
385395 // Then
386- expect ( refreshAccessToken ) . toBeCalled ( )
396+ expect ( mockIdentityClient . refreshAccessToken ) . toBeCalled ( )
387397 expect ( exchangeAccessForApplicationTokens ) . toBeCalled ( )
388398 expect ( businessPlatformRequest ) . toHaveBeenCalled ( )
389399 expect ( storeSessions ) . toHaveBeenCalledOnce ( )
@@ -393,7 +403,7 @@ describe('when existing session is expired', () => {
393403 expect ( storedSession [ fqdn ] ! [ userId ] ! . identity . alias ) . toBe ( 'user@example.com' )
394404
395405 expect ( got ) . toEqual ( validTokens )
396- await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '1234-5678 ' )
406+ await expect ( getLastSeenUserIdAfterAuth ( ) ) . resolves . toBe ( '08978734-325e-44ce-bc65-34823a8d5180 ' )
397407 await expect ( getLastSeenAuthMethod ( ) ) . resolves . toEqual ( 'device_auth' )
398408 expect ( fetchSessions ) . toHaveBeenCalledOnce ( )
399409 } )
@@ -667,10 +677,11 @@ describe('ensureAuthenticated email fetch functionality', () => {
667677 const tokenResponseError = new InvalidGrantError ( )
668678 vi . mocked ( validateSession ) . mockResolvedValueOnce ( 'needs_refresh' )
669679 vi . mocked ( fetchSessions ) . mockResolvedValue ( validSessions )
670- vi . mocked ( refreshAccessToken ) . mockRejectedValueOnce ( tokenResponseError )
680+ vi . spyOn ( mockIdentityClient , 'refreshAccessToken' ) . mockRejectedValueOnce ( tokenResponseError )
681+ vi . spyOn ( mockIdentityClient , 'requestAccessToken' ) . mockResolvedValueOnce ( validIdentityToken )
671682 vi . mocked ( businessPlatformRequest ) . mockResolvedValueOnce ( {
672683 currentUserAccount : {
673- email : 'fallback@example .com' ,
684+ email : 'dev@shopify .com' ,
674685 } ,
675686 } )
676687
@@ -679,7 +690,7 @@ describe('ensureAuthenticated email fetch functionality', () => {
679690
680691 // Then
681692 const storedSession = vi . mocked ( storeSessions ) . mock . calls [ 0 ] ! [ 0 ]
682- expect ( storedSession [ fqdn ] ! [ userId ] ! . identity . alias ) . toBe ( 'fallback@example .com' )
693+ expect ( storedSession [ fqdn ] ! [ userId ] ! . identity . alias ) . toBe ( 'dev@shopify .com' )
683694 expect ( got ) . toEqual ( validTokens )
684695 } )
685696
0 commit comments