@@ -44,6 +44,11 @@ import { DeepLinkService } from 'src/app/core/services/deep-link.service';
4444import { platformExpenseData } from 'src/app/core/mock-data/platform/v1/expense.data' ;
4545import { transformedExpenseData } from 'src/app/core/mock-data/transformed-expense.data' ;
4646import { LaunchDarklyService } from 'src/app/core/services/launch-darkly.service' ;
47+ import { OrgSettingsService } from 'src/app/core/services/org-settings.service' ;
48+ import { orgSettingsCardsDisabled , orgSettingsData } from 'src/app/core/test-data/org-settings.service.spec.data' ;
49+ import { SpenderOnboardingService } from 'src/app/core/services/spender-onboarding.service' ;
50+ import { onboardingStatusData } from 'src/app/core/mock-data/onboarding-status.data' ;
51+ import { OnboardingState } from 'src/app/core/models/onboarding-state.enum' ;
4752
4853const roles = [ 'OWNER' , 'USER' , 'FYLER' ] ;
4954const email = '[email protected] ' ; @@ -73,6 +78,8 @@ describe('SwitchOrgPage', () => {
7378 let transactionService : jasmine . SpyObj < TransactionService > ;
7479 let expensesService : jasmine . SpyObj < ExpensesService > ;
7580 let deepLinkService : jasmine . SpyObj < DeepLinkService > ;
81+ let orgSettingsService : jasmine . SpyObj < OrgSettingsService > ;
82+ let spenderOnboardingService : jasmine . SpyObj < SpenderOnboardingService > ;
7683
7784 beforeEach ( waitForAsync ( ( ) => {
7885 const platformSpy = jasmine . createSpyObj ( 'Platform' , [ 'is' ] ) ;
@@ -110,6 +117,10 @@ describe('SwitchOrgPage', () => {
110117 const expensesServiceSpy = jasmine . createSpyObj ( 'ExpensesService' , [ 'getExpenseById' ] ) ;
111118 const deepLinkServiceSpy = jasmine . createSpyObj ( 'DeepLinkService' , [ 'getExpenseRoute' ] ) ;
112119 const ldSpy = jasmine . createSpyObj ( 'LaunchDarklyService' , [ 'initializeUser' ] ) ;
120+ const orgSettingsServiceSpy = jasmine . createSpyObj ( 'OrgSettingsService' , [ 'get' ] ) ;
121+ const spenderOnboardingServiceSpy = jasmine . createSpyObj ( 'SpenderOnboardingService' , [
122+ 'checkForRedirectionToOnboarding' ,
123+ ] ) ;
113124
114125 TestBed . configureTestingModule ( {
115126 declarations : [ SwitchOrgPage , ActiveOrgCardComponent , OrgCardComponent , FyZeroStateComponent ] ,
@@ -150,6 +161,14 @@ describe('SwitchOrgPage', () => {
150161 provide : LoaderService ,
151162 useValue : loaderServiceSpy ,
152163 } ,
164+ {
165+ provide : OrgSettingsService ,
166+ useValue : orgSettingsServiceSpy ,
167+ } ,
168+ {
169+ provide : SpenderOnboardingService ,
170+ useValue : spenderOnboardingServiceSpy ,
171+ } ,
153172 {
154173 provide : UserService ,
155174 useValue : userServiceSpy ,
@@ -256,11 +275,15 @@ describe('SwitchOrgPage', () => {
256275 deepLinkService = TestBed . inject ( DeepLinkService ) as jasmine . SpyObj < DeepLinkService > ;
257276 transactionService = TestBed . inject ( TransactionService ) as jasmine . SpyObj < TransactionService > ;
258277 expensesService = TestBed . inject ( ExpensesService ) as jasmine . SpyObj < ExpensesService > ;
278+ spenderOnboardingService = TestBed . inject ( SpenderOnboardingService ) as jasmine . SpyObj < SpenderOnboardingService > ;
279+ orgSettingsService = TestBed . inject ( OrgSettingsService ) as jasmine . SpyObj < OrgSettingsService > ;
259280
260281 component . searchRef = fixture . debugElement . query ( By . css ( '#search' ) ) ;
261282 component . searchOrgsInput = fixture . debugElement . query ( By . css ( '.smartlook-show' ) ) ;
262283 component . contentRef = fixture . debugElement . query ( By . css ( '.switch-org__content-container__content-block' ) ) ;
263284 fixture . detectChanges ( ) ;
285+ spenderOnboardingService . checkForRedirectionToOnboarding . and . returnValue ( of ( false ) ) ;
286+ orgSettingsService . get . and . returnValue ( of ( orgSettingsData ) ) ;
264287 } ) ) ;
265288
266289 it ( 'should create' , ( ) => {
@@ -548,6 +571,14 @@ describe('SwitchOrgPage', () => {
548571 } ) ) ;
549572 } ) ;
550573
574+ it ( 'navigateToDashboard(): should navigate to spender onboarding when onboarding status is not complete' , fakeAsync ( ( ) => {
575+ spenderOnboardingService . checkForRedirectionToOnboarding . and . returnValue ( of ( true ) ) ;
576+ orgSettingsService . get . and . returnValue ( of ( orgSettingsData ) ) ;
577+ component . navigateToDashboard ( ) ;
578+ tick ( ) ;
579+ expect ( router . navigate ) . toHaveBeenCalledOnceWith ( [ '/' , 'enterprise' , 'spender_onboarding' ] ) ;
580+ } ) ) ;
581+
551582 describe ( 'navigateToSetupPage():' , ( ) => {
552583 it ( 'should navigate to setup page if org the roles has OWNER' , ( ) => {
553584 component . navigateToSetupPage ( [ 'OWNER' ] ) ;
@@ -572,7 +603,12 @@ describe('SwitchOrgPage', () => {
572603 . pipe (
573604 finalize ( ( ) => {
574605 expect ( loaderService . hideLoader ) . toHaveBeenCalledTimes ( 1 ) ;
575- expect ( router . navigate ) . toHaveBeenCalledOnceWith ( [ '/' , 'enterprise' , 'my_dashboard' ] ) ;
606+ expect ( router . navigate ) . toHaveBeenCalledOnceWith ( [
607+ '/' ,
608+ 'enterprise' ,
609+ 'my_dashboard' ,
610+ { openSMSOptInDialog : undefined } ,
611+ ] ) ;
576612 } )
577613 )
578614 . subscribe ( ( res ) => {
@@ -642,16 +678,38 @@ describe('SwitchOrgPage', () => {
642678 } ) ;
643679
644680 describe ( 'navigateBasedOnUserStatus(): ' , ( ) => {
645- it ( 'should navigate to dashboard if status is active' , ( done ) => {
681+ it ( 'should navigate to dashboard if status is active' , fakeAsync ( ( ) => {
646682 const config = {
647683 isPendingDetails : false ,
648684 roles,
649685 eou : apiEouRes ,
650686 } ;
687+ orgSettingsService . get . and . returnValue ( of ( orgSettingsData ) ) ;
688+ spenderOnboardingService . checkForRedirectionToOnboarding . and . returnValue ( of ( false ) ) ;
689+ tick ( ) ;
690+ component . navigateBasedOnUserStatus ( config ) . subscribe ( ( res ) => {
691+ expect ( res ) . toBeNull ( ) ;
692+ expect ( router . navigate ) . toHaveBeenCalledOnceWith ( [
693+ '/' ,
694+ 'enterprise' ,
695+ 'my_dashboard' ,
696+ { openSMSOptInDialog : undefined } ,
697+ ] ) ;
698+ expect ( spenderOnboardingService . checkForRedirectionToOnboarding ) . toHaveBeenCalledTimes ( 1 ) ;
699+ } ) ;
700+ } ) ) ;
651701
702+ it ( 'should navigate to spender onboarding if status not COMPLETE' , ( done ) => {
703+ const config = {
704+ isPendingDetails : false ,
705+ roles,
706+ eou : apiEouRes ,
707+ } ;
708+ orgSettingsService . get . and . returnValue ( of ( orgSettingsData ) ) ;
709+ spenderOnboardingService . checkForRedirectionToOnboarding . and . returnValue ( of ( true ) ) ;
652710 component . navigateBasedOnUserStatus ( config ) . subscribe ( ( res ) => {
653711 expect ( res ) . toBeNull ( ) ;
654- expect ( router . navigate ) . toHaveBeenCalledOnceWith ( [ '/' , 'enterprise' , 'my_dashboard ' ] ) ;
712+ expect ( router . navigate ) . toHaveBeenCalledOnceWith ( [ '/' , 'enterprise' , 'spender_onboarding ' ] ) ;
655713 done ( ) ;
656714 } ) ;
657715 } ) ;
@@ -670,6 +728,26 @@ describe('SwitchOrgPage', () => {
670728 } ) ;
671729 } ) ;
672730
731+ it ( 'should navigate to dashboard when no enrollment settings are enabled' , ( done ) => {
732+ const config = {
733+ isPendingDetails : false ,
734+ roles,
735+ eou : apiEouRes ,
736+ } ;
737+ orgSettingsService . get . and . returnValue ( of ( orgSettingsCardsDisabled ) ) ;
738+ spenderOnboardingService . checkForRedirectionToOnboarding . and . returnValue ( of ( false ) ) ;
739+ component . navigateBasedOnUserStatus ( config ) . subscribe ( ( res ) => {
740+ expect ( res ) . toBeNull ( ) ;
741+ expect ( router . navigate ) . toHaveBeenCalledWith ( [
742+ '/' ,
743+ 'enterprise' ,
744+ 'my_dashboard' ,
745+ { openSMSOptInDialog : undefined } ,
746+ ] ) ;
747+ done ( ) ;
748+ } ) ;
749+ } ) ;
750+
673751 it ( 'should handle flow if details are pending' , ( done ) => {
674752 spyOn ( component , 'handlePendingDetails' ) . and . returnValue ( of ( apiEouRes ) ) ;
675753 const config = {
0 commit comments