[ADF-5146] Upgrade to Angular 10 (#5834)

* remove useless module

* upgrade to angular 8

* upgrade material to v8

* upgrade adf libs

* migrate demo shell to v8

* upgrade to angular 9

* upgrade material to v9

* remove hammer

* upgrade nx

* upgrade datetime picker

* upgrade flex layout

* update core api

* remove entry components

* code fixes

* upgrade testbed usage

* code fixes

* remove unnecessary core-js from tests

* upgrade CLI

* ts config fixes

* fix builds

* fix testing config

* compile fixes

* fix demo shell dev setup

* fix core tests

* fix card view import

* upgrade nx

* disable smart builds for now

* remove fdescribe

* restore smart builds

* fix issues

* unify tsconfigs and fix newly found issues

* fix configuration and cleanup package scripts

* improved production build from the same config

* use ADF libs directly instead of node_modules

* disable smart build

* single app configuration (angular)

* fix core build

* fix build scripts

* lint fixes

* fix linting setup

* fix linting rules

* various fixes

* disable affected libs for unit tests

* cleanup insights package.json

* simplify smart-build

* fix content tests

* fix tests

* test fixes

* fix tests

* fix test

* fix tests

* disable AppExtensionsModule (monaco example)

* remove monaco extension module

* upgrade bundle check rules

* fix insights tests and karma config

* fix protractor config

* e2e workaround

* upgrade puppeteer and split linting and build

* reusable resources config

* update protractor config

* fix after rebase

* fix protractor config

* fix e2e tsconfig

* update e2e setup

* Save demoshell artifact on S3 and remove travis cache

* Push the libs on S3 and fetch before releasing it

* Add deps

* Add dependencies among libs and run only affected unit test and build

* fix the travis stage name

* fix after renaming dev to demoshell

* force the order of the projects

* remove unused dependencies

* fix content e2e script

* exit codes fix

* add extra exit codes to core e2e

* postinstall hook and package cleanup

* cleanup packages

* remove deprecated code and dependency on router

* improve bundle analyzer script

* minor code fixes

* update spec

* fix code after rebase

* upgrade protractor after rebase

* fix e2e mapping lib

* Update tsconfig.e2e.json

* update e2e tsconfig

* fix angular config

* fix protractor runs

* cache dist folder for libs

* update material selectors for dropdowns

* selector fixes

* remove duplicated e2e that have unit tests already

* fix login selector

* fix e2e

* fix test

* fix import issues

* fix selector

* cleanup old monaco extension files

* cleanup demo shell login

* add protractor max retries

* disable customisations of protractor

* fix login validation

* fix after rebase

* fix after rebase, disable latest versions of libs

* Hide the report tab and rollback the localstorage

* rename protractor config back to js

* restore lint as part of build

* cleanup code

* do not copy anything to node_modules on dist test

* fix unit tests

* config fixes

* fix code

* fix code after rebase

* fix tests

* remove existing words from spellcheck

* remove useless directive decorators

* update package.json after rebase

* add js-api back

* code fixes

* add missing export

* update configs

* fix code

* try fix the sso login test

* fix

* remove puppeteer unit

* fix e2e script

* fix

* make provider easy

* fix routes module before upgrade

* fix unit tests

* upgrade angular cli

* upgrade to angular 10

Co-authored-by: maurizio vitale <maurizio.vitale@alfresco.com>
Co-authored-by: Eugenio Romano <eugenio.romano@alfresco.com>
Co-authored-by: Eugenio Romano <eromano@users.noreply.github.com>
This commit is contained in:
Denys Vuika
2020-07-03 13:01:05 +01:00
committed by GitHub
co-authored by maurizio vitale Eugenio Romano Eugenio Romano
parent 2f0a585273
commit cd2b489100
579 changed files with 15689 additions and 10745 deletions
@@ -64,8 +64,8 @@ describe('AppListCloudComponent', () => {
beforeEach(() => {
fixture = TestBed.createComponent(AppListCloudComponent);
component = fixture.componentInstance;
alfrescoApiService = TestBed.get(AlfrescoApiService);
appsProcessCloudService = TestBed.get(AppsProcessCloudService);
alfrescoApiService = TestBed.inject(AlfrescoApiService);
appsProcessCloudService = TestBed.inject(AppsProcessCloudService);
spyOn(alfrescoApiService, 'getInstance').and.returnValue(mock);
getAppsSpy = spyOn(appsProcessCloudService, 'getDeployedApplicationsByStatus').and.returnValue(of(fakeApplicationInstance));
@@ -46,9 +46,9 @@ describe('AppsProcessCloudService', () => {
});
beforeEach(() => {
service = TestBed.get(AppsProcessCloudService);
appConfigService = TestBed.get(AppConfigService);
apiService = TestBed.get(AlfrescoApiService);
service = TestBed.inject(AppsProcessCloudService);
appConfigService = TestBed.inject(AppConfigService);
apiService = TestBed.inject(AlfrescoApiService);
spyOn(apiService, 'getInstance').and.returnValue(apiMock);
});
@@ -66,8 +66,7 @@ describe('FormCloudComponent', () => {
@NgModule({
declarations: [CustomWidget],
exports: [CustomWidget],
entryComponents: [CustomWidget]
exports: [CustomWidget]
})
class CustomUploadModule { }
@@ -75,7 +74,7 @@ describe('FormCloudComponent', () => {
const resolver = formRenderingService.getComponentTypeResolver(type);
const widgetType = resolver(null);
const factoryResolver: ComponentFactoryResolver = TestBed.get(ComponentFactoryResolver);
const factoryResolver: ComponentFactoryResolver = TestBed.inject(ComponentFactoryResolver);
const factory = factoryResolver.resolveComponentFactory(widgetType);
const componentRef = factory.create(injector);
@@ -107,15 +106,15 @@ describe('FormCloudComponent', () => {
});
beforeEach(async(() => {
formRenderingService = TestBed.get(CloudFormRenderingService);
formCloudService = TestBed.get(FormCloudService);
formRenderingService = TestBed.inject(CloudFormRenderingService);
formCloudService = TestBed.inject(FormCloudService);
translateService = TestBed.get(TranslateService);
translateService = TestBed.inject(TranslateService);
visibilityService = TestBed.get(WidgetVisibilityService);
visibilityService = TestBed.inject(WidgetVisibilityService);
spyOn(visibilityService, 'refreshVisibility').and.callThrough();
const appConfigService = TestBed.get(AppConfigService);
const appConfigService = TestBed.inject(AppConfigService);
spyOn(appConfigService, 'get').and.returnValue([]);
fixture = TestBed.createComponent(FormCloudComponent);
@@ -1048,7 +1047,7 @@ describe('FormCloudComponent', () => {
class FormCloudWithCustomOutComesComponent {
@ViewChild('adfCloudForm')
@ViewChild('adfCloudForm', { static: true })
adfCloudForm: FormCloudComponent;
onCustomButtonOneClick() { }
@@ -1091,7 +1090,9 @@ describe('FormCloudWithCustomOutComesComponent', () => {
fixture.destroy();
});
it('should be able to inject custom outcomes and click on custom outcomes', () => {
it('should be able to inject custom outcomes and click on custom outcomes', async(() => {
fixture.detectChanges();
const onCustomButtonOneSpy = spyOn(customComponent, 'onCustomButtonOneClick').and.callThrough();
const buttonOneBtn = debugElement.query(By.css('#adf-custom-outcome-1'));
const buttonTwoBtn = debugElement.query(By.css('#adf-custom-outcome-2'));
@@ -1099,8 +1100,10 @@ describe('FormCloudWithCustomOutComesComponent', () => {
expect(buttonTwoBtn).not.toBeNull();
buttonOneBtn.nativeElement.click();
fixture.detectChanges();
expect(onCustomButtonOneSpy).toHaveBeenCalled();
expect(buttonOneBtn.nativeElement.innerText).toBe('CUSTOM-BUTTON-1');
expect(buttonTwoBtn.nativeElement.innerText).toBe('CUSTOM-BUTTON-2');
});
}));
});
@@ -18,7 +18,6 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { setupTestBed } from '@alfresco/adf-core';
import { ProcessServiceCloudTestingModule } from '../../testing/process-service-cloud.testing.module';
import { StartTaskCloudTestingModule } from '../../task/start-task/testing/start-task-cloud.testing.module';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { FormDefinitionSelectorCloudComponent } from './form-definition-selector-cloud.component';
import { By } from '@angular/platform-browser';
@@ -36,8 +35,7 @@ describe('FormDefinitionCloudComponent', () => {
setupTestBed({
imports: [
TranslateModule.forRoot(),
ProcessServiceCloudTestingModule,
StartTaskCloudTestingModule
ProcessServiceCloudTestingModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
@@ -45,7 +43,7 @@ describe('FormDefinitionCloudComponent', () => {
beforeEach(() => {
fixture = TestBed.createComponent(FormDefinitionSelectorCloudComponent);
element = fixture.nativeElement;
service = TestBed.get(FormDefinitionSelectorCloudService);
service = TestBed.inject(FormDefinitionSelectorCloudService);
getFormsSpy = spyOn(service, 'getStandAloneTaskForms').and.returnValue(of([{ id: 'fake-form', name: 'fakeForm' }]));
});
@@ -18,7 +18,7 @@
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Observable } from 'rxjs';
import { FormDefinitionSelectorCloudService } from '../services/form-definition-selector-cloud.service';
import { MatSelectChange } from '@angular/material';
import { MatSelectChange } from '@angular/material/select';
import { FormRepresentation } from '../../services/form-fields.interfaces';
@Component({
@@ -119,15 +119,15 @@ describe('AttachFileCloudWidgetComponent', () => {
});
beforeEach(async(() => {
downloadService = TestBed.get(DownloadService);
downloadService = TestBed.inject(DownloadService);
fixture = TestBed.createComponent(AttachFileCloudWidgetComponent);
widget = fixture.componentInstance;
element = fixture.nativeElement;
processCloudContentService = TestBed.get(ProcessCloudContentService);
contentCloudNodeSelectorService = TestBed.get(
processCloudContentService = TestBed.inject(ProcessCloudContentService);
contentCloudNodeSelectorService = TestBed.inject(
ContentCloudNodeSelectorService
);
formService = TestBed.get(FormService);
formService = TestBed.inject(FormService);
}));
afterEach(() => {
@@ -18,7 +18,7 @@
/* tslint:disable:component-selector */
import { Component, OnInit, ViewEncapsulation, OnDestroy } from '@angular/core';
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material';
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
import moment from 'moment-es6';
import { Moment } from 'moment';
import { Subject } from 'rxjs';
@@ -40,9 +40,9 @@ describe('DropdownCloudWidgetComponent', () => {
let fixture: ComponentFixture<DropdownCloudWidgetComponent>;
let element: HTMLElement;
function openSelect(fieldId) {
const dropDownElement: any = element.querySelector(fieldId);
dropDownElement.click();
function openSelect(_selector?: string) {
const dropdown: any = element.querySelector('.mat-select-trigger');
dropdown.click();
fixture.detectChanges();
}
@@ -63,9 +63,9 @@ describe('DropdownCloudWidgetComponent', () => {
widget = fixture.componentInstance;
element = fixture.nativeElement;
formService = TestBed.get(FormService);
visibilityService = TestBed.get(WidgetVisibilityService);
formCloudService = TestBed.get(FormCloudService);
formService = TestBed.inject(FormService);
visibilityService = TestBed.inject(WidgetVisibilityService);
formCloudService = TestBed.inject(FormCloudService);
widget.field = new FormFieldModel(new FormModel());
}));
@@ -167,7 +167,7 @@ describe('DropdownCloudWidgetComponent', () => {
}
});
const dropdownSpy = spyOn(formCloudService, 'getDropDownJsonData').and.returnValue(of([
spyOn(formCloudService, 'getDropDownJsonData').and.returnValue(of([
{
id: 'opt1',
name: 'default1_value'
@@ -180,12 +180,13 @@ describe('DropdownCloudWidgetComponent', () => {
widget.ngOnInit();
fixture.detectChanges();
openSelect('#dropdown-id');
openSelect();
fixture.detectChanges();
fixture.whenStable().then(() => {
const optOne: any = fixture.debugElement.queryAll(By.css('[id="opt1"]'));
expect(dropdownSpy).toHaveBeenCalled();
expect(optOne[0].nativeElement.className).toBe('mat-option ng-star-inserted mat-active');
const options = fixture.debugElement.queryAll(By.css('.mat-option-text'));
expect(options[0].nativeElement.innerText).toBe('default1_value');
done();
});
});
@@ -201,7 +202,7 @@ describe('DropdownCloudWidgetComponent', () => {
value: 'opt1'
});
const dropdownSpy = spyOn(formCloudService, 'getDropDownJsonData').and.returnValue(of([
spyOn(formCloudService, 'getDropDownJsonData').and.returnValue(of([
{
id: 'opt1',
name: 'default1_value'
@@ -215,12 +216,12 @@ describe('DropdownCloudWidgetComponent', () => {
widget.ngOnInit();
fixture.detectChanges();
openSelect('#dropdown-id');
openSelect();
fixture.detectChanges();
fixture.whenStable().then(() => {
const optOne: any = fixture.debugElement.queryAll(By.css('[id="opt1"]'));
expect(dropdownSpy).toHaveBeenCalled();
expect(optOne[0].nativeElement.className).toBe('mat-option ng-star-inserted mat-active');
const options = fixture.debugElement.queryAll(By.css('.mat-option-text'));
expect(options[0].nativeElement.innerText).toBe('default1_value');
done();
});
});
@@ -59,14 +59,6 @@ import { GroupCloudModule } from '../group/group-cloud.module';
PeopleCloudWidgetComponent,
GroupCloudWidgetComponent
],
entryComponents: [
UploadCloudWidgetComponent,
DropdownCloudWidgetComponent,
AttachFileCloudWidgetComponent,
DateCloudWidgetComponent,
PeopleCloudWidgetComponent,
GroupCloudWidgetComponent
],
exports: [
FormCloudComponent,
UploadCloudWidgetComponent,
@@ -17,7 +17,7 @@
import { Injectable } from '@angular/core';
import { AlfrescoApiService } from '@alfresco/adf-core';
import { MatDialog } from '@angular/material';
import { MatDialog } from '@angular/material/dialog';
import { ContentNodeSelectorComponent, ContentNodeSelectorComponentData } from '@alfresco/adf-content-services';
import { Node } from '@alfresco/js-api';
import { Observable, Subject } from 'rxjs';
@@ -47,8 +47,8 @@ describe('Form Cloud service', () => {
});
beforeEach(() => {
service = TestBed.get(FormCloudService);
apiService = TestBed.get(AlfrescoApiService);
service = TestBed.inject(FormCloudService);
apiService = TestBed.inject(AlfrescoApiService);
spyOn(apiService, 'getInstance').and.returnValue({ oauth2Auth: oauth2Auth });
});
@@ -68,8 +68,8 @@ describe('Form Definition Selector Cloud Service', () => {
});
beforeEach(() => {
service = TestBed.get(FormDefinitionSelectorCloudService);
apiService = TestBed.get(AlfrescoApiService);
service = TestBed.inject(FormDefinitionSelectorCloudService);
apiService = TestBed.inject(AlfrescoApiService);
spyOn(apiService, 'getInstance').and.returnValue({ oauth2Auth: oauth2Auth });
});
@@ -64,8 +64,8 @@ describe('GroupCloudComponent', () => {
component = fixture.componentInstance;
element = fixture.nativeElement;
identityGroupService = TestBed.get(IdentityGroupService);
alfrescoApiService = TestBed.get(AlfrescoApiService);
identityGroupService = TestBed.inject(IdentityGroupService);
alfrescoApiService = TestBed.inject(AlfrescoApiService);
spyOn(alfrescoApiService, 'getInstance').and.returnValue(mock);
});
@@ -33,8 +33,7 @@ import {
import { FormControl } from '@angular/forms';
import { trigger, state, style, transition, animate } from '@angular/animations';
import { Observable, of, BehaviorSubject, Subject } from 'rxjs';
import { debounceTime } from 'rxjs/internal/operators/debounceTime';
import { distinctUntilChanged, switchMap, mergeMap, filter, tap, map, takeUntil } from 'rxjs/operators';
import { distinctUntilChanged, switchMap, mergeMap, filter, tap, map, takeUntil, debounceTime } from 'rxjs/operators';
import { IdentityGroupModel, IdentityGroupService, LogService } from '@alfresco/adf-core';
import { ComponentSelectionMode } from '../../types';
@@ -16,29 +16,45 @@
*/
import { NgModule } from '@angular/core';
import {
MAT_LABEL_GLOBAL_OPTIONS, MatAutocompleteModule, MatButtonModule, MatCardModule, MatCheckboxModule,
MatChipsModule, MatDatepickerModule, MatDialogModule, MatGridListModule, MatIconModule,
MatInputModule, MatListModule, MatNativeDateModule, MatOptionModule, MatProgressSpinnerModule, MatRadioModule,
MatRippleModule, MatSelectModule, MatSlideToggleModule, MatTableModule, MatTabsModule,
MatTooltipModule, MatMenuModule, MatExpansionModule
} from '@angular/material';
export function modules() {
return [
MatAutocompleteModule, MatButtonModule, MatCardModule, MatDialogModule,
MatCheckboxModule, MatDatepickerModule, MatGridListModule, MatIconModule, MatInputModule,
MatListModule, MatOptionModule, MatRadioModule, MatSelectModule, MatSlideToggleModule, MatTableModule,
MatTabsModule, MatProgressSpinnerModule, MatNativeDateModule, MatRippleModule, MatTooltipModule,
MatChipsModule, MatMenuModule, MatExpansionModule
];
}
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatChipsModule } from '@angular/material/chips';
import { MAT_LABEL_GLOBAL_OPTIONS, MatNativeDateModule, MatOptionModule, MatRippleModule } from '@angular/material/core';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatDialogModule } from '@angular/material/dialog';
import { MatExpansionModule } from '@angular/material/expansion';
import { MatGridListModule } from '@angular/material/grid-list';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatListModule } from '@angular/material/list';
import { MatMenuModule } from '@angular/material/menu';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatRadioModule } from '@angular/material/radio';
import { MatSelectModule } from '@angular/material/select';
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
import { MatTableModule } from '@angular/material/table';
import { MatTabsModule } from '@angular/material/tabs';
import { MatTooltipModule } from '@angular/material/tooltip';
@NgModule({
providers: [
{provide: MAT_LABEL_GLOBAL_OPTIONS, useValue: { float: 'never' }}
],
imports: modules(),
exports: modules()
imports: [
MatAutocompleteModule, MatButtonModule, MatCardModule, MatDialogModule,
MatCheckboxModule, MatDatepickerModule, MatGridListModule, MatIconModule, MatInputModule,
MatListModule, MatOptionModule, MatRadioModule, MatSelectModule, MatSlideToggleModule, MatTableModule,
MatTabsModule, MatProgressSpinnerModule, MatNativeDateModule, MatRippleModule, MatTooltipModule,
MatChipsModule, MatMenuModule, MatExpansionModule
],
exports: [
MatAutocompleteModule, MatButtonModule, MatCardModule, MatDialogModule,
MatCheckboxModule, MatDatepickerModule, MatGridListModule, MatIconModule, MatInputModule,
MatListModule, MatOptionModule, MatRadioModule, MatSelectModule, MatSlideToggleModule, MatTableModule,
MatTabsModule, MatProgressSpinnerModule, MatNativeDateModule, MatRippleModule, MatTooltipModule,
MatChipsModule, MatMenuModule, MatExpansionModule
]
})
export class MaterialModule {}
@@ -68,8 +68,8 @@ describe('PeopleCloudComponent', () => {
fixture = TestBed.createComponent(PeopleCloudComponent);
component = fixture.componentInstance;
identityService = TestBed.get(IdentityUserService);
alfrescoApiService = TestBed.get(AlfrescoApiService);
identityService = TestBed.inject(IdentityUserService);
alfrescoApiService = TestBed.inject(AlfrescoApiService);
spyOn(alfrescoApiService, 'getInstance').and.returnValue(mock);
});
@@ -45,7 +45,7 @@ describe('ProcessNameCloudPipe', () => {
});
beforeEach(async(() => {
const localizedDatePipe = TestBed.get(LocalizedDatePipe);
const localizedDatePipe = TestBed.inject(LocalizedDatePipe);
processNamePipe = new ProcessNameCloudPipe(localizedDatePipe);
}));
@@ -52,7 +52,7 @@ describe('CancelProcessDirective', () => {
beforeEach(() => {
fixture = TestBed.createComponent(TestComponent);
component = fixture.componentInstance;
identityUserService = TestBed.get(IdentityUserService);
identityUserService = TestBed.inject(IdentityUserService);
spyOn(identityUserService, 'getCurrentUserInfo').and.returnValue({username: 'usermock'});
fixture.detectChanges();
});
@@ -22,6 +22,7 @@ import { Subject } from 'rxjs';
import { ProcessInstanceCloud } from '../start-process/models/process-instance-cloud.model';
@Directive({
// tslint:disable-next-line: directive-selector
selector: '[adf-cloud-cancel-process]'
})
export class CancelProcessDirective implements OnInit, OnDestroy {
@@ -21,7 +21,7 @@ import { By } from '@angular/platform-browser';
import { setupTestBed } from '@alfresco/adf-core';
import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module';
import { MatDialog } from '@angular/material';
import { MatDialog } from '@angular/material/dialog';
import { of } from 'rxjs';
import { ProcessFilterDialogCloudComponent } from './process-filter-dialog-cloud.component';
import { EditProcessFilterCloudComponent } from './edit-process-filter-cloud.component';
@@ -72,9 +72,9 @@ describe('EditProcessFilterCloudComponent', () => {
beforeEach(() => {
fixture = TestBed.createComponent(EditProcessFilterCloudComponent);
component = fixture.componentInstance;
service = TestBed.get(ProcessFilterCloudService);
appsService = TestBed.get(AppsProcessCloudService);
dialog = TestBed.get(MatDialog);
service = TestBed.inject(ProcessFilterCloudService);
appsService = TestBed.inject(AppsProcessCloudService);
dialog = TestBed.inject(MatDialog);
spyOn(dialog, 'open').and.returnValue({
afterClosed() {
return of({
@@ -17,7 +17,8 @@
import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';
import { FormGroup, FormBuilder, AbstractControl } from '@angular/forms';
import { MatDialog, DateAdapter } from '@angular/material';
import { DateAdapter } from '@angular/material/core';
import { MatDialog } from '@angular/material/dialog';
import { debounceTime, filter, takeUntil, finalize, switchMap } from 'rxjs/operators';
import { Subject, Observable } from 'rxjs';
import moment from 'moment-es6';
@@ -16,7 +16,7 @@
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { ProcessFilterDialogCloudComponent } from './process-filter-dialog-cloud.component';
import { setupTestBed } from '@alfresco/adf-core';
import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module';
@@ -16,7 +16,7 @@
*/
import { Component, Inject, OnInit } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { FormBuilder, FormGroup, AbstractControl, Validators } from '@angular/forms';
@Component({
@@ -92,7 +92,7 @@ describe('ProcessFiltersCloudComponent', () => {
fixture = TestBed.createComponent(ProcessFiltersCloudComponent);
component = fixture.componentInstance;
processFilterService = TestBed.get(ProcessFilterCloudService);
processFilterService = TestBed.inject(ProcessFilterCloudService);
});
it('should attach specific icon for each filter if hasIcon is true', async(() => {
@@ -26,7 +26,7 @@ import { HttpClientModule } from '@angular/common/http';
import { EditProcessFilterCloudComponent } from './components/edit-process-filter-cloud.component';
import { ProcessFilterDialogCloudComponent } from './components/process-filter-dialog-cloud.component';
import { AppListCloudModule } from './../../app/app-list-cloud.module';
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material';
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
@NgModule({
imports: [
@@ -42,7 +42,6 @@ import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material';
],
declarations: [ProcessFiltersCloudComponent, EditProcessFilterCloudComponent, ProcessFilterDialogCloudComponent],
exports: [ProcessFiltersCloudComponent, EditProcessFilterCloudComponent, ProcessFilterDialogCloudComponent],
entryComponents: [ProcessFilterDialogCloudComponent],
providers: [
{ provide: DateAdapter, useClass: MomentDateAdapter },
{ provide: MAT_DATE_FORMATS, useValue: MOMENT_DATE_FORMATS }
@@ -52,10 +52,10 @@ describe('ProcessFilterCloudService', () => {
});
beforeEach(async(() => {
service = TestBed.get(ProcessFilterCloudService);
service = TestBed.inject(ProcessFilterCloudService);
const preferenceCloudService = service.preferenceService;
const identityUserService = TestBed.get(IdentityUserService);
const identityUserService = TestBed.inject(IdentityUserService);
createPreferenceSpy = spyOn(preferenceCloudService, 'createPreference').and.returnValue(of(fakeProcessCloudFilters));
updatePreferenceSpy = spyOn(preferenceCloudService, 'updatePreference').and.returnValue(of(fakeProcessCloudFilters));
@@ -54,8 +54,8 @@ describe('ProcessHeaderCloudComponent', () => {
beforeEach(() => {
fixture = TestBed.createComponent(ProcessHeaderCloudComponent);
component = fixture.componentInstance;
service = TestBed.get(ProcessCloudService);
appConfigService = TestBed.get(AppConfigService);
service = TestBed.inject(ProcessCloudService);
appConfigService = TestBed.inject(AppConfigService);
spyOn(service, 'getProcessInstanceById').and.returnValue(of(processInstanceDetailsCloudMock));
component.appName = 'myApp';
component.processInstanceId = 'sdfsdf-323';
@@ -76,8 +76,8 @@ describe('ProcessListCloudComponent', () => {
});
beforeEach(() => {
appConfig = TestBed.get(AppConfigService);
processListCloudService = TestBed.get(ProcessListCloudService);
appConfig = TestBed.inject(AppConfigService);
processListCloudService = TestBed.inject(ProcessListCloudService);
fixture = TestBed.createComponent(ProcessListCloudComponent);
component = fixture.componentInstance;
appConfig.config = Object.assign(appConfig.config, {
@@ -22,17 +22,13 @@ import { of, throwError } from 'rxjs';
import { StartProcessCloudService } from '../services/start-process-cloud.service';
import { FormCloudService } from '../../../form/services/form-cloud.service';
import { StartProcessCloudComponent } from './start-process-cloud.component';
import {
MatCardModule,
MatOptionModule,
MatAutocompleteModule,
MatIconModule,
MatButtonModule,
MatFormFieldModule,
MatInputModule,
MatRippleModule,
MatCommonModule
} from '@angular/material';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { MatOptionModule, MatRippleModule, MatCommonModule } from '@angular/material/core';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import {
@@ -97,8 +93,8 @@ describe('StartProcessCloudComponent', () => {
});
beforeEach(() => {
processService = TestBed.get(StartProcessCloudService);
formCloudService = TestBed.get(FormCloudService);
processService = TestBed.inject(StartProcessCloudService);
formCloudService = TestBed.inject(FormCloudService);
fixture = TestBed.createComponent(StartProcessCloudComponent);
component = fixture.componentInstance;
@@ -24,7 +24,7 @@ import { ProcessInstanceCloud } from '../models/process-instance-cloud.model';
import { StartProcessCloudService } from '../services/start-process-cloud.service';
import { FormControl, Validators, FormGroup, AbstractControl, FormBuilder, ValidatorFn } from '@angular/forms';
import { FormModel, ContentLinkModel } from '@alfresco/adf-core';
import { MatAutocompleteTrigger } from '@angular/material';
import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
import { ProcessPayloadCloud } from '../models/process-payload-cloud.model';
import { debounceTime, takeUntil, switchMap, filter, distinctUntilChanged, tap } from 'rxjs/operators';
import { ProcessDefinitionCloud } from '../models/process-definition-cloud.model';
@@ -46,8 +46,8 @@ describe('StartProcessCloudService', () => {
});
beforeEach(() => {
service = TestBed.get(StartProcessCloudService);
alfrescoApiService = TestBed.get(AlfrescoApiService);
service = TestBed.inject(StartProcessCloudService);
alfrescoApiService = TestBed.inject(AlfrescoApiService);
});
it('should be able to create a new process', (done) => {
@@ -18,14 +18,14 @@
import { TestBed, async } from '@angular/core/testing';
import { UserPreferenceCloudService } from './user-preference-cloud.service';
import { setupTestBed, AlfrescoApiServiceMock, AlfrescoApiService } from '@alfresco/adf-core';
import { setupTestBed, AlfrescoApiService } from '@alfresco/adf-core';
import { mockPreferences, getMockPreference, createMockPreference, updateMockPreference } from '../mock/user-preference.mock';
import { ProcessServiceCloudTestingModule } from '../testing/process-service-cloud.testing.module';
import { TranslateModule } from '@ngx-translate/core';
describe('PreferenceService', () => {
let service: UserPreferenceCloudService;
let alfrescoApiMock: AlfrescoApiServiceMock;
let alfrescoApiMock: AlfrescoApiService;
let getInstanceSpy: jasmine.Spy;
const errorResponse = {
@@ -57,8 +57,8 @@ describe('PreferenceService', () => {
});
beforeEach(async(() => {
service = TestBed.get(UserPreferenceCloudService);
alfrescoApiMock = TestBed.get(AlfrescoApiService);
service = TestBed.inject(UserPreferenceCloudService);
alfrescoApiMock = TestBed.inject(AlfrescoApiService);
getInstanceSpy = spyOn(alfrescoApiMock, 'getInstance').and.returnValue(apiMock(mockPreferences));
}));
@@ -35,7 +35,7 @@ describe('ClaimTaskCloudDirective', () => {
taskMock = 'test1234';
appNameMock = 'simple-app';
@ViewChild(ClaimTaskCloudDirective)
@ViewChild(ClaimTaskCloudDirective, { static: false })
claimTaskDirective: ClaimTaskCloudDirective;
}
@@ -53,7 +53,7 @@ describe('ClaimTaskCloudDirective', () => {
});
beforeEach(() => {
taskCloudService = TestBed.get(TaskCloudService);
taskCloudService = TestBed.inject(TaskCloudService);
fixture = TestBed.createComponent(TestComponent);
fixture.detectChanges();
});
@@ -116,7 +116,7 @@ describe('Claim Task Directive validation errors', () => {
appNameNull = null;
taskMock = 'test1234';
@ViewChild(ClaimTaskCloudDirective)
@ViewChild(ClaimTaskCloudDirective, { static: false })
claimTaskValidationDirective: ClaimTaskCloudDirective;
}
@@ -57,7 +57,7 @@ describe('CompleteTaskDirective', () => {
});
beforeEach(() => {
taskCloudService = TestBed.get(TaskCloudService);
taskCloudService = TestBed.inject(TaskCloudService);
fixture = TestBed.createComponent(TestComponent);
fixture.detectChanges();
});
@@ -53,7 +53,7 @@ describe('UnClaimTaskCloudDirective', () => {
});
beforeEach(() => {
taskCloudService = TestBed.get(TaskCloudService);
taskCloudService = TestBed.inject(TaskCloudService);
fixture = TestBed.createComponent(TestComponent);
fixture.detectChanges();
});
@@ -116,7 +116,7 @@ describe('UnClaim Task Directive validation errors', () => {
appNameNull = null;
taskMock = 'test1234';
@ViewChild(UnClaimTaskCloudDirective)
@ViewChild(UnClaimTaskCloudDirective, { static: false })
claimTaskValidationDirective: UnClaimTaskCloudDirective;
}
@@ -90,7 +90,7 @@ describe('Task Cloud Service', () => {
beforeEach(async(() => {
alfrescoApiMock = new AlfrescoApiServiceMock(new AppConfigService(null), new StorageService());
identityUserService = TestBed.get(IdentityUserService);
identityUserService = TestBed.inject(IdentityUserService);
spyOn(identityUserService, 'getCurrentUserInfo').and.returnValue(cloudMockUser);
service = new TaskCloudService(alfrescoApiMock,
new AppConfigService(null),
@@ -22,7 +22,6 @@ import { of, throwError } from 'rxjs';
import { taskDetailsMock } from '../mock/task-details.mock';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ProcessServiceCloudTestingModule } from './../../../testing/process-service-cloud.testing.module';
import { StartTaskCloudTestingModule } from '../testing/start-task-cloud.testing.module';
import { FormDefinitionSelectorCloudService } from '../../../form/services/form-definition-selector-cloud.service';
import { TaskCloudService } from '../../services/task-cloud.service';
import { StartTaskCloudRequestModel } from '../models/start-task-cloud-request.model';
@@ -50,8 +49,7 @@ describe('StartTaskCloudComponent', () => {
setupTestBed({
imports: [
TranslateModule.forRoot(),
ProcessServiceCloudTestingModule,
StartTaskCloudTestingModule
ProcessServiceCloudTestingModule
],
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
});
@@ -61,10 +59,10 @@ describe('StartTaskCloudComponent', () => {
component = fixture.componentInstance;
element = fixture.nativeElement;
service = TestBed.get(TaskCloudService);
identityService = TestBed.get(IdentityUserService);
alfrescoApiService = TestBed.get(AlfrescoApiService);
formDefinitionSelectorCloudService = TestBed.get(FormDefinitionSelectorCloudService);
service = TestBed.inject(TaskCloudService);
identityService = TestBed.inject(IdentityUserService);
alfrescoApiService = TestBed.inject(AlfrescoApiService);
formDefinitionSelectorCloudService = TestBed.inject(FormDefinitionSelectorCloudService);
spyOn(alfrescoApiService, 'getInstance').and.returnValue(mock);
createNewTaskSpy = spyOn(service, 'createNewTask').and.returnValue(of(taskDetailsMock));
spyOn(identityService, 'getCurrentUserInfo').and.returnValue(mockUser);
@@ -17,13 +17,14 @@
import { TestBed } from '@angular/core/testing';
import { StartTaskCloudTestingModule } from '../testing/start-task-cloud.testing.module';
import { of, throwError } from 'rxjs';
import { taskDetailsMock } from '../mock/task-details.mock';
import { TaskDetailsCloudModel } from '../models/task-details-cloud.model';
import { HttpErrorResponse } from '@angular/common/http';
import { setupTestBed } from '@alfresco/adf-core';
import { TaskCloudService } from '../../services/task-cloud.service';
import { TranslateModule } from '@ngx-translate/core';
import { ProcessServiceCloudTestingModule } from './../../../testing/process-service-cloud.testing.module';
describe('StartTaskCloudService', () => {
@@ -31,11 +32,14 @@ describe('StartTaskCloudService', () => {
const fakeAppName: string = 'fake-app';
setupTestBed({
imports: [StartTaskCloudTestingModule]
imports: [
TranslateModule.forRoot(),
ProcessServiceCloudTestingModule
]
});
beforeEach(() => {
service = TestBed.get(TaskCloudService);
service = TestBed.inject(TaskCloudService);
});
it('should able to create a new task ', (done) => {
@@ -1,48 +0,0 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { NgModule } from '@angular/core';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { CommonModule } from '@angular/common';
import { FlexLayoutModule } from '@angular/flex-layout';
import { MaterialModule } from '../../../material.module';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TemplateModule, TranslateLoaderService, PipeModule } from '@alfresco/adf-core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { StartTaskCloudModule } from '../start-task-cloud.module';
@NgModule({
imports: [
CommonModule,
NoopAnimationsModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateLoaderService
}
}),
TemplateModule,
FlexLayoutModule,
MaterialModule,
FormsModule,
ReactiveFormsModule,
PipeModule,
StartTaskCloudModule
]
})
export class StartTaskCloudTestingModule { }
@@ -20,7 +20,7 @@ import { SimpleChange } from '@angular/core';
import { By } from '@angular/platform-browser';
import { setupTestBed } from '@alfresco/adf-core';
import { MatDialog } from '@angular/material';
import { MatDialog } from '@angular/material/dialog';
import { of } from 'rxjs';
import { TASK_FILTERS_SERVICE_TOKEN } from '../../../services/cloud-token.service';
import { LocalPreferenceCloudService } from '../../../services/local-preference-cloud.service';
@@ -60,9 +60,9 @@ describe('EditTaskFilterCloudComponent', () => {
beforeEach(() => {
fixture = TestBed.createComponent(EditTaskFilterCloudComponent);
component = fixture.componentInstance;
service = TestBed.get(TaskFilterCloudService);
appsService = TestBed.get(AppsProcessCloudService);
dialog = TestBed.get(MatDialog);
service = TestBed.inject(TaskFilterCloudService);
appsService = TestBed.inject(AppsProcessCloudService);
dialog = TestBed.inject(MatDialog);
spyOn(dialog, 'open').and.returnValue({ afterClosed: of({
action: TaskFilterDialogCloudComponent.ACTION_SAVE,
icon: 'icon',
@@ -17,7 +17,8 @@
import { Component, OnChanges, Input, Output, EventEmitter, SimpleChanges, OnInit, OnDestroy } from '@angular/core';
import { AbstractControl, FormGroup, FormBuilder } from '@angular/forms';
import { MatDialog, DateAdapter } from '@angular/material';
import { DateAdapter } from '@angular/material/core';
import { MatDialog } from '@angular/material/dialog';
import { debounceTime, filter, takeUntil, finalize, switchMap } from 'rxjs/operators';
import { Subject, Observable } from 'rxjs';
import moment from 'moment-es6';
@@ -16,7 +16,7 @@
*/
import { Component, Inject, OnInit } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { FormBuilder, FormGroup, AbstractControl, Validators } from '@angular/forms';
@Component({
@@ -68,7 +68,7 @@ describe('TaskFiltersCloudComponent', () => {
fixture = TestBed.createComponent(TaskFiltersCloudComponent);
component = fixture.componentInstance;
taskFilterService = TestBed.get(TaskFilterCloudService);
taskFilterService = TestBed.inject(TaskFilterCloudService);
});
it('should attach specific icon for each filter if hasIcon is true', async(() => {
@@ -62,7 +62,7 @@ describe('TaskFilterCloudService', () => {
});
beforeEach(() => {
service = TestBed.get(TaskFilterCloudService);
service = TestBed.inject(TaskFilterCloudService);
const preferenceCloudService = service.preferenceService;
createPreferenceSpy = spyOn(preferenceCloudService, 'createPreference').and.returnValue(of(fakeTaskCloudFilters));
@@ -70,7 +70,7 @@ describe('TaskFilterCloudService', () => {
getPreferencesSpy = spyOn(preferenceCloudService, 'getPreferences').and.returnValue(of(fakeTaskCloudPreferenceList));
getPreferenceByKeySpy = spyOn(preferenceCloudService, 'getPreferenceByKey').and.returnValue(of(fakeTaskCloudFilters));
const identityUserService = TestBed.get(IdentityUserService);
const identityUserService = TestBed.inject(IdentityUserService);
getCurrentUserInfoSpy = spyOn(identityUserService, 'getCurrentUserInfo').and.returnValue(identityUserMock);
});
@@ -240,9 +240,9 @@ describe('Inject [LocalPreferenceCloudService] into the TaskFilterCloudService',
});
beforeEach(() => {
service = TestBed.get(TaskFilterCloudService);
service = TestBed.inject(TaskFilterCloudService);
preferenceCloudService = service.preferenceService;
identityUserService = TestBed.get(IdentityUserService);
identityUserService = TestBed.inject(IdentityUserService);
getPreferencesSpy = spyOn(preferenceCloudService, 'getPreferences').and.returnValue(of([]));
spyOn(identityUserService, 'getCurrentUserInfo').and.returnValue(identityUserMock);
});
@@ -26,7 +26,7 @@ import { HttpClientModule } from '@angular/common/http';
import { EditTaskFilterCloudComponent } from './components/edit-task-filter-cloud.component';
import { TaskFilterDialogCloudComponent } from './components/task-filter-dialog-cloud.component';
import { AppListCloudModule } from './../../app/app-list-cloud.module';
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material';
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
@NgModule({
imports: [
@@ -44,9 +44,6 @@ import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material';
providers: [
{ provide: DateAdapter, useClass: MomentDateAdapter },
{ provide: MAT_DATE_FORMATS, useValue: MOMENT_DATE_FORMATS }
],
entryComponents: [
TaskFilterDialogCloudComponent
]
})
export class TaskFiltersCloudModule { }
@@ -61,9 +61,9 @@ describe('TaskFormCloudComponent', () => {
beforeEach(() => {
taskDetails.status = 'ASSIGNED';
identityUserService = TestBed.get(IdentityUserService);
identityUserService = TestBed.inject(IdentityUserService);
getCurrentUserSpy = spyOn(identityUserService, 'getCurrentUserInfo').and.returnValue({ username: 'admin.adf' });
taskCloudService = TestBed.get(TaskCloudService);
taskCloudService = TestBed.inject(TaskCloudService);
getTaskSpy = spyOn(taskCloudService, 'getTaskById').and.returnValue(of(taskDetails));
spyOn(taskCloudService, 'getCandidateGroups').and.returnValue(of([]));
spyOn(taskCloudService, 'getCandidateUsers').and.returnValue(of([]));
@@ -57,8 +57,8 @@ describe('TaskHeaderCloudComponent', () => {
beforeEach(() => {
fixture = TestBed.createComponent(TaskHeaderCloudComponent);
component = fixture.componentInstance;
appConfigService = TestBed.get(AppConfigService);
taskCloudService = TestBed.get(TaskCloudService);
appConfigService = TestBed.inject(AppConfigService);
taskCloudService = TestBed.inject(TaskCloudService);
component.appName = 'mock-app-name';
component.taskId = 'mock-task-id';
getTaskByIdSpy = spyOn(taskCloudService, 'getTaskById').and.returnValue(of(assignedTaskDetailsCloudMock));
@@ -32,7 +32,6 @@ import {
CardViewArrayItem
} from '@alfresco/adf-core';
import { TaskDetailsCloudModel, TaskStatus } from '../../start-task/models/task-details-cloud.model';
import { Router } from '@angular/router';
import { TaskCloudService } from '../../services/task-cloud.service';
import { NumericFieldValidator } from '../../../validators/numeric-field.validator';
@@ -80,7 +79,6 @@ export class TaskHeaderCloudComponent implements OnInit, OnDestroy, OnChanges {
private taskCloudService: TaskCloudService,
private translationService: TranslationService,
private appConfig: AppConfigService,
private router: Router,
private cardViewUpdateService: CardViewUpdateService
) {
this.dateFormat = this.appConfig.get('dateValues.defaultDateFormat');
@@ -325,15 +323,6 @@ export class TaskHeaderCloudComponent implements OnInit, OnDestroy, OnChanges {
return filteredProperties ? filteredProperties.indexOf(cardItem.key) >= 0 : true;
}
goBack() {
this.router.navigate([`/cloud/${this.appName}/`]);
}
// @deprecated: not used anymore
onCompletedTask() {
this.goBack();
}
ngOnDestroy() {
this.onDestroy$.next(true);
this.onDestroy$.complete();
@@ -71,7 +71,7 @@ class EmptyTemplateComponent {
</adf-cloud-task-list>`
})
class CustomCopyContentTaskListComponent {
@ViewChild(TaskListCloudComponent)
@ViewChild(TaskListCloudComponent, { static: true })
taskList: TaskListCloudComponent;
}
@@ -93,8 +93,8 @@ describe('TaskListCloudComponent', () => {
});
beforeEach(() => {
appConfig = TestBed.get(AppConfigService);
taskListCloudService = TestBed.get(TaskListCloudService);
appConfig = TestBed.inject(AppConfigService);
taskListCloudService = TestBed.inject(TaskListCloudService);
fixture = TestBed.createComponent(TaskListCloudComponent);
component = fixture.componentInstance;
appConfig.config = Object.assign(appConfig.config, {
@@ -348,7 +348,7 @@ describe('TaskListCloudComponent', () => {
copyFixture.detectChanges();
}));
it('it should not show copy tooltip when key is not present in data-colunn', async(() => {
it('it should not show copy tooltip when key is not present in data-column', (done) => {
const appName = new SimpleChange(null, 'FAKE-APP-NAME', true);
customCopyComponent.taskList.success.subscribe( () => {
copyFixture.whenStable().then(() => {
@@ -357,12 +357,13 @@ describe('TaskListCloudComponent', () => {
spanHTMLElement.dispatchEvent(new Event('mouseenter'));
copyFixture.detectChanges();
expect(copyFixture.debugElement.nativeElement.querySelector('.adf-copy-tooltip')).toBeNull();
done();
});
});
customCopyComponent.taskList.appName = appName.currentValue;
customCopyComponent.taskList.ngOnChanges({ 'appName': appName });
copyFixture.detectChanges();
}));
});
});
describe('Creating an empty custom template - EmptyTemplateComponent', () => {
@@ -406,8 +407,8 @@ describe('TaskListCloudComponent', () => {
});
beforeEach( () => {
appConfig = TestBed.get(AppConfigService);
taskListCloudService = TestBed.get(TaskListCloudService);
appConfig = TestBed.inject(AppConfigService);
taskListCloudService = TestBed.inject(TaskListCloudService);
appConfig.config = Object.assign(appConfig.config, {
'adf-cloud-task-list': {
'presets': {
-1
View File
@@ -17,7 +17,6 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'core-js/es7/reflect';
import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';