Browse Source

Merge pull request #17706 from abpframework/sinan/fix-test

Angular Unit Tests fix some of them
pull/17758/head
Masum ULU 3 years ago
committed by GitHub
parent
commit
7a4c83efba
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      npm/ng-packs/packages/core/src/lib/tests/content-projection.service.spec.ts
  2. 1
      npm/ng-packs/packages/core/src/lib/tests/dynamic-layout.component.spec.ts
  3. 6
      npm/ng-packs/packages/core/src/lib/tests/object-utils.spec.ts
  4. 4
      npm/ng-packs/packages/core/src/lib/tests/routes.service.spec.ts
  5. 19
      npm/ng-packs/packages/core/src/lib/tests/utils/mock-compare-function.ts
  6. 9
      npm/ng-packs/packages/oauth/src/lib/tests/api.interceptor.spec.ts
  7. 12
      npm/ng-packs/packages/oauth/src/lib/tests/auth.guard.spec.ts
  8. 2
      npm/ng-packs/packages/theme-shared/extensions/src/tests/entity-actions.spec.ts
  9. 4
      npm/ng-packs/packages/theme-shared/extensions/src/tests/entity-props.spec.ts
  10. 35
      npm/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts
  11. 6
      npm/ng-packs/packages/theme-shared/extensions/src/tests/form-props.spec.ts
  12. 11
      npm/ng-packs/packages/theme-shared/extensions/src/tests/localization.util.spec.ts
  13. 5
      npm/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts
  14. 5
      npm/ng-packs/packages/theme-shared/src/lib/tests/breadcrumb.component.spec.ts
  15. 1
      npm/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts
  16. 3
      npm/ng-packs/packages/theme-shared/src/lib/tests/error.component.spec.ts
  17. 1
      npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts

1
npm/ng-packs/packages/core/src/lib/tests/content-projection.service.spec.ts

@ -10,7 +10,6 @@ describe('ContentProjectionService', () => {
// createServiceFactory does not accept entryComponents directly
@NgModule({
declarations: [TestComponent],
entryComponents: [TestComponent],
})
class TestModule {}

1
npm/ng-packs/packages/core/src/lib/tests/dynamic-layout.component.spec.ts

@ -36,7 +36,6 @@ const LAYOUTS = [
@NgModule({
imports: [RouterModule],
declarations: [...LAYOUTS],
entryComponents: [...LAYOUTS],
})
class DummyLayoutModule {}

6
npm/ng-packs/packages/core/src/lib/tests/object-utils.spec.ts

@ -43,11 +43,9 @@ describe('DeepMerge', () => {
);
it('should correctly return when both inputs are objects with different fields', () => {
const target = { a: 1 };
const source = { b: 2 };
const expected = { a: 1, b: 2 };
expect(deepMerge(target, source)).toEqual(expected);
expect(deepMerge(source, target)).toEqual(expected);
expect(deepMerge({ a: 1 }, { b: 2 })).toEqual(expected);
expect(deepMerge({ b: 2 }, { a: 1 })).toEqual(expected);
});
it('should correctly return when both inputs are object with same fields but different values', () => {

4
npm/ng-packs/packages/core/src/lib/tests/routes.service.spec.ts

@ -3,14 +3,15 @@ import { take } from 'rxjs/operators';
import { RoutesService } from '../services/routes.service';
import { DummyInjector } from './utils/common.utils';
import { mockPermissionService } from './utils/permission-service.spec.utils';
import { mockCompareFunction } from './utils/mock-compare-function';
const updateStream$ = new Subject<void>();
export const mockRoutesService = (injectorPayload = {} as { [key: string]: any }) => {
const injector = new DummyInjector({
PermissionService: mockPermissionService(),
ConfigStateService: { createOnUpdateStream: () => updateStream$ },
OTHERS_GROUP: 'OthersGroup',
SORT_COMPARE_FUNC: mockCompareFunction,
...injectorPayload,
});
return new RoutesService(injector);
@ -50,7 +51,6 @@ describe('Routes Service', () => {
const flat = await lastValueFrom(service.flat$.pipe(take(1)));
const tree = await lastValueFrom(service.tree$.pipe(take(1)));
const visible = await lastValueFrom(service.visible$.pipe(take(1)));
expect(flat.length).toBe(5);
expect(flat[0].name).toBe('baz');
expect(flat[1].name).toBe('qux');

19
npm/ng-packs/packages/core/src/lib/tests/utils/mock-compare-function.ts

@ -0,0 +1,19 @@
import { ABP } from '@abp/ng.core';
export const mockCompareFunction = (a: ABP.Route, b: ABP.Route) => {
const aName = a.name;
const bName = b.name;
const aNumber = a.order;
const bNumber = b.order;
if (!Number.isInteger(aNumber)) return 1;
if (!Number.isInteger(bNumber)) return -1;
if (aNumber > bNumber) return 1
if (aNumber < bNumber) return -1
if ( aName > bName ) return 1;
if ( aName < bName ) return -1;
return 0
}

9
npm/ng-packs/packages/oauth/src/lib/tests/api.interceptor.spec.ts

@ -3,11 +3,12 @@ import { SpyObject } from '@ngneat/spectator';
import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest';
import { OAuthService } from 'angular-oauth2-oidc';
import { Subject, timer } from 'rxjs';
import { ApiInterceptor, HttpWaitService, SessionStateService, TENANT_KEY } from '@abp/ng.core';
import { HttpWaitService, SessionStateService, TENANT_KEY } from '@abp/ng.core';
import { OAuthApiInterceptor } from '../interceptors';
describe('ApiInterceptor', () => {
let spectator: SpectatorService<ApiInterceptor>;
let interceptor: ApiInterceptor;
let spectator: SpectatorService<OAuthApiInterceptor>;
let interceptor: OAuthApiInterceptor;
let oauthService: SpyObject<OAuthService>;
let sessionState: SpyObject<SessionStateService>;
let httpWaitService: SpyObject<HttpWaitService>;
@ -15,7 +16,7 @@ describe('ApiInterceptor', () => {
const testTenantKey = 'TEST_TENANT_KEY';
const createService = createServiceFactory({
service: ApiInterceptor,
service: OAuthApiInterceptor,
mocks: [OAuthService, SessionStateService],
providers: [{ provide: TENANT_KEY, useValue: testTenantKey }],
});

12
npm/ng-packs/packages/oauth/src/lib/tests/auth.guard.spec.ts

@ -1,11 +1,15 @@
import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest';
import { createServiceFactory, SpectatorService, createSpyObject } from '@ngneat/spectator/jest';
import { OAuthService } from 'angular-oauth2-oidc';
import { AbpOAuthGuard } from '../guards/oauth.guard';
import { AuthService } from '@abp/ng.core';
import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
describe('AuthGuard', () => {
let spectator: SpectatorService<AbpOAuthGuard>;
let guard: AbpOAuthGuard;
let guard : AbpOAuthGuard;
let route = createSpyObject<ActivatedRouteSnapshot>(ActivatedRouteSnapshot)
let state = createSpyObject<RouterStateSnapshot>(RouterStateSnapshot)
const createService = createServiceFactory({
service: AbpOAuthGuard,
mocks: [OAuthService, AuthService],
@ -18,7 +22,7 @@ describe('AuthGuard', () => {
it('should return true when user logged in', () => {
spectator.inject(OAuthService).hasValidAccessToken.andReturn(true);
expect(guard.canActivate()).toBe(true);
expect(guard.canActivate(route, state)).toBe(true);
});
it('should execute the navigateToLogin method of the authService', () => {
@ -26,7 +30,7 @@ describe('AuthGuard', () => {
spectator.inject(OAuthService).hasValidAccessToken.andReturn(false);
const navigateToLoginSpy = jest.spyOn(authService, 'navigateToLogin');
expect(guard.canActivate()).toBe(false);
expect(guard.canActivate(route, state)).toBe(false);
expect(navigateToLoginSpy).toHaveBeenCalled();
});
});

2
npm/ng-packs/packages/theme-shared/extensions/src/tests/entity-actions.spec.ts

@ -107,7 +107,7 @@ describe('EntityAction', () => {
expect(action.text).toBe(options.text);
expect(action.action).toBe(options.action);
expect(action.permission).toBeUndefined();
expect(action.permission).toBe('');
expect(action.visible(null)).toBe(true);
expect(action.icon).toBe('');
});

4
npm/ng-packs/packages/theme-shared/extensions/src/tests/entity-props.spec.ts

@ -111,13 +111,11 @@ describe('EntityProp', () => {
type: ePropType.String,
name: 'NAME',
};
const prop = new EntityProp(options);
expect(prop.type).toBe(options.type);
expect(prop.name).toBe(options.name);
expect(prop.displayName).toBe(options.name);
expect(prop.permission).toBeUndefined();
expect(prop.permission).toBe('');
expect(prop.visible()).toBe(true);
expect(prop.sortable).toBe(false);
expect(prop.columnWidth).toBeUndefined();

35
npm/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts

@ -1,4 +1,4 @@
import { ConfigStateService, LocalizationService } from '@abp/ng.core';
import { ConfigStateService, ExtensionEnumFieldDto, LocalizationService } from '@abp/ng.core';
import { BehaviorSubject, of } from 'rxjs';
import { take } from 'rxjs/operators';
import { PropData } from '../lib/models/props';
@ -11,10 +11,10 @@ const mockSessionState = {
onLanguageChange$: () => new BehaviorSubject('tr'),
} as any;
const fields = [
{ name: 'foo', value: 1 },
{ name: 'bar', value: 2 },
{ name: 'baz', value: 3 },
const fields: ExtensionEnumFieldDto[] = [
{ name: 'foo', value: {number: 1} },
{ name: 'bar', value: {number: 2} },
{ name: 'baz', value: {number: 3} },
];
class MockPropData<R = any> extends PropData<R> {
@ -42,17 +42,13 @@ describe('Enum Utils', () => {
describe('#createEnum', () => {
const enumFromFields = createEnum(fields);
test.each`
key | expected
${'foo'} | ${1}
${'bar'} | ${2}
${'baz'} | ${3}
${1} | ${'foo'}
${2} | ${'bar'}
${3} | ${'baz'}
`('should create an enum that returns $expected when $key is accessed', ({ key, expected }) => {
expect(enumFromFields[key]).toBe(expected);
});
test.each([
{name:'foo', value: 'number', expected: 1},
{name:'bar', value: 'number', expected: 2},
{name:'baz', value: 'number', expected: 3}
])('should create an enum that returns $expected when $name $value is accessed',({name, value, expected})=>{
expect(enumFromFields[name][value]).toBe(expected);
})
});
describe('#createEnumValueResolver', () => {
@ -75,7 +71,7 @@ describe('Enum Utils', () => {
'EnumProp',
);
const propData = new MockPropData({
extraProperties: { EnumProp: value },
extraProperties: { EnumProp: value },
});
propData.getInjected = () => service as any;
@ -111,8 +107,9 @@ describe('Enum Utils', () => {
function createMockLocalizationService() {
const fakeAppConfigService = { get: () => of({ localization: mockL10n }) } as any;
const configState = new ConfigStateService(fakeAppConfigService);
const fakeLocalizationService = { get: () => of({ localization: mockL10n }) } as any;
const configState = new ConfigStateService(fakeAppConfigService, fakeLocalizationService, false);
configState.refreshAppState();
return new LocalizationService(mockSessionState, null, null, configState);
}
}

6
npm/ng-packs/packages/theme-shared/extensions/src/tests/form-props.spec.ts

@ -127,14 +127,14 @@ describe('FormProp', () => {
expect(prop.type).toBe(options.type);
expect(prop.name).toBe(options.name);
expect(prop.displayName).toBe(options.name);
expect(prop.permission).toBeUndefined();
expect(prop.permission).toBe('');
expect(prop.visible()).toBe(true);
expect(prop.asyncValidators(null)).toEqual([]);
expect(prop.validators(null)).toEqual([]);
expect(prop.disabled()).toBe(false);
expect(prop.readonly()).toBe(false);
expect(prop.autocomplete).toBe('off');
expect(prop.defaultValue).toBeNull();
expect(prop.defaultValue).toBe('');
expect(prop.options).toBeUndefined();
expect(prop.id).toBe(options.name);
});
@ -144,7 +144,7 @@ describe('FormProp', () => {
${0} | ${0}
${''} | ${''}
${false} | ${false}
${undefined} | ${null}
${undefined} | ${''}
`(
'should set defaultValue as $expected when $defaultValue is given',
({ defaultValue, expected }) => {

11
npm/ng-packs/packages/theme-shared/extensions/src/tests/localization.util.spec.ts

@ -3,17 +3,20 @@ import { createDisplayNameLocalizationPipeKeyGenerator } from '../lib/utils/loca
describe('Localization Utils', () => {
describe('#createDisplayNameLocalizationPipeKeyGenerator', () => {
const generateDisplayName = createDisplayNameLocalizationPipeKeyGenerator({
values: {
const localization: ApplicationLocalizationConfigurationDto = {
values:{
Foo: { Bar: 'Bar', 'DisplayName:Bar': 'Bar' },
Default: { Bar: 'Bar', 'DisplayName:Bar': 'Bar' },
},
defaultResourceName: 'Default',
currentCulture: null,
resources: {},
languages: [],
languageFilesMap: null,
languagesMap: null,
} as ApplicationLocalizationConfigurationDto);
currentCulture: null
}
const generateDisplayName = createDisplayNameLocalizationPipeKeyGenerator(localization);
test.each`
displayName | fallback | expected

5
npm/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts

@ -11,7 +11,8 @@ import {
} from '../lib/utils/state.util';
const fakeAppConfigService = { get: () => of(createMockState()) } as any;
const configState = new ConfigStateService(fakeAppConfigService);
const fakeLocalizationService = { get: () => of(createMockState()) } as any;
const configState = new ConfigStateService(fakeAppConfigService,fakeLocalizationService,false);
configState.refreshAppState();
describe('State Utils', () => {
@ -30,7 +31,7 @@ describe('State Utils', () => {
});
it('should not emit when object extensions do not exist', done => {
const emptyConfigState = new ConfigStateService(null);
const emptyConfigState = new ConfigStateService(null,null,false);
const emit = jest.fn();
getObjectExtensionEntitiesFromStore(emptyConfigState, 'Identity').subscribe(emit);

5
npm/ng-packs/packages/theme-shared/src/lib/tests/breadcrumb.component.spec.ts

@ -5,7 +5,7 @@ import {
RouterOutletComponent,
RoutesService,
} from '@abp/ng.core';
import { HttpClient } from '@angular/common/http';
import { HttpClient, HttpClientModule } from '@angular/common/http';
import { RouterModule } from '@angular/router';
import { createRoutingFactory, SpectatorRouting } from '@ngneat/spectator/jest';
// eslint-disable-next-line @nx/enforce-module-boundaries
@ -34,7 +34,7 @@ describe('BreadcrumbComponent', () => {
},
],
declarations: [LocalizationPipe, BreadcrumbComponent, BreadcrumbItemsComponent],
imports: [RouterModule],
imports: [RouterModule,HttpClientModule],
routes: [
{
path: '',
@ -62,7 +62,6 @@ describe('BreadcrumbComponent', () => {
routes.add(mockRoutes);
await spectator.router.navigateByUrl('/identity/users');
spectator.detectChanges();
const elements = spectator.queryAll('li');
expect(elements).toHaveLength(3);
expect(elements[1]).toHaveText('Identity');

1
npm/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts

@ -10,7 +10,6 @@ import { CONFIRMATION_ICONS, DEFAULT_CONFIRMATION_ICONS } from '../tokens/confir
@NgModule({
exports: [ConfirmationComponent],
entryComponents: [ConfirmationComponent],
declarations: [ConfirmationComponent],
imports: [CoreTestingModule.withConfig()],
providers: [{ provide: CONFIRMATION_ICONS, useValue: DEFAULT_CONFIRMATION_ICONS }],

3
npm/ng-packs/packages/theme-shared/src/lib/tests/error.component.spec.ts

@ -1,5 +1,5 @@
import { CORE_OPTIONS, LocalizationPipe } from '@abp/ng.core';
import { HttpClient } from '@angular/common/http';
import { HttpClient, HttpClientModule } from '@angular/common/http';
import { ElementRef, Renderer2 } from '@angular/core';
import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest';
import { Subject } from 'rxjs';
@ -19,6 +19,7 @@ describe('ErrorComponent', () => {
useValue: { nativeElement: document.createElement('div') },
},
],
imports:[HttpClientModule]
});
beforeEach(() => {

1
npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts

@ -8,7 +8,6 @@ import { ToasterService } from '../services/toaster.service';
@NgModule({
exports: [ToastContainerComponent],
entryComponents: [ToastContainerComponent],
declarations: [ToastContainerComponent, ToastComponent],
imports: [CoreTestingModule.withConfig()],
})

Loading…
Cancel
Save