mirror of https://github.com/abpframework/abp.git
1 changed files with 117 additions and 0 deletions
@ -0,0 +1,117 @@ |
|||||
|
import { Component, Injector } from '@angular/core'; |
||||
|
import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; |
||||
|
import { Store } from '@ngxs/store'; |
||||
|
import { MultiTenancyService } from '../services/multi-tenancy.service'; |
||||
|
import { parseTenantFromUrl, getCurrentTenancyNameOrNull } from '../utils'; |
||||
|
import * as multiTenancyUtils from '../utils/multi-tenancy-utils'; |
||||
|
import { of, Subject, BehaviorSubject } from 'rxjs'; |
||||
|
import { FindTenantResultDto } from '../models/find-tenant-result-dto'; |
||||
|
import clone from 'just-clone'; |
||||
|
|
||||
|
const environment = { |
||||
|
production: false, |
||||
|
hmr: false, |
||||
|
application: { |
||||
|
baseUrl: 'https://{TENANCY_NAME}.volosoft.com', |
||||
|
name: 'MyProjectName', |
||||
|
logoUrl: '', |
||||
|
}, |
||||
|
oAuthConfig: { |
||||
|
issuer: 'https://{TENANCY_NAME}.api.volosoft.com', |
||||
|
clientId: 'MyProjectName_App', |
||||
|
dummyClientSecret: '1q2w3e*', |
||||
|
scope: 'MyProjectName', |
||||
|
oidc: false, |
||||
|
requireHttps: true, |
||||
|
}, |
||||
|
apis: { |
||||
|
default: { |
||||
|
url: 'https://{TENANCY_NAME}.api.volosoft.com', |
||||
|
}, |
||||
|
abp: { |
||||
|
url: 'https://api.volosoft.com/{TENANCY_NAME}', |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
|
||||
|
const setHref = url => { |
||||
|
global.window = Object.create(window); |
||||
|
delete window.location; |
||||
|
Object.defineProperty(window, 'location', { |
||||
|
value: { |
||||
|
href: url, |
||||
|
}, |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
@Component({ |
||||
|
selector: 'abp-dummy', |
||||
|
template: '', |
||||
|
}) |
||||
|
export class DummyComponent {} |
||||
|
|
||||
|
describe('MultiTenancyUtils', () => { |
||||
|
let spectator: Spectator<DummyComponent>; |
||||
|
const createComponent = createComponentFactory({ |
||||
|
component: DummyComponent, |
||||
|
mocks: [Store, MultiTenancyService], |
||||
|
}); |
||||
|
|
||||
|
beforeEach(() => (spectator = createComponent())); |
||||
|
|
||||
|
describe('#getCurrentTenancyNameOrNull', () => { |
||||
|
test('should get tenancy name from href', async () => { |
||||
|
setHref('https://abp.volosoft.com/'); |
||||
|
expect(getCurrentTenancyNameOrNull('https://{TENANCY_NAME}.volosoft.com')).toBe('abp'); |
||||
|
|
||||
|
setHref('https://volosoft.com/'); |
||||
|
expect(getCurrentTenancyNameOrNull('https://{TENANCY_NAME}.com')).toBe('volosoft'); |
||||
|
|
||||
|
setHref('https://volosoft.com/abp/'); |
||||
|
expect(getCurrentTenancyNameOrNull('https://volosoft.com/{TENANCY_NAME}')).toBe('abp'); |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
describe('#parseTenantFromUrl', () => { |
||||
|
test('should get the tenancyName, set replaced environment and call the findTenantByName method of MultiTenancyService', async () => { |
||||
|
const injector = spectator.inject(Injector); |
||||
|
const injectorSpy = jest.spyOn(injector, 'get'); |
||||
|
const store = spectator.inject(Store); |
||||
|
const selectSnapshotSpy = jest.spyOn(store, 'selectSnapshot'); |
||||
|
const dispatchSpy = jest.spyOn(store, 'dispatch'); |
||||
|
const multiTenancyService = spectator.inject(MultiTenancyService); |
||||
|
const findTenantByNameSpy = jest.spyOn(multiTenancyService, 'findTenantByName'); |
||||
|
|
||||
|
injectorSpy.mockReturnValueOnce(spectator.inject(Store)); |
||||
|
injectorSpy.mockReturnValueOnce(multiTenancyService); |
||||
|
selectSnapshotSpy.mockReturnValue(clone(environment)); |
||||
|
|
||||
|
setHref('https://abp.volosoft.com/'); |
||||
|
|
||||
|
dispatchSpy.mockReturnValue(new BehaviorSubject(true)); |
||||
|
findTenantByNameSpy.mockReturnValue( |
||||
|
new BehaviorSubject({ name: 'abp', tenantId: '1', success: true } as FindTenantResultDto), |
||||
|
); |
||||
|
|
||||
|
parseTenantFromUrl(injector); |
||||
|
|
||||
|
const replacedEnv = { |
||||
|
...environment, |
||||
|
application: { ...environment.application, baseUrl: 'https://abp.volosoft.com' }, |
||||
|
oAuthConfig: { ...environment.oAuthConfig, issuer: 'https://abp.api.volosoft.com' }, |
||||
|
apis: { |
||||
|
default: { |
||||
|
url: 'https://abp.api.volosoft.com', |
||||
|
}, |
||||
|
abp: { |
||||
|
url: 'https://api.volosoft.com/abp', |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
|
||||
|
expect(dispatchSpy).toHaveBeenCalledWith({ environment: replacedEnv }); |
||||
|
expect(findTenantByNameSpy).toHaveBeenCalledWith('abp', { __tenant: '' }); |
||||
|
expect(multiTenancyService.domainTenant).toEqual({ id: '1', name: 'abp' }); |
||||
|
}); |
||||
|
}); |
||||
|
}); |
||||
Loading…
Reference in new issue