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';
export type DeepPartial<T> = {
[P in keyof T]?: T[P] extends Serializable ? DeepPartial<T[P]> : T[P];
};
export type DeepPartial<T> = Partible<T> extends never
? T
: {
[K in keyof T]?: DeepPartial<T[K]>;
};
type Serializable = Record<
string | number | symbol,
string | number | boolean | Record<string | number | symbol, any>
>;
type Partible<T> = T extends Primitive | Array<any>
? never
: {
[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 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' })
export class PermissionService {
constructor(private configState: ConfigStateService) {}
constructor(protected configState: ConfigStateService) {}
getGrantedPolicy$(key: string) {
return this.getStream().pipe(
@ -19,7 +19,7 @@ export class PermissionService {
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;
const orRegexp = /\|\|/g;
@ -43,19 +43,19 @@ export class PermissionService {
return this.getPolicy(key, grantedPolicies);
}
private getStream() {
protected getStream() {
return this.configState.getAll$().pipe(map(this.mapToPolicies));
}
private getSnapshot() {
protected getSnapshot() {
return this.mapToPolicies(this.configState.getAll());
}
private mapToPolicies(applicationConfiguration: ApplicationConfigurationDto) {
return snq(() => applicationConfiguration.auth.grantedPolicies);
protected mapToPolicies(applicationConfiguration: ApplicationConfigurationDto) {
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);
}
}

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

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

@ -4,6 +4,7 @@ import {
coreOptionsFactory,
CORE_OPTIONS,
LIST_QUERY_DEBOUNCE_TIME,
PermissionService,
RestService,
} from '@abp/ng.core';
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 { provideRoutes } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { MockPermissionService } from './services/mock-permission.service';
import { MockRestService } from './services/mock-rest.service';
/**
@ -42,6 +44,10 @@ export class CoreTestingModule {
provide: LIST_QUERY_DEBOUNCE_TIME,
useValue: listQueryDebounceTime,
},
{
provide: PermissionService,
useClass: MockPermissionService,
},
{
provide: RestService,
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';

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/services';

Loading…
Cancel
Save