@ -1,14 +1,15 @@
import { Component } from '@angular/core' ;
import { createComponentFactory , Spectator } from '@ngneat/spectator/jest' ;
import clone from 'just-clone' ;
import { BehaviorSubject } from 'rxjs' ;
import { AbpTenantService } from '../proxy/pages/abp/multi-tenancy/abp-tenant.service' ;
import { of } from 'rxjs' ;
import {
CurrentTenantDto ,
FindTenantResultDto ,
} from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models' ;
import { EnvironmentService , MultiTenancyService } from '../services' ;
import { parseTenantFromUrl } from '../utils' ;
import { TENANT_KEY } from '../tokens' ;
const environment = {
production : false ,
@ -45,6 +46,8 @@ const setHref = url => {
} ) ;
} ;
const testTenantKey = 'TEST_TENANT_KEY' ;
@Component ( {
selector : 'abp-dummy' ,
template : '' ,
@ -56,7 +59,7 @@ describe('MultiTenancyUtils', () => {
const createComponent = createComponentFactory ( {
component : DummyComponent ,
mocks : [ EnvironmentService , MultiTenancyService ] ,
providers : [ { provide : AbpTenantService, useValue : { findTenantByName : ( ) = > { } } } ] ,
providers : [ { provide : TENANT_KEY, useValue : testTenantKey } ] ,
} ) ;
beforeEach ( ( ) = > ( spectator = createComponent ( ) ) ) ;
@ -65,27 +68,30 @@ describe('MultiTenancyUtils', () => {
test ( 'should get the tenancyName, set replaced environment and call the findTenantByName method of AbpTenantService' , async ( ) = > {
const environmentService = spectator . inject ( EnvironmentService ) ;
const multiTenancyService = spectator . inject ( MultiTenancyService ) ;
const abpTenantService = spectator . inject ( AbpTenantService ) ;
const findTenantByNameSpy = jest . spyOn ( abpTenantService , 'findTenantByName' ) ;
const setTenantByName = jest . spyOn ( multiTenancyService , 'setTenantByName' ) ;
const getEnvironmentSpy = jest . spyOn ( environmentService , 'getEnvironment' ) ;
const setStateSpy = jest . spyOn ( environmentService , 'setState' ) ;
getEnvironmentSpy . mockReturnValue ( clone ( environment ) ) ;
const testTenant : FindTenantResultDto = {
name : 'abp' ,
tenantId : '1' ,
isActive : true ,
success : true ,
} ;
setHref ( 'https://abp.volosoft.com/' ) ;
findTenantByNameSpy . mockReturnValue (
new BehaviorSubject ( { name : 'abp' , tenantId : '1' , success : true } as FindTenantResultDto ) ,
) ;
setTenantByName . mockReturnValue ( of ( testTenant ) ) ;
const mockInjector = {
get : arg = > {
if ( arg === EnvironmentService ) return environmentService ;
if ( arg === AbpTenantService ) return abpTenantService ;
if ( arg === MultiTenancyService ) return multiTenancyService ;
} ,
} ;
parseTenantFromUrl ( mockInjector ) ;
await parseTenantFromUrl ( mockInjector ) ;
const replacedEnv = {
. . . environment ,
@ -106,10 +112,10 @@ describe('MultiTenancyUtils', () => {
} ;
expect ( setStateSpy ) . toHaveBeenCalledWith ( replacedEnv ) ;
expect ( findTenantByNameSpy ) . toHaveBeenCalledWith ( 'abp' , { __tenant : '' } ) ;
expect ( multiTenancyService . domainTenant ) . toEqual ( {
id : '1' ,
name : 'abp' ,
id : testTenant.tenantId ,
name : testTenant.name ,
isAvailable : true ,
} as CurrentTenantDto ) ;
} ) ;
} ) ;