Browse Source

Merge pull request #6866 from abpframework/testing/6865

Fixed testing problems with modal, "New" button, and Actions dropdown
pull/6886/head
Bunyamin Coskuner 6 years ago
committed by GitHub
parent
commit
c89ab0901b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 22
      npm/ng-packs/packages/core/src/lib/models/utility.ts
  2. 14
      npm/ng-packs/packages/core/src/lib/services/permission.service.ts
  3. 4
      npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts
  4. 6
      npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts
  5. 1
      npm/ng-packs/packages/core/testing/src/lib/services/index.ts
  6. 34
      npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts
  7. 1
      npm/ng-packs/packages/core/testing/src/public-api.ts

22
npm/ng-packs/packages/core/src/lib/models/utility.ts

@ -1,13 +1,21 @@
/* tslint:disable:ban-types */
import { TemplateRef, Type } from '@angular/core'; import { TemplateRef, Type } from '@angular/core';
export type DeepPartial<T> = { export type DeepPartial<T> = Partible<T> extends never
[P in keyof T]?: T[P] extends Serializable ? DeepPartial<T[P]> : T[P]; ? T
}; : {
[K in keyof T]?: DeepPartial<T[K]>;
};
type Serializable = Record< type Partible<T> = T extends Primitive | Array<any>
string | number | symbol, ? never
string | number | boolean | Record<string | number | symbol, any> : {
>; [K in keyof T]: T[K] extends Function ? never : T[K];
} extends T
? T
: never;
export type Primitive = undefined | null | boolean | string | number | bigint | symbol;
export type InferredInstanceOf<T> = T extends Type<infer U> ? U : never; export type InferredInstanceOf<T> = T extends Type<infer U> ? U : never;
export type InferredContextOf<T> = T extends TemplateRef<infer U> ? U : never; export type InferredContextOf<T> = T extends TemplateRef<infer U> ? U : never;

14
npm/ng-packs/packages/core/src/lib/services/permission.service.ts

@ -6,7 +6,7 @@ import { ConfigStateService } from './config-state.service';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class PermissionService { export class PermissionService {
constructor(private configState: ConfigStateService) {} constructor(protected configState: ConfigStateService) {}
getGrantedPolicy$(key: string) { getGrantedPolicy$(key: string) {
return this.getStream().pipe( return this.getStream().pipe(
@ -19,7 +19,7 @@ export class PermissionService {
return this.isPolicyGranted(key, policies); return this.isPolicyGranted(key, policies);
} }
private isPolicyGranted(key: string, grantedPolicies: Record<string, boolean>) { protected isPolicyGranted(key: string, grantedPolicies: Record<string, boolean>) {
if (!key) return true; if (!key) return true;
const orRegexp = /\|\|/g; const orRegexp = /\|\|/g;
@ -43,19 +43,19 @@ export class PermissionService {
return this.getPolicy(key, grantedPolicies); return this.getPolicy(key, grantedPolicies);
} }
private getStream() { protected getStream() {
return this.configState.getAll$().pipe(map(this.mapToPolicies)); return this.configState.getAll$().pipe(map(this.mapToPolicies));
} }
private getSnapshot() { protected getSnapshot() {
return this.mapToPolicies(this.configState.getAll()); return this.mapToPolicies(this.configState.getAll());
} }
private mapToPolicies(applicationConfiguration: ApplicationConfigurationDto) { protected mapToPolicies(applicationConfiguration: ApplicationConfigurationDto) {
return snq(() => applicationConfiguration.auth.grantedPolicies); return snq(() => applicationConfiguration.auth.grantedPolicies, {});
} }
private getPolicy(key: string, grantedPolicies: Record<string, boolean>) { protected getPolicy(key: string, grantedPolicies: Record<string, boolean>) {
return snq(() => grantedPolicies[key], false); return snq(() => grantedPolicies[key], false);
} }
} }

4
npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts

@ -33,7 +33,7 @@ export class InternalStore<State> {
} }
this.state$.next(patchedState); this.state$.next(patchedState);
this.update$.next(patchedState); this.update$.next(patchedState as DeepPartial<State>);
} }
deepPatch(state: DeepPartial<State>) { deepPatch(state: DeepPartial<State>) {
@ -43,7 +43,7 @@ export class InternalStore<State> {
set(state: State) { set(state: State) {
this.state$.next(state); this.state$.next(state);
this.update$.next(state); this.update$.next(state as DeepPartial<State>);
} }
reset() { reset() {

6
npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts

@ -4,6 +4,7 @@ import {
coreOptionsFactory, coreOptionsFactory,
CORE_OPTIONS, CORE_OPTIONS,
LIST_QUERY_DEBOUNCE_TIME, LIST_QUERY_DEBOUNCE_TIME,
PermissionService,
RestService, RestService,
} from '@abp/ng.core'; } from '@abp/ng.core';
import { APP_BASE_HREF } from '@angular/common'; import { APP_BASE_HREF } from '@angular/common';
@ -11,6 +12,7 @@ import { ModuleWithProviders, NgModule } from '@angular/core';
import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { provideRoutes } from '@angular/router'; import { provideRoutes } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing'; import { RouterTestingModule } from '@angular/router/testing';
import { MockPermissionService } from './services/mock-permission.service';
import { MockRestService } from './services/mock-rest.service'; import { MockRestService } from './services/mock-rest.service';
/** /**
@ -42,6 +44,10 @@ export class CoreTestingModule {
provide: LIST_QUERY_DEBOUNCE_TIME, provide: LIST_QUERY_DEBOUNCE_TIME,
useValue: listQueryDebounceTime, useValue: listQueryDebounceTime,
}, },
{
provide: PermissionService,
useClass: MockPermissionService,
},
{ {
provide: RestService, provide: RestService,
useClass: MockRestService, useClass: MockRestService,

1
npm/ng-packs/packages/core/testing/src/lib/services/index.ts

@ -1 +1,2 @@
export * from './mock-permission.service';
export * from './mock-rest.service'; export * from './mock-rest.service';

34
npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts

@ -0,0 +1,34 @@
import { ConfigStateService, PermissionService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class MockPermissionService extends PermissionService {
constructor(protected configState: ConfigStateService) {
super(configState);
this.grantAllPolicies();
}
grantAllPolicies() {
const grantedPolicies = new Proxy(
{},
{
get() {
return true;
},
},
);
this.configState['store'].deepPatch({ auth: { grantedPolicies } });
}
grantPolicies(keys: string[]) {
const grantedPolicies = keys.reduce((policies, key) => {
policies[key] = true;
return policies;
}, {});
this.configState['store'].deepPatch({ auth: { grantedPolicies } });
}
}

1
npm/ng-packs/packages/core/testing/src/public-api.ts

@ -1 +1,2 @@
export * from './lib/core-testing.module'; export * from './lib/core-testing.module';
export * from './lib/services';

Loading…
Cancel
Save