[AAE-4966] Extensible app config (#6914)

* merge app config from the extensions

* improved service injection in unit tests

* extra unit test

* fix content tests

* update code as per review

* fix lint

* fix lint

* update code and tests

* update schema
This commit is contained in:
Denys Vuika
2021-04-13 14:16:29 +01:00
committed by GitHub
parent bd8242922b
commit 84ce202ad2
54 changed files with 383 additions and 204 deletions

View File

@@ -37,6 +37,9 @@ describe('AppListCloudComponent', () => {
const mock = {
oauth2Auth: {
callCustomApi: () => Promise.resolve(fakeApplicationInstance)
},
isEcmLoggedIn() {
return false;
}
};

View File

@@ -33,6 +33,9 @@ describe('AppsProcessCloudService', () => {
const apiMock = {
oauth2Auth: {
callCustomApi: () => Promise.resolve({list : { entries: [ {entry: fakeApplicationInstance[0]}, {entry: fakeApplicationInstance[1]}] }})
},
isEcmLoggedIn() {
return false;
}
};
@@ -41,14 +44,19 @@ describe('AppsProcessCloudService', () => {
TranslateModule.forRoot(),
CoreTestingModule,
ProcessServiceCloudTestingModule
],
providers: [
AlfrescoApiService,
AppConfigService
]
});
beforeEach(() => {
service = TestBed.inject(AppsProcessCloudService);
appConfigService = TestBed.inject(AppConfigService);
apiService = TestBed.inject(AlfrescoApiService);
spyOn(apiService, 'getInstance').and.returnValue(apiMock);
service = TestBed.inject(AppsProcessCloudService);
appConfigService = TestBed.inject(AppConfigService);
});
it('should get the deployed applications no apps are specified in app.config', (done) => {

View File

@@ -49,7 +49,13 @@ describe('Form Cloud service', () => {
beforeEach(() => {
service = TestBed.inject(FormCloudService);
apiService = TestBed.inject(AlfrescoApiService);
spyOn(apiService, 'getInstance').and.returnValue({ oauth2Auth: oauth2Auth });
spyOn(apiService, 'getInstance').and.returnValue({
oauth2Auth: oauth2Auth,
isEcmLoggedIn() {
return false;
}
});
});
describe('Form tests', () => {

View File

@@ -70,7 +70,12 @@ describe('Form Definition Selector Cloud Service', () => {
beforeEach(() => {
service = TestBed.inject(FormDefinitionSelectorCloudService);
apiService = TestBed.inject(AlfrescoApiService);
spyOn(apiService, 'getInstance').and.returnValue({ oauth2Auth: oauth2Auth });
spyOn(apiService, 'getInstance').and.returnValue({
oauth2Auth: oauth2Auth,
isEcmLoggedIn() {
return false;
}
});
});
it('should fetch all the forms when getForms is called', (done) => {

View File

@@ -43,6 +43,9 @@ describe('GroupCloudComponent', () => {
const mock = {
oauth2Auth: {
callCustomApi: () => Promise.resolve(mockIdentityGroups)
},
isEcmLoggedIn() {
return false;
}
};

View File

@@ -43,6 +43,9 @@ describe('PeopleCloudComponent', () => {
const mock = {
oauth2Auth: {
callCustomApi: () => Promise.resolve(mockUsers)
},
isEcmLoggedIn() {
return false;
}
};

View File

@@ -67,14 +67,17 @@ describe('EditProcessFilterCloudComponent', () => {
const mock = {
oauth2Auth: {
callCustomApi: () => Promise.resolve(fakeApplicationInstance)
},
isEcmLoggedIn() {
return false;
}
};
setupTestBed({
imports: [
TranslateModule.forRoot(),
ProcessServiceCloudTestingModule,
ProcessFiltersCloudModule,
ProcessServiceCloudTestingModule,
MatIconTestingModule
],
providers: [

View File

@@ -14,14 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { async } from '@angular/core/testing';
import { setupTestBed, StorageService, AlfrescoApiServiceMock, LogService, AppConfigService, CoreModule } from '@alfresco/adf-core';
import { async, TestBed } from '@angular/core/testing';
import { setupTestBed, AlfrescoApiService } from '@alfresco/adf-core';
import { ProcessListCloudService } from './process-list-cloud.service';
import { ProcessQueryCloudRequestModel } from '../models/process-cloud-query-request.model';
import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module';
describe('ProcessListCloudService', () => {
let service: ProcessListCloudService;
let alfrescoApiMock: AlfrescoApiServiceMock;
let alfrescoApiService: AlfrescoApiService;
function returnCallQueryParameters() {
return {
@@ -29,6 +30,9 @@ describe('ProcessListCloudService', () => {
callCustomApi: (_queryUrl, _operation, _context, queryParams) => {
return Promise.resolve(queryParams);
}
},
isEcmLoggedIn() {
return false;
}
};
}
@@ -39,26 +43,27 @@ describe('ProcessListCloudService', () => {
callCustomApi: (queryUrl) => {
return Promise.resolve(queryUrl);
}
},
isEcmLoggedIn() {
return false;
}
};
}
setupTestBed({
imports: [
CoreModule.forRoot()
ProcessServiceCloudTestingModule
]
});
beforeEach(async(() => {
alfrescoApiMock = new AlfrescoApiServiceMock(new AppConfigService(null), new StorageService());
service = new ProcessListCloudService(alfrescoApiMock,
new AppConfigService(null),
new LogService(new AppConfigService(null)));
alfrescoApiService = TestBed.inject(AlfrescoApiService);
service = TestBed.inject(ProcessListCloudService);
}));
it('should append to the call all the parameters', (done) => {
const processRequest: ProcessQueryCloudRequestModel = <ProcessQueryCloudRequestModel> { appName: 'fakeName', skipCount: 0, maxItems: 20, service: 'fake-service' };
spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnCallQueryParameters);
spyOn(alfrescoApiService, 'getInstance').and.callFake(returnCallQueryParameters);
service.getProcessByRequest(processRequest).subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
@@ -71,7 +76,7 @@ describe('ProcessListCloudService', () => {
it('should concat the app name to the request url', (done) => {
const processRequest: ProcessQueryCloudRequestModel = <ProcessQueryCloudRequestModel> { appName: 'fakeName', skipCount: 0, maxItems: 20, service: 'fake-service' };
spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnCallUrl);
spyOn(alfrescoApiService, 'getInstance').and.callFake(returnCallUrl);
service.getProcessByRequest(processRequest).subscribe((requestUrl) => {
expect(requestUrl).toBeDefined();
expect(requestUrl).not.toBeNull();
@@ -85,7 +90,7 @@ describe('ProcessListCloudService', () => {
appName: 'fakeName', skipCount: 0, maxItems: 20, service: 'fake-service',
sorting: [{ orderBy: 'NAME', direction: 'DESC' }, { orderBy: 'TITLE', direction: 'ASC' }]
};
spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnCallQueryParameters);
spyOn(alfrescoApiService, 'getInstance').and.callFake(returnCallQueryParameters);
service.getProcessByRequest(processRequest).subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
@@ -96,7 +101,7 @@ describe('ProcessListCloudService', () => {
it('should return an error when app name is not specified', (done) => {
const processRequest: ProcessQueryCloudRequestModel = <ProcessQueryCloudRequestModel> { appName: null };
spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnCallUrl);
spyOn(alfrescoApiService, 'getInstance').and.callFake(returnCallUrl);
service.getProcessByRequest(processRequest).subscribe(
() => { },
(error) => {

View File

@@ -37,6 +37,9 @@ describe('StartProcessCloudService', () => {
status: 'RUNNING'
}
})
},
isEcmLoggedIn() {
return false;
}
};

View File

@@ -46,6 +46,9 @@ describe('NotificationCloudService', () => {
const apiServiceMock = {
oauth2Auth: {
token: '1234567'
},
isEcmLoggedIn() {
return false;
}
};

View File

@@ -39,6 +39,9 @@ describe('PreferenceService', () => {
callCustomApi: () => {
return Promise.resolve(mockResponse);
}
},
isEcmLoggedIn() {
return false;
}
};
}
@@ -46,6 +49,9 @@ describe('PreferenceService', () => {
const apiErrorMock = {
oauth2Auth: {
callCustomApi: () => Promise.reject(errorResponse)
},
isEcmLoggedIn() {
return false;
}
};

View File

@@ -38,6 +38,9 @@ describe('Task Cloud Service', () => {
callCustomApi : () => {
return Promise.resolve(taskCompleteCloudMock);
}
},
isEcmLoggedIn() {
return false;
}
};
}
@@ -48,6 +51,9 @@ describe('Task Cloud Service', () => {
callCustomApi : () => {
return Promise.reject(taskCompleteCloudMock);
}
},
isEcmLoggedIn() {
return false;
}
};
}
@@ -58,6 +64,9 @@ describe('Task Cloud Service', () => {
callCustomApi : () => {
return Promise.resolve(fakeTaskDetailsCloud);
}
},
isEcmLoggedIn() {
return false;
}
};
}
@@ -68,6 +77,9 @@ describe('Task Cloud Service', () => {
callCustomApi : () => {
return Promise.resolve(['mockuser1', 'mockuser2', 'mockuser3']);
}
},
isEcmLoggedIn() {
return false;
}
};
}
@@ -78,6 +90,9 @@ describe('Task Cloud Service', () => {
callCustomApi : () => {
return Promise.resolve(['mockgroup1', 'mockgroup2', 'mockgroup3']);
}
},
isEcmLoggedIn() {
return false;
}
};
}

View File

@@ -41,6 +41,9 @@ describe('StartTaskCloudComponent', () => {
const mock = {
oauth2Auth: {
callCustomApi: () => Promise.resolve(taskDetailsMock)
},
isEcmLoggedIn() {
return false;
}
};

View File

@@ -54,6 +54,9 @@ describe('EditTaskFilterCloudComponent', () => {
const mock = {
oauth2Auth: {
callCustomApi: () => Promise.resolve(fakeApplicationInstance)
},
isEcmLoggedIn() {
return false;
}
};

View File

@@ -16,14 +16,7 @@
*/
import { TestBed } from '@angular/core/testing';
import {
AlfrescoApiService,
AlfrescoApiServiceMock,
AppConfigService,
AppConfigServiceMock,
IdentityUserService,
setupTestBed
} from '@alfresco/adf-core';
import { IdentityUserService, setupTestBed } from '@alfresco/adf-core';
import { of } from 'rxjs';
import { TASK_FILTERS_SERVICE_TOKEN } from '../../../services/cloud-token.service';
import { LocalPreferenceCloudService } from '../../../services/local-preference-cloud.service';
@@ -42,6 +35,7 @@ import { HttpClientTestingModule } from '@angular/common/http/testing';
import { TaskFilterCloudModel } from '../models/filter-cloud.model';
import { NotificationCloudService } from '../../../services/notification-cloud.service';
import { TaskCloudEngineEvent } from './../../../models/engine-event-cloud.model';
import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module';
describe('TaskFilterCloudService', () => {
let service: TaskFilterCloudService;
@@ -57,12 +51,11 @@ describe('TaskFilterCloudService', () => {
setupTestBed({
imports: [
HttpClientTestingModule
HttpClientTestingModule,
ProcessServiceCloudTestingModule
],
providers: [
{ provide: TASK_FILTERS_SERVICE_TOKEN, useClass: UserPreferenceCloudService },
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
{ provide: AppConfigService, useClass: AppConfigServiceMock }
{ provide: TASK_FILTERS_SERVICE_TOKEN, useClass: UserPreferenceCloudService }
]
});

View File

@@ -52,6 +52,9 @@ describe('TaskHeaderCloudComponent', () => {
const mock = {
oauth2Auth: {
callCustomApi: () => Promise.resolve({})
},
isEcmLoggedIn() {
return false;
}
};

View File

@@ -15,15 +15,16 @@
* limitations under the License.
*/
import { async } from '@angular/core/testing';
import { setupTestBed, StorageService, AlfrescoApiServiceMock, LogService, AppConfigService, CoreModule } from '@alfresco/adf-core';
import { async, TestBed } from '@angular/core/testing';
import { setupTestBed, AlfrescoApiService } from '@alfresco/adf-core';
import { ServiceTaskListCloudService } from './service-task-list-cloud.service';
import { ServiceTaskQueryCloudRequestModel } from '../models/service-task-cloud.model';
import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module';
describe('Activiti ServiceTaskList Cloud Service', () => {
let service: ServiceTaskListCloudService;
let alfrescoApiMock: AlfrescoApiServiceMock;
let alfrescoApiService: AlfrescoApiService;
function returnCallQueryParameters() {
return {
@@ -31,6 +32,9 @@ describe('Activiti ServiceTaskList Cloud Service', () => {
callCustomApi: (_queryUrl, _operation, _context, queryParams) => {
return Promise.resolve(queryParams);
}
},
isEcmLoggedIn() {
return false;
}
};
}
@@ -41,26 +45,27 @@ describe('Activiti ServiceTaskList Cloud Service', () => {
callCustomApi: (queryUrl) => {
return Promise.resolve(queryUrl);
}
},
isEcmLoggedIn() {
return false;
}
};
}
setupTestBed({
imports: [
CoreModule.forRoot()
ProcessServiceCloudTestingModule
]
});
beforeEach(async(() => {
alfrescoApiMock = new AlfrescoApiServiceMock(new AppConfigService(null), new StorageService());
service = new ServiceTaskListCloudService(alfrescoApiMock,
new AppConfigService(null),
new LogService(new AppConfigService(null)));
alfrescoApiService = TestBed.inject(AlfrescoApiService);
service = TestBed.inject(ServiceTaskListCloudService);
}));
it('should append to the call all the parameters', (done) => {
const taskRequest: ServiceTaskQueryCloudRequestModel = <ServiceTaskQueryCloudRequestModel> { appName: 'fakeName', skipCount: 0, maxItems: 20, service: 'fake-service' };
spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnCallQueryParameters);
spyOn(alfrescoApiService, 'getInstance').and.callFake(returnCallQueryParameters);
service.getServiceTaskByRequest(taskRequest).subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
@@ -73,7 +78,7 @@ describe('Activiti ServiceTaskList Cloud Service', () => {
it('should concat the app name to the request url', (done) => {
const taskRequest: ServiceTaskQueryCloudRequestModel = <ServiceTaskQueryCloudRequestModel> { appName: 'fakeName', skipCount: 0, maxItems: 20, service: 'fake-service' };
spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnCallUrl);
spyOn(alfrescoApiService, 'getInstance').and.callFake(returnCallUrl);
service.getServiceTaskByRequest(taskRequest).subscribe((requestUrl) => {
expect(requestUrl).toBeDefined();
expect(requestUrl).not.toBeNull();
@@ -87,7 +92,7 @@ describe('Activiti ServiceTaskList Cloud Service', () => {
appName: 'fakeName', skipCount: 0, maxItems: 20, service: 'fake-service',
sorting: [{ orderBy: 'NAME', direction: 'DESC' }, { orderBy: 'TITLE', direction: 'ASC' }]
};
spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnCallQueryParameters);
spyOn(alfrescoApiService, 'getInstance').and.callFake(returnCallQueryParameters);
service.getServiceTaskByRequest(taskRequest).subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
@@ -98,7 +103,7 @@ describe('Activiti ServiceTaskList Cloud Service', () => {
it('should return an error when app name is not specified', (done) => {
const taskRequest: ServiceTaskQueryCloudRequestModel = <ServiceTaskQueryCloudRequestModel> { appName: null };
spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnCallUrl);
spyOn(alfrescoApiService, 'getInstance').and.callFake(returnCallUrl);
service.getServiceTaskByRequest(taskRequest).subscribe(
() => { },
(error) => {

View File

@@ -15,15 +15,17 @@
* limitations under the License.
*/
import { async } from '@angular/core/testing';
import { setupTestBed, StorageService, AlfrescoApiServiceMock, LogService, AppConfigService, CoreModule } from '@alfresco/adf-core';
import { TestBed } from '@angular/core/testing';
import { setupTestBed, AlfrescoApiService } from '@alfresco/adf-core';
import { TaskListCloudService } from './task-list-cloud.service';
import { TaskQueryCloudRequestModel } from '../models/filter-cloud-model';
import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module';
import { TranslateModule } from '@ngx-translate/core';
describe('TaskListCloudService', () => {
let service: TaskListCloudService;
let alfrescoApiMock: AlfrescoApiServiceMock;
let alfrescoApiService: AlfrescoApiService;
function returnCallQueryParameters() {
return {
@@ -31,6 +33,9 @@ describe('TaskListCloudService', () => {
callCustomApi : (_queryUrl, _operation, _context, queryParams) => {
return Promise.resolve(queryParams);
}
},
isEcmLoggedIn() {
return false;
}
};
}
@@ -41,26 +46,28 @@ describe('TaskListCloudService', () => {
callCustomApi : (queryUrl) => {
return Promise.resolve(queryUrl);
}
},
isEcmLoggedIn() {
return false;
}
};
}
setupTestBed({
imports: [
CoreModule.forRoot()
TranslateModule.forRoot(),
ProcessServiceCloudTestingModule
]
});
beforeEach(async(() => {
alfrescoApiMock = new AlfrescoApiServiceMock(new AppConfigService(null), new StorageService());
service = new TaskListCloudService(alfrescoApiMock,
new AppConfigService(null),
new LogService(new AppConfigService(null)));
}));
beforeEach(() => {
alfrescoApiService = TestBed.inject(AlfrescoApiService);
service = TestBed.inject(TaskListCloudService);
});
it('should append to the call all the parameters', (done) => {
const taskRequest: TaskQueryCloudRequestModel = <TaskQueryCloudRequestModel> { appName: 'fakeName', skipCount: 0, maxItems: 20, service: 'fake-service' };
spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnCallQueryParameters);
spyOn(alfrescoApiService, 'getInstance').and.callFake(returnCallQueryParameters);
service.getTaskByRequest(taskRequest).subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
@@ -73,7 +80,7 @@ describe('TaskListCloudService', () => {
it('should concat the app name to the request url', (done) => {
const taskRequest: TaskQueryCloudRequestModel = <TaskQueryCloudRequestModel> { appName: 'fakeName', skipCount: 0, maxItems: 20, service: 'fake-service' };
spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnCallUrl);
spyOn(alfrescoApiService, 'getInstance').and.callFake(returnCallUrl);
service.getTaskByRequest(taskRequest).subscribe((requestUrl) => {
expect(requestUrl).toBeDefined();
expect(requestUrl).not.toBeNull();
@@ -85,7 +92,7 @@ describe('TaskListCloudService', () => {
it('should concat the sorting to append as parameters', (done) => {
const taskRequest: TaskQueryCloudRequestModel = <TaskQueryCloudRequestModel> { appName: 'fakeName', skipCount: 0, maxItems: 20, service: 'fake-service',
sorting: [{ orderBy: 'NAME', direction: 'DESC'}, { orderBy: 'TITLE', direction: 'ASC'}] };
spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnCallQueryParameters);
spyOn(alfrescoApiService, 'getInstance').and.callFake(returnCallQueryParameters);
service.getTaskByRequest(taskRequest).subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
@@ -96,7 +103,7 @@ describe('TaskListCloudService', () => {
it('should return an error when app name is not specified', (done) => {
const taskRequest: TaskQueryCloudRequestModel = <TaskQueryCloudRequestModel> { appName: null };
spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnCallUrl);
spyOn(alfrescoApiService, 'getInstance').and.callFake(returnCallUrl);
service.getTaskByRequest(taskRequest).subscribe(
() => { },
(error) => {

View File

@@ -36,9 +36,9 @@ import { RouterTestingModule } from '@angular/router/testing';
HttpClientModule,
NoopAnimationsModule,
RouterTestingModule,
TranslateModule,
CoreModule,
ProcessServicesCloudModule
TranslateModule.forRoot(),
CoreModule.forRoot(),
ProcessServicesCloudModule.forRoot()
],
providers: [
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },