mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[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:
56
docs/core/directives/version-compatibility.directive.md
Normal file
56
docs/core/directives/version-compatibility.directive.md
Normal 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 don’t place the * in front, the app won’t be able to inject the TemplateRef and ViewContainerRef required for this directive to work.
|
||||||
|
```
|
@@ -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
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
@@ -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 {}
|
||||||
|
@@ -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';
|
||||||
|
95
lib/core/directives/version-compatibility.directive.spec.ts
Normal file
95
lib/core/directives/version-compatibility.directive.spec.ts
Normal 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();
|
||||||
|
});
|
||||||
|
});
|
82
lib/core/directives/version-compatibility.directive.ts
Normal file
82
lib/core/directives/version-compatibility.directive.ts
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -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');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -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';
|
||||||
|
22
lib/core/services/version-compatibility-factory.ts
Normal file
22
lib/core/services/version-compatibility-factory.ts
Normal 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; }
|
75
lib/core/services/version-compatibility.service.spec.ts
Normal file
75
lib/core/services/version-compatibility.service.spec.ts
Normal 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);
|
||||||
|
});
|
||||||
|
});
|
53
lib/core/services/version-compatibility.service.ts
Normal file
53
lib/core/services/version-compatibility.service.ts
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
@@ -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: [
|
||||||
|
@@ -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
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
@@ -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';
|
||||||
@@ -97,6 +98,10 @@ describe('FormCloudComponent', () => {
|
|||||||
name: 'app',
|
name: 'app',
|
||||||
source: 'resources'
|
source: 'resources'
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
provide: VersionCompatibilityService,
|
||||||
|
useValue: {}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
@@ -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
|
||||||
]
|
]
|
||||||
|
@@ -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
|
||||||
]
|
]
|
||||||
|
@@ -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();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user