mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-07-31 17:38:28 +00:00
remove electron demo code (#453)
* remove electron demo code * remove unused property * cleanup tests * cleanup sidenav tests * cleanup trashcan tests * remove fdescribe
This commit is contained in:
8
package-lock.json
generated
8
package-lock.json
generated
@@ -467,14 +467,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-5.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-5.2.0.tgz",
|
||||||
"integrity": "sha1-L/+RapqjSTdYJncrNZ27ZLnl1iI="
|
"integrity": "sha1-L/+RapqjSTdYJncrNZ27ZLnl1iI="
|
||||||
},
|
},
|
||||||
"@ngstack/electron": {
|
|
||||||
"version": "0.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@ngstack/electron/-/electron-0.1.0.tgz",
|
|
||||||
"integrity": "sha512-uqBNDkeATuZQm1eVXjB3rok9zFLMaJzfNl1tVnlqMwfaGA9FIe90nquvIZnL/scHbno89weGGxg4JeHLgsRMLA==",
|
|
||||||
"requires": {
|
|
||||||
"tslib": "^1.7.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@ngtools/json-schema": {
|
"@ngtools/json-schema": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.2.0.tgz",
|
||||||
|
@@ -46,7 +46,6 @@
|
|||||||
"@ngrx/router-store": "^5.2.0",
|
"@ngrx/router-store": "^5.2.0",
|
||||||
"@ngrx/store": "^5.2.0",
|
"@ngrx/store": "^5.2.0",
|
||||||
"@ngrx/store-devtools": "^5.2.0",
|
"@ngrx/store-devtools": "^5.2.0",
|
||||||
"@ngstack/electron": "0.1.0",
|
|
||||||
"@ngx-translate/core": "9.1.1",
|
"@ngx-translate/core": "9.1.1",
|
||||||
"alfresco-js-api": "2.4.0-92eae7db59edeb63e2e0dc1e4c2e6b182ff46f2b",
|
"alfresco-js-api": "2.4.0-92eae7db59edeb63e2e0dc1e4c2e6b182ff46f2b",
|
||||||
"core-js": "2.5.3",
|
"core-js": "2.5.3",
|
||||||
|
@@ -23,12 +23,11 @@
|
|||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Component, OnInit, EventEmitter } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';
|
import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';
|
||||||
import {
|
import {
|
||||||
PageTitleService, AppConfigService, FileModel, UploadService,
|
PageTitleService, AppConfigService,
|
||||||
AuthenticationService, AlfrescoApiService } from '@alfresco/adf-core';
|
AuthenticationService, AlfrescoApiService } from '@alfresco/adf-core';
|
||||||
import { ElectronService } from '@ngstack/electron';
|
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
import { AppStore } from './store/states/app.state';
|
import { AppStore } from './store/states/app.state';
|
||||||
import { SetHeaderColorAction, SetAppNameAction, SetLogoPathAction, SetLanguagePickerAction } from './store/actions';
|
import { SetHeaderColorAction, SetAppNameAction, SetLogoPathAction, SetLanguagePickerAction } from './store/actions';
|
||||||
@@ -46,9 +45,7 @@ export class AppComponent implements OnInit {
|
|||||||
private store: Store<AppStore>,
|
private store: Store<AppStore>,
|
||||||
private config: AppConfigService,
|
private config: AppConfigService,
|
||||||
private alfrescoApiService: AlfrescoApiService,
|
private alfrescoApiService: AlfrescoApiService,
|
||||||
private authenticationService: AuthenticationService,
|
private authenticationService: AuthenticationService) {
|
||||||
private electronService: ElectronService,
|
|
||||||
private uploadService: UploadService) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
@@ -80,26 +77,6 @@ export class AppComponent implements OnInit {
|
|||||||
|
|
||||||
pageTitle.setTitle(data.title || '');
|
pageTitle.setTitle(data.title || '');
|
||||||
});
|
});
|
||||||
|
|
||||||
this.electronService.on('app:navigateRoute', (event: any, ...args: string[]) => {
|
|
||||||
this.router.navigate([...args]);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.electronService.on('app:upload', (event: any, files: any[] = []) => {
|
|
||||||
const models = files.map(fileInfo => {
|
|
||||||
const file = new File([fileInfo.data], fileInfo.name);
|
|
||||||
|
|
||||||
return new FileModel(file, {
|
|
||||||
path: fileInfo.path,
|
|
||||||
parentId: fileInfo.parentId
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
if (models.length > 0) {
|
|
||||||
this.uploadService.addToQueue(...models);
|
|
||||||
this.uploadService.uploadFilesInTheQueue(new EventEmitter());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private loadAppSettings() {
|
private loadAppSettings() {
|
||||||
|
@@ -30,7 +30,6 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|||||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { TRANSLATION_PROVIDER, CoreModule, AppConfigService, PageTitleService, DebugAppConfigService } from '@alfresco/adf-core';
|
import { TRANSLATION_PROVIDER, CoreModule, AppConfigService, PageTitleService, DebugAppConfigService } from '@alfresco/adf-core';
|
||||||
import { ContentModule } from '@alfresco/adf-content-services';
|
import { ContentModule } from '@alfresco/adf-content-services';
|
||||||
import { ElectronModule } from '@ngstack/electron';
|
|
||||||
|
|
||||||
import { AppComponent } from './app.component';
|
import { AppComponent } from './app.component';
|
||||||
import { APP_ROUTES } from './app.routes';
|
import { APP_ROUTES } from './app.routes';
|
||||||
@@ -94,7 +93,6 @@ import { ExperimentalDirective } from './directives/experimental.directive';
|
|||||||
MaterialModule,
|
MaterialModule,
|
||||||
CoreModule,
|
CoreModule,
|
||||||
ContentModule,
|
ContentModule,
|
||||||
ElectronModule,
|
|
||||||
AppStoreModule
|
AppStoreModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@@ -34,7 +34,6 @@
|
|||||||
</adf-upload-button>
|
</adf-upload-button>
|
||||||
|
|
||||||
<adf-upload-button
|
<adf-upload-button
|
||||||
*ngIf="!isDesktopApp"
|
|
||||||
[tooltip]="
|
[tooltip]="
|
||||||
(permission.check(node, ['create'])
|
(permission.check(node, ['create'])
|
||||||
? 'APP.NEW_MENU.TOOLTIPS.UPLOAD_FOLDERS'
|
? 'APP.NEW_MENU.TOOLTIPS.UPLOAD_FOLDERS'
|
||||||
@@ -46,20 +45,6 @@
|
|||||||
[uploadFolders]="true"
|
[uploadFolders]="true"
|
||||||
[staticTitle]="'APP.NEW_MENU.MENU_ITEMS.UPLOAD_FOLDER' | translate">
|
[staticTitle]="'APP.NEW_MENU.MENU_ITEMS.UPLOAD_FOLDER' | translate">
|
||||||
</adf-upload-button>
|
</adf-upload-button>
|
||||||
|
|
||||||
<button
|
|
||||||
*ngIf="isDesktopApp"
|
|
||||||
mat-menu-item
|
|
||||||
[title]="
|
|
||||||
(permission.check(node, ['create'])
|
|
||||||
? 'APP.NEW_MENU.TOOLTIPS.UPLOAD_FOLDERS'
|
|
||||||
: 'APP.NEW_MENU.TOOLTIPS.UPLOAD_FOLDERS_NOT_ALLOWED'
|
|
||||||
) | translate"
|
|
||||||
[disabled]="!permission.check(node, ['create'])"
|
|
||||||
(click)="uploadFolderDesktop()">
|
|
||||||
<mat-icon>file_upload</mat-icon>
|
|
||||||
<span>{{ 'APP.NEW_MENU.MENU_ITEMS.UPLOAD_FOLDER' | translate }}</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</adf-sidebar-action-menu>
|
</adf-sidebar-action-menu>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -24,25 +24,20 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { TestBed, async } from '@angular/core/testing';
|
import { TestBed, async, ComponentFixture } from '@angular/core/testing';
|
||||||
import { RouterTestingModule } from '@angular/router/testing';
|
import { AppConfigService, CoreModule } from '@alfresco/adf-core';
|
||||||
import { MatMenuModule, MatSnackBarModule } from '@angular/material';
|
|
||||||
import { AppConfigService, TranslationService, TranslationMock, CoreModule } from '@alfresco/adf-core';
|
|
||||||
import { BrowsingFilesService } from '../../common/services/browsing-files.service';
|
import { BrowsingFilesService } from '../../common/services/browsing-files.service';
|
||||||
import { NodePermissionService } from '../../common/services/node-permission.service';
|
import { NodePermissionService } from '../../common/services/node-permission.service';
|
||||||
|
|
||||||
import { SidenavComponent } from './sidenav.component';
|
import { SidenavComponent } from './sidenav.component';
|
||||||
import { ElectronModule } from '@ngstack/electron';
|
|
||||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
|
||||||
import { StoreModule } from '@ngrx/store';
|
|
||||||
import { appReducer } from '../../store/reducers/app.reducer';
|
|
||||||
import { INITIAL_STATE } from '../../store/states/app.state';
|
|
||||||
import { EffectsModule } from '@ngrx/effects';
|
import { EffectsModule } from '@ngrx/effects';
|
||||||
import { NodeEffects } from '../../store/effects/node.effects';
|
import { NodeEffects } from '../../store/effects/node.effects';
|
||||||
import { ContentManagementService } from '../../common/services/content-management.service';
|
import { ContentManagementService } from '../../common/services/content-management.service';
|
||||||
|
import { AppTestingModule } from '../../testing/app-testing.module';
|
||||||
|
import { MaterialModule } from '../../material.module';
|
||||||
|
|
||||||
describe('SidenavComponent', () => {
|
describe('SidenavComponent', () => {
|
||||||
let fixture;
|
let fixture: ComponentFixture<SidenavComponent>;
|
||||||
let component: SidenavComponent;
|
let component: SidenavComponent;
|
||||||
let browsingService: BrowsingFilesService;
|
let browsingService: BrowsingFilesService;
|
||||||
let appConfig: AppConfigService;
|
let appConfig: AppConfigService;
|
||||||
@@ -58,20 +53,15 @@ describe('SidenavComponent', () => {
|
|||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [
|
imports: [
|
||||||
NoopAnimationsModule,
|
AppTestingModule,
|
||||||
|
MaterialModule,
|
||||||
CoreModule.forRoot(),
|
CoreModule.forRoot(),
|
||||||
MatMenuModule,
|
|
||||||
MatSnackBarModule,
|
|
||||||
RouterTestingModule,
|
|
||||||
ElectronModule,
|
|
||||||
StoreModule.forRoot({ app: appReducer }, { initialState: INITIAL_STATE }),
|
|
||||||
EffectsModule.forRoot([NodeEffects])
|
EffectsModule.forRoot([NodeEffects])
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
SidenavComponent
|
SidenavComponent
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
{ provide: TranslationService, useClass: TranslationMock },
|
|
||||||
NodePermissionService,
|
NodePermissionService,
|
||||||
BrowsingFilesService,
|
BrowsingFilesService,
|
||||||
ContentManagementService
|
ContentManagementService
|
||||||
|
@@ -31,7 +31,6 @@ import { AppConfigService } from '@alfresco/adf-core';
|
|||||||
|
|
||||||
import { BrowsingFilesService } from '../../common/services/browsing-files.service';
|
import { BrowsingFilesService } from '../../common/services/browsing-files.service';
|
||||||
import { NodePermissionService } from '../../common/services/node-permission.service';
|
import { NodePermissionService } from '../../common/services/node-permission.service';
|
||||||
import { ElectronService } from '@ngstack/electron';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-sidenav',
|
selector: 'app-sidenav',
|
||||||
@@ -41,7 +40,6 @@ import { ElectronService } from '@ngstack/electron';
|
|||||||
export class SidenavComponent implements OnInit, OnDestroy {
|
export class SidenavComponent implements OnInit, OnDestroy {
|
||||||
@Input() showLabel: boolean;
|
@Input() showLabel: boolean;
|
||||||
|
|
||||||
isDesktopApp = false;
|
|
||||||
node: MinimalNodeEntryEntity = null;
|
node: MinimalNodeEntryEntity = null;
|
||||||
navigation = [];
|
navigation = [];
|
||||||
|
|
||||||
@@ -50,8 +48,7 @@ export class SidenavComponent implements OnInit, OnDestroy {
|
|||||||
constructor(
|
constructor(
|
||||||
private browsingFilesService: BrowsingFilesService,
|
private browsingFilesService: BrowsingFilesService,
|
||||||
private appConfig: AppConfigService,
|
private appConfig: AppConfigService,
|
||||||
public permission: NodePermissionService,
|
public permission: NodePermissionService
|
||||||
private electronService: ElectronService
|
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
@@ -61,8 +58,6 @@ export class SidenavComponent implements OnInit, OnDestroy {
|
|||||||
this.browsingFilesService.onChangeParent
|
this.browsingFilesService.onChangeParent
|
||||||
.subscribe((node: MinimalNodeEntryEntity) => this.node = node)
|
.subscribe((node: MinimalNodeEntryEntity) => this.node = node)
|
||||||
]);
|
]);
|
||||||
|
|
||||||
this.isDesktopApp = this.electronService.isDesktopApp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
@@ -75,8 +70,4 @@ export class SidenavComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
return Object.keys(data).map((key) => data[key]);
|
return Object.keys(data).map((key) => data[key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
uploadFolderDesktop() {
|
|
||||||
this.electronService.send('core:uploadFolder', this.node.id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -23,11 +23,9 @@
|
|||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { RouterTestingModule } from '@angular/router/testing';
|
import { TestBed, ComponentFixture } from '@angular/core/testing';
|
||||||
import { HttpClientModule } from '@angular/common/http';
|
|
||||||
import { TestBed, async, ComponentFixture } from '@angular/core/testing';
|
|
||||||
import {
|
import {
|
||||||
NotificationService, TranslationService, TranslationMock,
|
NotificationService,
|
||||||
NodesApiService, AlfrescoApiService, ContentService,
|
NodesApiService, AlfrescoApiService, ContentService,
|
||||||
UserPreferencesService, LogService, AppConfigService,
|
UserPreferencesService, LogService, AppConfigService,
|
||||||
StorageService, CookieService, ThumbnailService,
|
StorageService, CookieService, ThumbnailService,
|
||||||
@@ -35,16 +33,12 @@ import {
|
|||||||
NodeFavoriteDirective, DataTableComponent, AppConfigPipe, PeopleContentService
|
NodeFavoriteDirective, DataTableComponent, AppConfigPipe, PeopleContentService
|
||||||
} from '@alfresco/adf-core';
|
} from '@alfresco/adf-core';
|
||||||
import { DocumentListComponent, CustomResourcesService } from '@alfresco/adf-content-services';
|
import { DocumentListComponent, CustomResourcesService } from '@alfresco/adf-content-services';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
|
||||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
|
||||||
import { MatMenuModule, MatSnackBarModule, MatIconModule } from '@angular/material';
|
|
||||||
import { DocumentListService } from '@alfresco/adf-content-services';
|
import { DocumentListService } from '@alfresco/adf-content-services';
|
||||||
import { ContentManagementService } from '../../common/services/content-management.service';
|
import { ContentManagementService } from '../../common/services/content-management.service';
|
||||||
|
|
||||||
import { TrashcanComponent } from './trashcan.component';
|
import { TrashcanComponent } from './trashcan.component';
|
||||||
import { StoreModule } from '@ngrx/store';
|
import { AppTestingModule } from '../../testing/app-testing.module';
|
||||||
import { appReducer } from '../../store/reducers/app.reducer';
|
import { MaterialModule } from '../../material.module';
|
||||||
import { INITIAL_STATE } from '../../store/states/app.state';
|
|
||||||
|
|
||||||
describe('TrashcanComponent', () => {
|
describe('TrashcanComponent', () => {
|
||||||
let fixture: ComponentFixture<TrashcanComponent>;
|
let fixture: ComponentFixture<TrashcanComponent>;
|
||||||
@@ -62,16 +56,11 @@ describe('TrashcanComponent', () => {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [
|
imports: [
|
||||||
MatMenuModule,
|
AppTestingModule,
|
||||||
NoopAnimationsModule,
|
MaterialModule,
|
||||||
HttpClientModule,
|
|
||||||
TranslateModule.forRoot(),
|
|
||||||
RouterTestingModule,
|
|
||||||
MatSnackBarModule, MatIconModule,
|
|
||||||
StoreModule.forRoot({ app: appReducer }, { initialState: INITIAL_STATE })
|
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
DataTableComponent,
|
DataTableComponent,
|
||||||
@@ -83,7 +72,6 @@ describe('TrashcanComponent', () => {
|
|||||||
AppConfigPipe
|
AppConfigPipe
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
{ provide: TranslationService, useClass: TranslationMock },
|
|
||||||
AuthenticationService,
|
AuthenticationService,
|
||||||
UserPreferencesService,
|
UserPreferencesService,
|
||||||
PeopleContentService,
|
PeopleContentService,
|
||||||
@@ -99,22 +87,20 @@ describe('TrashcanComponent', () => {
|
|||||||
CustomResourcesService
|
CustomResourcesService
|
||||||
],
|
],
|
||||||
schemas: [ NO_ERRORS_SCHEMA ]
|
schemas: [ NO_ERRORS_SCHEMA ]
|
||||||
})
|
|
||||||
.compileComponents()
|
|
||||||
.then(() => {
|
|
||||||
fixture = TestBed.createComponent(TrashcanComponent);
|
|
||||||
component = fixture.componentInstance;
|
|
||||||
|
|
||||||
alfrescoApi = TestBed.get(AlfrescoApiService);
|
|
||||||
alfrescoApi.reset();
|
|
||||||
contentService = TestBed.get(ContentManagementService);
|
|
||||||
|
|
||||||
component.documentList = <any> {
|
|
||||||
reload: jasmine.createSpy('reload'),
|
|
||||||
resetSelection: jasmine.createSpy('resetSelection')
|
|
||||||
};
|
|
||||||
});
|
});
|
||||||
}));
|
|
||||||
|
fixture = TestBed.createComponent(TrashcanComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
|
||||||
|
alfrescoApi = TestBed.get(AlfrescoApiService);
|
||||||
|
alfrescoApi.reset();
|
||||||
|
contentService = TestBed.get(ContentManagementService);
|
||||||
|
|
||||||
|
component.documentList = <any> {
|
||||||
|
reload: jasmine.createSpy('reload'),
|
||||||
|
resetSelection: jasmine.createSpy('resetSelection')
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
spyOn(alfrescoApi.nodesApi, 'getDeletedNodes').and.returnValue(Promise.resolve(page));
|
spyOn(alfrescoApi.nodesApi, 'getDeletedNodes').and.returnValue(Promise.resolve(page));
|
||||||
|
@@ -29,7 +29,8 @@ import {
|
|||||||
MatIconModule,
|
MatIconModule,
|
||||||
MatButtonModule,
|
MatButtonModule,
|
||||||
MatDialogModule,
|
MatDialogModule,
|
||||||
MatInputModule
|
MatInputModule,
|
||||||
|
MatSnackBarModule
|
||||||
} from '@angular/material';
|
} from '@angular/material';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
@@ -38,7 +39,16 @@ import {
|
|||||||
MatIconModule,
|
MatIconModule,
|
||||||
MatButtonModule,
|
MatButtonModule,
|
||||||
MatDialogModule,
|
MatDialogModule,
|
||||||
MatInputModule
|
MatInputModule,
|
||||||
|
MatSnackBarModule
|
||||||
|
],
|
||||||
|
exports: [
|
||||||
|
MatMenuModule,
|
||||||
|
MatIconModule,
|
||||||
|
MatButtonModule,
|
||||||
|
MatDialogModule,
|
||||||
|
MatInputModule,
|
||||||
|
MatSnackBarModule
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class MaterialModule {}
|
export class MaterialModule {}
|
||||||
|
@@ -48,7 +48,8 @@ import { EffectsModule } from '@ngrx/effects';
|
|||||||
TranslatePipeMock
|
TranslatePipeMock
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
TranslatePipeMock
|
TranslatePipeMock,
|
||||||
|
RouterTestingModule
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
{ provide: TranslationService, useClass: TranslationMock },
|
{ provide: TranslationService, useClass: TranslationMock },
|
||||||
|
Reference in New Issue
Block a user