[ADF-5158] ECM Version Directive (#5779)

* [ADF-5158] ECM Version Directive

* Update version-compatibility.directive.ts

* Update version-compatibility.directive.ts

* Change name from ecm to acs

* Fix unit tests

* Update docs for Version directive

* Fix unit tests

* Fix unit tests

* Linting

* Update apps-process-cloud.service.spec.ts

* Fix Ecm Service initialization

* Fix unit test

Co-authored-by: Eugenio Romano <eromano@users.noreply.github.com>
This commit is contained in:
davidcanonieto
2020-06-23 08:46:17 +01:00
committed by GitHub
parent 1daffc050c
commit 46e4daeef3
17 changed files with 432 additions and 22 deletions

View File

@@ -0,0 +1,56 @@
# [Version Compatibility Directive](../../../lib/core/directives/version-compatibility.directive.ts "Defined in version-compatibility.directive.ts")
Enables/disables components based on ACS version in use.
## Basic usage
```html
<button *adf-acs-version="'6.0.0'">
My Action
</button>
```
## Class members
### Properties
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
| adf-acs-version | `string` | | The minimum version required for a given component to work propertly. |
## Details
Add the directive to a component or HTML element to enable or disable it based on the version of ACS running in the app.
The directive takes the version specified in the html and compares it to the version of Alfresco Content Services running in the app.
This will allow certain features to be only present under specific versions.
#### Major version
```html
<button *adf-acs-version="'7'">
My Action
</button>
```
#### Major and minor version
```html
<button *adf-acs-version="'6.2'">
My Action
</button>
```
#### Major, minor and patch version
```html
<button *adf-acs-version="'6.0.1'">
My Action
</button>
```
It can be set to match major, minor and patches of ACS versions. Fox example, if the version `6` is specifed it will enable the component from `6.0.0` onwards.
If the minimum version required is not matched the component will not be initialized and will disappear from the DOM tree.
```
Note, if you dont place the * in front, the app wont be able to inject the TemplateRef and ViewContainerRef required for this directive to work.
```

View File

@@ -57,6 +57,8 @@ import { ExtensionsModule } from '@alfresco/adf-extensions';
import { directionalityConfigFactory } from './services/directionality-config-factory'; import { directionalityConfigFactory } from './services/directionality-config-factory';
import { DirectionalityConfigService } from './services/directionality-config.service'; import { DirectionalityConfigService } from './services/directionality-config.service';
import { SearchTextModule } from './search-text/search-text-input.module'; import { SearchTextModule } from './search-text/search-text-input.module';
import { versionCompatibilityFactory } from './services/version-compatibility-factory';
import { VersionCompatibilityService } from './services/version-compatibility.service';
@NgModule({ @NgModule({
imports: [ imports: [
@@ -149,6 +151,12 @@ export class CoreModule {
useFactory: directionalityConfigFactory, useFactory: directionalityConfigFactory,
deps: [ DirectionalityConfigService ], deps: [ DirectionalityConfigService ],
multi: true multi: true
},
{
provide: APP_INITIALIZER,
useFactory: versionCompatibilityFactory,
deps: [ VersionCompatibilityService ],
multi: true
} }
] ]
}; };

View File

@@ -27,6 +27,7 @@ import { CheckAllowableOperationDirective } from './check-allowable-operation.di
import { NodeRestoreDirective } from './node-restore.directive'; import { NodeRestoreDirective } from './node-restore.directive';
import { UploadDirective } from './upload.directive'; import { UploadDirective } from './upload.directive';
import { NodeDownloadDirective } from './node-download.directive'; import { NodeDownloadDirective } from './node-download.directive';
import { VersionCompatibilityDirective } from './version-compatibility.directive';
@NgModule({ @NgModule({
imports: [ imports: [
@@ -41,7 +42,8 @@ import { NodeDownloadDirective } from './node-download.directive';
CheckAllowableOperationDirective, CheckAllowableOperationDirective,
NodeRestoreDirective, NodeRestoreDirective,
NodeDownloadDirective, NodeDownloadDirective,
UploadDirective UploadDirective,
VersionCompatibilityDirective
], ],
exports: [ exports: [
HighlightDirective, HighlightDirective,
@@ -51,7 +53,8 @@ import { NodeDownloadDirective } from './node-download.directive';
CheckAllowableOperationDirective, CheckAllowableOperationDirective,
NodeRestoreDirective, NodeRestoreDirective,
NodeDownloadDirective, NodeDownloadDirective,
UploadDirective UploadDirective,
VersionCompatibilityDirective
] ]
}) })
export class DirectiveModule {} export class DirectiveModule {}

View File

@@ -23,5 +23,6 @@ export * from './check-allowable-operation.directive';
export * from './node-restore.directive'; export * from './node-restore.directive';
export * from './node-download.directive'; export * from './node-download.directive';
export * from './upload.directive'; export * from './upload.directive';
export * from './version-compatibility.directive';
export * from './directive.module'; export * from './directive.module';

View File

@@ -0,0 +1,95 @@
/*!
* @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 { Component } from '@angular/core';
import { By } from '@angular/platform-browser';
import { TranslateModule } from '@ngx-translate/core';
import { TestBed, ComponentFixture } from '@angular/core/testing';
import { setupTestBed } from '../testing/setup-test-bed';
import { CoreTestingModule } from '../testing/core.testing.module';
import { VersionCompatibilityService } from '@alfresco/adf-core';
@Component({
template: `
<div *adf-acs-version="'8'" class="hidden-content-1">
My hidden content 1
</div>
<div *adf-acs-version="'7.1'" class="hidden-content-2">
My hidden content 2
</div>
<div *adf-acs-version="'7.0.2'" class="hidden-content-3">
My hidden content 3
</div>
<div *adf-acs-version="'6.1.5'" class="visible-content-1">
My visible content 1
</div>
<div *adf-acs-version="'6.1'" class="visible-content-2">
My visible content 2
</div>
<div *adf-acs-version="'6'" class="visible-content-3">
My visible content 3
</div>
`
})
class TestComponent { }
describe('VersionCompatibilityDirective', () => {
let fixture: ComponentFixture<TestComponent>;
let versionCompatibilityService: VersionCompatibilityService;
const acsResponceMock = {
display: '7.0.1',
major: '7',
minor: '0',
patch: '1'
};
setupTestBed({
imports: [
TranslateModule.forRoot(),
CoreTestingModule
],
declarations: [TestComponent
]
});
beforeEach(() => {
fixture = TestBed.createComponent(TestComponent);
versionCompatibilityService = TestBed.get(VersionCompatibilityService);
spyOn(versionCompatibilityService, 'getAcsVersion').and.returnValue(acsResponceMock);
});
it('should display component when the version is supported', () => {
fixture.detectChanges();
const element1 = fixture.debugElement.query(By.css('[class="visible-content-1"]'));
const element2 = fixture.debugElement.query(By.css('[class="visible-content-2"]'));
const element3 = fixture.debugElement.query(By.css('[class="visible-content-3"]'));
expect(element1).toBeDefined();
expect(element2).toBeDefined();
expect(element3).toBeDefined();
});
it('should hide component when the version is not supported', () => {
fixture.detectChanges();
const element1 = fixture.debugElement.query(By.css('[class="hidden-content-1"]'));
const element2 = fixture.debugElement.query(By.css('[class="hidden-content-2"]'));
const element3 = fixture.debugElement.query(By.css('[class="hidden-content-3"]'));
expect(element1).toBeNull();
expect(element2).toBeNull();
expect(element3).toBeNull();
});
});

View File

@@ -0,0 +1,82 @@
/*!
* @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 { Directive, Input, ViewContainerRef, TemplateRef } from '@angular/core';
import { VersionCompatibilityService } from '../services/version-compatibility.service';
import { VersionModel } from '../models/product-version.model';
@Directive({
selector: '[adf-acs-version]'
})
export class VersionCompatibilityDirective {
/** Minimum version required for component to work correctly . */
@Input('adf-acs-version')
set version(requiredVersion: string) {
this.validateAcsVersion(requiredVersion);
}
constructor(
private templateRef: TemplateRef<any>,
private viewContainer: ViewContainerRef,
private versionCompatibilityService: VersionCompatibilityService
) {
}
private validateAcsVersion(requiredVersion: string) {
if (requiredVersion && this.isVersionSupported(requiredVersion)) {
this.viewContainer.createEmbeddedView(this.templateRef);
} else {
this.viewContainer.clear();
}
}
private parseVersion(version: string): VersionModel {
const major = version.split('.')[0];
const minor = version.split('.')[1] || '0';
const patch = version.split('.')[2] || '0';
return {
major: major,
minor: minor,
patch: patch
} as VersionModel;
}
private isVersionSupported(requiredVersion: string): boolean {
const parsedRequiredVersion = this.parseVersion(requiredVersion);
const currentVersion = this.versionCompatibilityService.getAcsVersion();
let versionSupported = false;
if (currentVersion) {
if (+currentVersion.major > +parsedRequiredVersion.major) {
versionSupported = true;
} else if (currentVersion.major === parsedRequiredVersion.major &&
+currentVersion.minor > +parsedRequiredVersion.minor) {
versionSupported = true;
} else if (currentVersion.major === parsedRequiredVersion.major &&
currentVersion.minor === parsedRequiredVersion.minor &&
+currentVersion.patch >= +parsedRequiredVersion.patch) {
versionSupported = true;
}
}
return versionSupported;
}
}

View File

@@ -24,7 +24,6 @@ import { Subject } from 'rxjs';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { UserPreferencesService } from '../services/user-preferences.service'; import { UserPreferencesService } from '../services/user-preferences.service';
import { setupTestBed } from '../testing/setup-test-bed'; import { setupTestBed } from '../testing/setup-test-bed';
import { CoreModule } from '../core.module';
describe('SearchTextInputComponent', () => { describe('SearchTextInputComponent', () => {
@@ -37,7 +36,6 @@ describe('SearchTextInputComponent', () => {
setupTestBed({ setupTestBed({
imports: [ imports: [
TranslateModule.forRoot(), TranslateModule.forRoot(),
CoreModule.forRoot(),
CoreTestingModule CoreTestingModule
] ]
}); });
@@ -58,6 +56,7 @@ describe('SearchTextInputComponent', () => {
describe('component rendering', () => { describe('component rendering', () => {
it('should display a search input field when specified', async(() => { it('should display a search input field when specified', async(() => {
fixture.detectChanges();
component.inputType = 'search'; component.inputType = 'search';
fixture.detectChanges(); fixture.detectChanges();
expect(element.querySelectorAll('input[type="search"]').length).toBe(1); expect(element.querySelectorAll('input[type="search"]').length).toBe(1);
@@ -68,15 +67,17 @@ describe('SearchTextInputComponent', () => {
beforeEach(() => { beforeEach(() => {
component.expandable = false; component.expandable = false;
fixture.detectChanges();
}); });
it('search button should be hide', () => { it('search button should be hide', () => {
fixture.detectChanges();
const searchButton: any = element.querySelector('#adf-search-button'); const searchButton: any = element.querySelector('#adf-search-button');
expect(searchButton).toBe(null); expect(searchButton).toBe(null);
}); });
it('should not have animation', () => { it('should not have animation', () => {
userPreferencesService.setWithoutStore('textOrientation', 'rtl');
fixture.detectChanges();
expect(component.subscriptAnimationState.value).toBe('no-animation'); expect(component.subscriptAnimationState.value).toBe('no-animation');
}); });
}); });

View File

@@ -61,4 +61,5 @@ export * from './ecm-user.service';
export * from './identity-user.service'; export * from './identity-user.service';
export * from './identity-group.service'; export * from './identity-group.service';
export * from './identity-role.service'; export * from './identity-role.service';
export * from './version-compatibility.service';
export * from './auth-bearer.interceptor'; export * from './auth-bearer.interceptor';

View File

@@ -0,0 +1,22 @@
/*!
* @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 { VersionCompatibilityService } from './version-compatibility.service';
export function versionCompatibilityFactory(
versionCompatibilityService: VersionCompatibilityService
): Function { return () => versionCompatibilityService; }

View File

@@ -0,0 +1,75 @@
/*!
* @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 { TestBed } from '@angular/core/testing';
import { AppConfigService } from '../app-config/app-config.service';
import { DiscoveryApiService } from './discovery-api.service';
import { setupTestBed } from '../testing/setup-test-bed';
import { CoreTestingModule } from '../testing/core.testing.module';
import { AlfrescoApiServiceMock } from '../mock/alfresco-api.service.mock';
import { VersionCompatibilityService } from './version-compatibility.service';
import { of } from 'rxjs';
import { TranslateModule } from '@ngx-translate/core';
import { AuthenticationService } from './authentication.service';
describe('VersionCompatibilityService', () => {
let versionCompatibilityService: VersionCompatibilityService;
let alfrescoApiService: AlfrescoApiServiceMock;
let discoveryApiService: DiscoveryApiService;
let authenticationService: AuthenticationService;
const acsResponceMock = {
version: {
display: '7.0.1',
major: '7',
minor: '0',
patch: '1'
}
};
setupTestBed({
imports: [
TranslateModule.forRoot(),
CoreTestingModule
]
});
beforeEach(() => {
discoveryApiService = TestBed.get(DiscoveryApiService);
authenticationService = TestBed.get(AuthenticationService);
spyOn(discoveryApiService, 'getEcmProductInfo').and.returnValue(of(acsResponceMock));
spyOn(authenticationService, 'isEcmLoggedIn').and.returnValue(true);
versionCompatibilityService = TestBed.get(VersionCompatibilityService);
alfrescoApiService = new AlfrescoApiServiceMock(new AppConfigService(null), null);
});
it('should get ACS running version', (done) => {
versionCompatibilityService = new VersionCompatibilityService(
alfrescoApiService,
authenticationService,
discoveryApiService
);
alfrescoApiService.initialize();
setTimeout(() => {
const acsVersion = versionCompatibilityService.getAcsVersion();
expect(acsVersion).toBeDefined();
expect(acsVersion.display).toBe('7.0.1');
done();
}, 100);
});
});

View File

@@ -0,0 +1,53 @@
/*!
* @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 { Injectable } from '@angular/core';
import { AlfrescoApiService } from './alfresco-api.service';
import { filter } from 'rxjs/operators';
import { DiscoveryApiService } from './discovery-api.service';
import { VersionModel, EcmProductVersionModel } from '../models/product-version.model';
import { AuthenticationService } from './authentication.service';
@Injectable({
providedIn: 'root'
})
export class VersionCompatibilityService {
private acsVersion: VersionModel;
constructor(
private alfrescoApiService: AlfrescoApiService,
private authService: AuthenticationService,
private discoveryApiService: DiscoveryApiService
) {
this.alfrescoApiService.alfrescoApiInitialized
.pipe(filter(status => status))
.subscribe(this.initCompatibilityVersion.bind(this));
}
private initCompatibilityVersion() {
if (this.authService.isEcmLoggedIn()) {
this.discoveryApiService.getEcmProductInfo().toPromise().then(
(acsInfo: EcmProductVersionModel) => {
this.acsVersion = acsInfo.version;
});
}
}
public getAcsVersion(): VersionModel {
return this.acsVersion;
}
}

View File

@@ -32,6 +32,8 @@ import { CookieServiceMock } from '../mock/cookie.service.mock';
import { HttpClientModule } from '@angular/common/http'; import { HttpClientModule } from '@angular/common/http';
import { directionalityConfigFactory } from '../services/directionality-config-factory'; import { directionalityConfigFactory } from '../services/directionality-config-factory';
import { DirectionalityConfigService } from '../services/directionality-config.service'; import { DirectionalityConfigService } from '../services/directionality-config.service';
import { versionCompatibilityFactory } from '../services/version-compatibility-factory';
import { VersionCompatibilityService } from '../services/version-compatibility.service';
@NgModule({ @NgModule({
imports: [ imports: [
@@ -52,6 +54,12 @@ import { DirectionalityConfigService } from '../services/directionality-config.s
useFactory: directionalityConfigFactory, useFactory: directionalityConfigFactory,
deps: [ DirectionalityConfigService ], deps: [ DirectionalityConfigService ],
multi: true multi: true
},
{
provide: APP_INITIALIZER,
useFactory: versionCompatibilityFactory,
deps: [ VersionCompatibilityService ],
multi: true
} }
], ],
exports: [ exports: [

View File

@@ -17,7 +17,7 @@
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { throwError } from 'rxjs'; import { throwError } from 'rxjs';
import { setupTestBed, CoreModule, AppConfigService, AlfrescoApiService } from '@alfresco/adf-core'; import { setupTestBed, AppConfigService, AlfrescoApiService, CoreTestingModule } from '@alfresco/adf-core';
import { HttpErrorResponse } from '@angular/common/http'; import { HttpErrorResponse } from '@angular/common/http';
import { AppsProcessCloudService } from './apps-process-cloud.service'; import { AppsProcessCloudService } from './apps-process-cloud.service';
import { fakeApplicationInstance } from '../mock/app-model.mock'; import { fakeApplicationInstance } from '../mock/app-model.mock';
@@ -40,7 +40,7 @@ describe('AppsProcessCloudService', () => {
setupTestBed({ setupTestBed({
imports: [ imports: [
TranslateModule.forRoot(), TranslateModule.forRoot(),
CoreModule.forRoot(), CoreTestingModule,
ProcessServiceCloudTestingModule ProcessServiceCloudTestingModule
] ]
}); });

View File

@@ -29,7 +29,8 @@ import {
FormOutcomeModel, FormOutcomeModel,
setupTestBed, setupTestBed,
TRANSLATION_PROVIDER, TRANSLATION_PROVIDER,
WidgetVisibilityService WidgetVisibilityService,
VersionCompatibilityService
} from '@alfresco/adf-core'; } from '@alfresco/adf-core';
import { ProcessServiceCloudTestingModule } from '../../testing/process-service-cloud.testing.module'; import { ProcessServiceCloudTestingModule } from '../../testing/process-service-cloud.testing.module';
import { FormCloudService } from '../services/form-cloud.service'; import { FormCloudService } from '../services/form-cloud.service';
@@ -68,7 +69,7 @@ describe('FormCloudComponent', () => {
exports: [CustomWidget], exports: [CustomWidget],
entryComponents: [CustomWidget] entryComponents: [CustomWidget]
}) })
class CustomUploadModule {} class CustomUploadModule { }
function buildWidget(type: string, injector: Injector): any { function buildWidget(type: string, injector: Injector): any {
const resolver = formRenderingService.getComponentTypeResolver(type); const resolver = formRenderingService.getComponentTypeResolver(type);
@@ -97,6 +98,10 @@ describe('FormCloudComponent', () => {
name: 'app', name: 'app',
source: 'resources' source: 'resources'
} }
},
{
provide: VersionCompatibilityService,
useValue: {}
} }
] ]
}); });
@@ -116,7 +121,7 @@ describe('FormCloudComponent', () => {
fixture = TestBed.createComponent(FormCloudComponent); fixture = TestBed.createComponent(FormCloudComponent);
formComponent = fixture.componentInstance; formComponent = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
})); }));
it('should register custom [upload] widget', () => { it('should register custom [upload] widget', () => {
const widget = buildWidget('upload', fixture.componentRef.injector); const widget = buildWidget('upload', fixture.componentRef.injector);
@@ -190,7 +195,7 @@ describe('FormCloudComponent', () => {
expect(formComponent.showTitle).toBeTruthy(); expect(formComponent.showTitle).toBeTruthy();
expect(formComponent.isTitleEnabled()).toBeTruthy(); expect(formComponent.isTitleEnabled()).toBeTruthy();
}); });
it('should not allow title if showTitle is false', () => { it('should not allow title if showTitle is false', () => {
const formModel = new FormModel(); const formModel = new FormModel();
@@ -370,7 +375,7 @@ describe('FormCloudComponent', () => {
spyOn(formCloudService, 'getTaskForm').and.returnValue(of(cloudFormMock)); spyOn(formCloudService, 'getTaskForm').and.returnValue(of(cloudFormMock));
spyOn(formCloudService, 'getTaskVariables').and.returnValue(of([])); spyOn(formCloudService, 'getTaskVariables').and.returnValue(of([]));
spyOn(formCloudService, 'getProcessStorageFolderTask') spyOn(formCloudService, 'getProcessStorageFolderTask')
.and.returnValue( of({nodeId : '123', path: '/a/path/type', type: 'fakeType'})); .and.returnValue(of({ nodeId: '123', path: '/a/path/type', type: 'fakeType' }));
const taskId = '<task id>'; const taskId = '<task id>';
const appName = 'test-app'; const appName = 'test-app';
formComponent.appName = appName; formComponent.appName = appName;
@@ -389,7 +394,7 @@ describe('FormCloudComponent', () => {
spyOn(formCloudService, 'getTaskForm').and.returnValue(of(cloudFormMock)); spyOn(formCloudService, 'getTaskForm').and.returnValue(of(cloudFormMock));
spyOn(formCloudService, 'getTaskVariables').and.returnValue(of([])); spyOn(formCloudService, 'getTaskVariables').and.returnValue(of([]));
spyOn(formCloudService, 'getProcessStorageFolderTask') spyOn(formCloudService, 'getProcessStorageFolderTask')
.and.returnValue( of({nodeId : '123', path: '/a/path/type', type: 'fakeType'})); .and.returnValue(of({ nodeId: '123', path: '/a/path/type', type: 'fakeType' }));
const taskId = '<task id>'; const taskId = '<task id>';
const processInstanceId = 'i-am-the-process-instance-id'; const processInstanceId = 'i-am-the-process-instance-id';
const appName = 'test-app'; const appName = 'test-app';
@@ -947,7 +952,7 @@ describe('FormCloudComponent', () => {
}); });
formComponent.ngOnChanges({ 'data': change }); formComponent.ngOnChanges({ 'data': change });
}); });
it('should refresh radio buttons value when id is given to data', () => { it('should refresh radio buttons value when id is given to data', () => {
formComponent.form = new FormModel(JSON.parse(JSON.stringify(cloudFormMock))); formComponent.form = new FormModel(JSON.parse(JSON.stringify(cloudFormMock)));
@@ -990,7 +995,7 @@ describe('FormCloudComponent', () => {
}); });
describe('Multilingual Form', () => { describe('Multilingual Form', () => {
it('should translate form labels on language change', async () => { it('should translate form labels on language change', async () => {
spyOn(formCloudService, 'getForm').and.returnValue(of(multilingualForm)); spyOn(formCloudService, 'getForm').and.returnValue(of(multilingualForm));
const formId = '123'; const formId = '123';
const appName = 'test-app'; const appName = 'test-app';

View File

@@ -27,7 +27,7 @@ import {
IdentityGroupService, IdentityGroupService,
mockIdentityGroups, mockIdentityGroups,
AlfrescoApiService, AlfrescoApiService,
CoreModule CoreTestingModule
} from '@alfresco/adf-core'; } from '@alfresco/adf-core';
import { SimpleChange } from '@angular/core'; import { SimpleChange } from '@angular/core';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
@@ -53,7 +53,7 @@ describe('GroupCloudComponent', () => {
setupTestBed({ setupTestBed({
imports: [ imports: [
TranslateModule.forRoot(), TranslateModule.forRoot(),
CoreModule.forRoot(), CoreTestingModule,
ProcessServiceCloudTestingModule, ProcessServiceCloudTestingModule,
GroupCloudModule GroupCloudModule
] ]

View File

@@ -20,9 +20,9 @@ import { ComponentFixture, TestBed, async } from '@angular/core/testing';
import { import {
IdentityUserService, IdentityUserService,
AlfrescoApiService, AlfrescoApiService,
CoreModule,
setupTestBed, setupTestBed,
IdentityUserModel IdentityUserModel,
CoreTestingModule
} from '@alfresco/adf-core'; } from '@alfresco/adf-core';
import { ProcessServiceCloudTestingModule } from '../../testing/process-service-cloud.testing.module'; import { ProcessServiceCloudTestingModule } from '../../testing/process-service-cloud.testing.module';
import { of } from 'rxjs'; import { of } from 'rxjs';
@@ -58,7 +58,7 @@ describe('PeopleCloudComponent', () => {
setupTestBed({ setupTestBed({
imports: [ imports: [
TranslateModule.forRoot(), TranslateModule.forRoot(),
CoreModule.forRoot(), CoreTestingModule,
ProcessServiceCloudTestingModule, ProcessServiceCloudTestingModule,
PeopleCloudModule PeopleCloudModule
] ]

View File

@@ -21,7 +21,7 @@ import { ContentModule, ContentNodeSelectorPanelComponent } from '@alfresco/adf-
import { EventEmitter } from '@angular/core'; import { EventEmitter } from '@angular/core';
import { ProcessTestingModule } from '../testing/process.testing.module'; import { ProcessTestingModule } from '../testing/process.testing.module';
import { AttachFileWidgetDialogComponent } from './attach-file-widget-dialog.component'; import { AttachFileWidgetDialogComponent } from './attach-file-widget-dialog.component';
import { setupTestBed, AuthenticationService, SitesService, CoreModule } from '@alfresco/adf-core'; import { setupTestBed, AuthenticationService, SitesService } from '@alfresco/adf-core';
import { AttachFileWidgetDialogComponentData } from './attach-file-widget-dialog-component.interface'; import { AttachFileWidgetDialogComponentData } from './attach-file-widget-dialog-component.interface';
import { of } from 'rxjs'; import { of } from 'rxjs';
import { By } from '@angular/platform-browser'; import { By } from '@angular/platform-browser';
@@ -47,7 +47,6 @@ describe('AttachFileWidgetDialogComponent', () => {
setupTestBed({ setupTestBed({
imports: [ imports: [
TranslateModule.forRoot(), TranslateModule.forRoot(),
CoreModule.forRoot(),
ProcessTestingModule, ProcessTestingModule,
ContentModule.forRoot() ContentModule.forRoot()
], ],
@@ -73,6 +72,7 @@ describe('AttachFileWidgetDialogComponent', () => {
}); });
it('should be able to create the widget', () => { it('should be able to create the widget', () => {
fixture.detectChanges();
expect(widget).not.toBeNull(); expect(widget).not.toBeNull();
}); });