[ACS-6196] await-thenable rule for ESLint, fix issues (#9027)

* fix issues for core lib

* fix content services lib

* fix and cleanup process services

* [ci:force] process services cloud

* [ci:force] align coverage with all libs

* [ci:force] fix the insights
This commit is contained in:
Denys Vuika
2023-10-26 14:33:48 +01:00
committed by GitHub
parent 7ebdce7875
commit ba96ed14b2
45 changed files with 638 additions and 1224 deletions

View File

@@ -29,7 +29,8 @@ import {
AppConfigService,
UploadWidgetContentLinkModel,
LocalizedDatePipe,
NotificationService
NotificationService,
ContentLinkModel
} from '@alfresco/adf-core';
import {
allSourceParams,
@@ -578,11 +579,10 @@ describe('AttachFileCloudWidgetComponent', () => {
});
});
it('should preview file when show is clicked', async () => {
it('should preview file when show is clicked', () => {
spyOn(processCloudContentService, 'getRawContentNode').and.returnValue(of(new Blob()));
await formService.formContentClicked.subscribe((fileClicked: any) => {
expect(fileClicked.nodeId).toBe('fake-properties');
});
let lastValue: ContentLinkModel;
formService.formContentClicked.subscribe((fileClicked) => lastValue = fileClicked);
fixture.detectChanges();
const menuButton = fixture.debugElement.query(By.css('#file-fake-properties-option-menu')).nativeElement as HTMLButtonElement;
@@ -590,6 +590,8 @@ describe('AttachFileCloudWidgetComponent', () => {
fixture.detectChanges();
const showOption = fixture.debugElement.query(By.css('#file-fake-properties-show-file')).nativeElement as HTMLButtonElement;
showOption.click();
expect(lastValue.nodeId).toBe('fake-properties');
});
it('should request form to be updated with metadata when retrieve is clicked', async () => {

View File

@@ -148,7 +148,7 @@ describe('ContentCloudNodeSelectorService', () => {
expect(service.sourceNodeNotFound).toBe(true);
}
await service.openUploadFileDialog('nodeId', 'single', true, true);
service.openUploadFileDialog('nodeId', 'single', true, true);
expect(openDialogSpy).toHaveBeenCalled();
expect(showWarningSpy).toHaveBeenCalledWith('ADF_CLOUD_TASK_FORM.ERROR.DESTINATION_FOLDER_PATH_ERROR');
@@ -167,7 +167,7 @@ describe('ContentCloudNodeSelectorService', () => {
expect(service.sourceNodeNotFound).toBe(true);
}
await service.openUploadFileDialog('nodeId', 'single', true, true);
service.openUploadFileDialog('nodeId', 'single', true, true);
expect(openDialogSpy).toHaveBeenCalled();
expect(showWarningSpy).toHaveBeenCalledWith('ADF_CLOUD_TASK_FORM.ERROR.DESTINATION_FOLDER_PATH_ERROR');

View File

@@ -108,21 +108,18 @@ describe('ProcessFiltersCloudComponent', () => {
expect(filters[2].nativeElement.innerText).toContain('FakeCompletedProcesses');
});
it('should emit an error with a bad response', async () => {
const mockErrorFilterList = {
error: 'wrong request'
};
getProcessFiltersSpy.and.returnValue(throwError(mockErrorFilterList));
it('should emit an error with a bad response', () => {
getProcessFiltersSpy.and.returnValue(throwError('wrong request'));
const appName = 'my-app-1';
const change = new SimpleChange(null, appName, true);
await component.error.subscribe((err) => {
expect(err).toBeDefined();
});
let lastValue: any;
component.error.subscribe((err) => lastValue = err);
component.ngOnChanges({appName: change});
fixture.detectChanges();
expect(lastValue).toBeDefined();
});
it('should emit success with the filters when filters are loaded', async () => {

View File

@@ -63,16 +63,17 @@ describe('ProcessFilterCloudService', () => {
getCurrentUserInfoSpy = spyOn(identityUserService, 'getCurrentUserInfo').and.returnValue(identityUserMock);
});
it('should create processfilter key by using appName and the username', async () => {
await service.getProcessFilters('mock-appName').subscribe((res: any) => {
it('should create processfilter key by using appName and the username', (done) => {
service.getProcessFilters('mock-appName').subscribe((res: any) => {
expect(res).toBeDefined();
expect(getCurrentUserInfoSpy).toHaveBeenCalled();
done();
});
});
it('should create default process filters', async () => {
it('should create default process filters', (done) => {
getPreferencesSpy.and.returnValue(of(fakeEmptyProcessCloudFilterEntries));
await service.getProcessFilters('mock-appName').subscribe((res: any) => {
service.getProcessFilters('mock-appName').subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.length).toBe(3);
@@ -91,12 +92,14 @@ describe('ProcessFilterCloudService', () => {
expect(res[2].id).toBe('3');
expect(res[2].name).toBe('MOCK_PROCESS_NAME_3');
expect(res[2].status).toBe('MOCK-COMPLETED');
expect(createPreferenceSpy).toHaveBeenCalled();
done();
});
expect(createPreferenceSpy).toHaveBeenCalled();
});
it('should fetch the process filters if filters are available', async () => {
await service.getProcessFilters('mock-appName').subscribe((res: any) => {
it('should fetch the process filters if filters are available', (done) => {
service.getProcessFilters('mock-appName').subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.length).toBe(3);
@@ -115,13 +118,16 @@ describe('ProcessFilterCloudService', () => {
expect(res[2].id).toBe('3');
expect(res[2].name).toBe('MOCK_PROCESS_NAME_3');
expect(res[2].status).toBe('MOCK-COMPLETED');
expect(getPreferencesSpy).toHaveBeenCalled();
done();
});
expect(getPreferencesSpy).toHaveBeenCalled();
});
it('should create the process filters in case the filters are not exist in the user preferences', async () => {
it('should create the process filters in case the filters are not exist in the user preferences', (done) => {
getPreferencesSpy.and.returnValue(of(fakeProcessCloudFilterWithDifferentEntries));
await service.getProcessFilters('mock-appName').subscribe((res: any) => {
service.getProcessFilters('mock-appName').subscribe((res: any) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.length).toBe(3);
@@ -140,64 +146,77 @@ describe('ProcessFilterCloudService', () => {
expect(res[2].id).toBe('3');
expect(res[2].name).toBe('MOCK_PROCESS_NAME_3');
expect(res[2].status).toBe('MOCK-COMPLETED');
expect(getPreferencesSpy).toHaveBeenCalled();
expect(createPreferenceSpy).toHaveBeenCalled();
done();
});
expect(getPreferencesSpy).toHaveBeenCalled();
expect(createPreferenceSpy).toHaveBeenCalled();
});
it('should return filter by process filter id', async () => {
await service.getFilterById('mock-appName', '2').subscribe((res: any) => {
it('should return filter by process filter id', (done) => {
service.getFilterById('mock-appName', '2').subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.appName).toBe('mock-appName');
expect(res.id).toBe('2');
expect(res.name).toBe('MOCK_PROCESS_NAME_2');
expect(res.status).toBe('MOCK-RUNNING');
expect(getPreferenceByKeySpy).toHaveBeenCalled();
done();
});
expect(getPreferenceByKeySpy).toHaveBeenCalled();
});
it('should add process filter if filter is not exist in the filters', async () => {
it('should add process filter if filter is not exist in the filters', (done) => {
getPreferenceByKeySpy.and.returnValue(of([]));
await service.getFilterById('mock-appName', '2').subscribe((res: any) => {
service.getFilterById('mock-appName', '2').subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.appName).toBe('mock-appName');
expect(res.id).toBe('2');
expect(res.name).toBe('MOCK_PROCESS_NAME_2');
expect(res.status).toBe('MOCK-RUNNING');
done();
});
});
it('should update filter', async () => {
await service.updateFilter(fakeProcessFilter).subscribe((res: any) => {
it('should update filter', (done) => {
service.updateFilter(fakeProcessFilter).subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.length).toBe(3);
expect(res[0].appName).toBe('mock-appName');
expect(res[1].appName).toBe('mock-appName');
expect(res[2].appName).toBe('mock-appName');
done();
});
});
it('should create process filter when trying to update in case filter is not exist in the filters', async () => {
it('should create process filter when trying to update in case filter is not exist in the filters', (done) => {
getPreferenceByKeySpy.and.returnValue(of([]));
await service.updateFilter(fakeProcessFilter).subscribe((res: any) => {
service.updateFilter(fakeProcessFilter).subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.length).toBe(3);
expect(res[0].appName).toBe('mock-appName');
expect(res[1].appName).toBe('mock-appName');
expect(res[2].appName).toBe('mock-appName');
expect(createPreferenceSpy).toHaveBeenCalled();
done();
});
expect(createPreferenceSpy).toHaveBeenCalled();
});
it('should delete filter', async () => {
await service.deleteFilter(fakeProcessFilter).subscribe((res: any) => {
it('should delete filter', (done) => {
service.deleteFilter(fakeProcessFilter).subscribe((res) => {
expect(res).toBeDefined();
expect(updatePreferenceSpy).toHaveBeenCalled();
done();
});
expect(updatePreferenceSpy).toHaveBeenCalled();
});
it('should check if given filter is a default filter', () => {

View File

@@ -16,9 +16,9 @@
*/
import { Injectable, Inject } from '@angular/core';
import { Observable, of, BehaviorSubject, throwError } from 'rxjs';
import { Observable, of, BehaviorSubject } from 'rxjs';
import { ProcessFilterCloudModel } from '../models/process-filter-cloud.model';
import { switchMap, map, catchError } from 'rxjs/operators';
import { switchMap, map } from 'rxjs/operators';
import { PROCESS_FILTERS_SERVICE_TOKEN } from '../../../services/cloud-token.service';
import { PreferenceCloudServiceInterface } from '../../../services/preference-cloud.interface';
import { IdentityUserService } from '../../../people/services/identity-user.service';
@@ -100,7 +100,7 @@ export class ProcessFilterCloudService {
this.preferenceService
.getPreferences(appName, key)
.pipe(
switchMap((response: any) => {
switchMap((response) => {
const preferences = response?.list?.entries ? response.list.entries : [];
if (!this.hasPreferences(preferences)) {
return this.createProcessFilters(appName, key, this.defaultProcessFilters(appName));
@@ -109,8 +109,7 @@ export class ProcessFilterCloudService {
} else {
return of(this.findFiltersByKeyInPreferences(preferences, key));
}
}),
catchError((err) => this.handleProcessError(err))
})
)
.subscribe((filters) => {
this.addFiltersToStream(filters);
@@ -138,15 +137,14 @@ export class ProcessFilterCloudService {
getFilterById(appName: string, id: string): Observable<ProcessFilterCloudModel> {
const key: string = this.prepareKey(appName);
return this.getProcessFiltersByKey(appName, key).pipe(
switchMap((filters: ProcessFilterCloudModel[]) => {
switchMap((filters) => {
if (filters?.length === 0) {
return this.createProcessFilters(appName, key, this.defaultProcessFilters(appName));
} else {
return of(filters);
}
}),
map((filters) => filters.filter((filter) => filter.id === id)[0]),
catchError((err) => this.handleProcessError(err))
map((filters) => filters.filter((filter) => filter.id === id)[0])
);
}
@@ -158,7 +156,7 @@ export class ProcessFilterCloudService {
*/
addFilter(newFilter: ProcessFilterCloudModel): Observable<ProcessFilterCloudModel[]> {
const { appName, name } = newFilter;
const key: string = this.prepareKey(appName);
const key = this.prepareKey(appName);
return this.getProcessFiltersByKey(appName, key).pipe(
switchMap((filters) => {
@@ -174,11 +172,10 @@ export class ProcessFilterCloudService {
return this.preferenceService.updatePreference(appName, key, filters);
}
}),
map((filters: ProcessFilterCloudModel[]) => {
map((filters) => {
this.addFiltersToStream(filters);
return filters;
}),
catchError((err) => this.handleProcessError(err))
})
);
}
@@ -189,7 +186,7 @@ export class ProcessFilterCloudService {
* @returns Observable of process instance filters with updated filter
*/
updateFilter(updatedFilter: ProcessFilterCloudModel): Observable<ProcessFilterCloudModel[]> {
const key: string = this.prepareKey(updatedFilter.appName);
const key = this.prepareKey(updatedFilter.appName);
return this.getProcessFiltersByKey(updatedFilter.appName, key).pipe(
switchMap((filters) => {
if (filters?.length === 0) {
@@ -203,8 +200,7 @@ export class ProcessFilterCloudService {
map((updatedFilters) => {
this.addFiltersToStream(updatedFilters);
return updatedFilters;
}),
catchError((err) => this.handleProcessError(err))
})
);
}
@@ -226,11 +222,10 @@ export class ProcessFilterCloudService {
return of([]);
}
}),
map((filters: ProcessFilterCloudModel[]) => {
map((filters) => {
this.addFiltersToStream(filters);
return filters;
}),
catchError((err) => this.handleProcessError(err))
})
);
}
@@ -345,10 +340,6 @@ export class ProcessFilterCloudService {
this.filtersSubject.next(filters);
}
private handleProcessError(error: any) {
return throwError(error || 'Server error');
}
/**
* Creates and returns the default filters for a process app.
*

View File

@@ -112,21 +112,18 @@ describe('ServiceTaskFiltersCloudComponent', () => {
expect(filters[2].nativeElement.innerText).toContain('FakeMyServiceTasks2');
});
it('should emit an error with a bad response', async () => {
const mockErrorFilterList = {
error: 'wrong request'
};
getTaskListFiltersSpy.and.returnValue(throwError(mockErrorFilterList));
it('should emit an error with a bad response', () => {
getTaskListFiltersSpy.and.returnValue(throwError('wrong request'));
const appName = 'my-app-1';
const change = new SimpleChange(null, appName, true);
await component.error.subscribe((err) => {
expect(err).toBeDefined();
});
let lastValue: any;
component.error.subscribe((err) => lastValue = err);
component.ngOnChanges({ appName: change });
fixture.detectChanges();
expect(lastValue).toBeDefined();
});
it('should not select any filter as default', async () => {

View File

@@ -31,9 +31,7 @@ import {
import { UserPreferenceCloudService } from '../../../services/user-preference-cloud.service';
import { PreferenceCloudServiceInterface } from '../../../services/preference-cloud.interface';
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';
import { IdentityUserService } from '../../../people/services/identity-user.service';
import { ApolloModule } from 'apollo-angular';
@@ -72,16 +70,18 @@ describe('TaskFilterCloudService', () => {
getCurrentUserInfoSpy = spyOn(identityUserService, 'getCurrentUserInfo').and.returnValue(identityUserMock);
});
it('should create task filter key by using appName and the username', async () => {
await service.getTaskListFilters('fakeAppName').subscribe((res: any) => {
it('should create task filter key by using appName and the username', (done) => {
service.getTaskListFilters('fakeAppName').subscribe((res) => {
expect(res).toBeDefined();
expect(getCurrentUserInfoSpy).toHaveBeenCalled();
done();
});
});
it('should create default task filters if there are no task filter preferences', async () => {
it('should create default task filters if there are no task filter preferences', (done) => {
getPreferencesSpy.and.returnValue(of(fakeEmptyTaskCloudPreferenceList));
await service.getTaskListFilters('fakeAppName').subscribe((res: any) => {
service.getTaskListFilters('fakeAppName').subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.length).toBe(3);
@@ -100,12 +100,14 @@ describe('TaskFilterCloudService', () => {
expect(res[2].id).toBe('3');
expect(res[2].name).toBe('FAKE_TASK_3');
expect(res[2].status).toBe('COMPLETED');
expect(createPreferenceSpy).toHaveBeenCalled();
done();
});
expect(createPreferenceSpy).toHaveBeenCalled();
});
it('should return the task filters if filters available', async () => {
await service.getTaskListFilters('fakeAppName').subscribe((res: any) => {
it('should return the task filters if filters available', (done) => {
service.getTaskListFilters('fakeAppName').subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.length).toBe(3);
@@ -124,14 +126,16 @@ describe('TaskFilterCloudService', () => {
expect(res[2].id).toBe('3');
expect(res[2].name).toBe('FAKE_TASK_3');
expect(res[2].status).toBe('COMPLETED');
expect(getPreferencesSpy).toHaveBeenCalled();
done();
});
expect(getPreferencesSpy).toHaveBeenCalled();
});
it('should create the task filters if the user preference does not have task filters', async () => {
it('should create the task filters if the user preference does not have task filters', (done) => {
getPreferencesSpy.and.returnValue(of(fakePreferenceWithNoTaskFilterPreference));
await service.getTaskListFilters('fakeAppName').subscribe((res) => {
service.getTaskListFilters('fakeAppName').subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.length).toBe(3);
@@ -150,57 +154,67 @@ describe('TaskFilterCloudService', () => {
expect(res[2].id).toBe('3');
expect(res[2].name).toBe('FAKE_TASK_3');
expect(res[2].status).toBe('COMPLETED');
});
done();
});
});
it('should return filter by task filter id', async () => {
await service.getTaskFilterById('fakeAppName', '2').subscribe((res: any) => {
it('should return filter by task filter id', (done) => {
service.getTaskFilterById('fakeAppName', '2').subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.appName).toBe('fakeAppName');
expect(res.id).toBe('2');
expect(res.name).toBe('FAKE_TASK_2');
expect(res.status).toBe('RUNNING');
expect(getPreferenceByKeySpy).toHaveBeenCalled();
done();
});
expect(getPreferenceByKeySpy).toHaveBeenCalled();
});
it('should add task filter if filter is not exist in the filters', async () => {
it('should add task filter if filter is not exist in the filters', (done) => {
getPreferenceByKeySpy.and.returnValue(of([]));
await service.getTaskFilterById('fakeAppName', '2').subscribe((res: any) => {
service.getTaskFilterById('fakeAppName', '2').subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.appName).toBe('fakeAppName');
expect(res.id).toBe('2');
expect(res.name).toBe('FAKE_TASK_2');
expect(res.status).toBe('RUNNING');
done();
});
});
it('should update filter', async () => {
it('should update filter', (done) => {
createPreferenceSpy.and.returnValue(of(fakeTaskCloudFilters));
await service.updateFilter(fakeTaskFilter).subscribe((res: any) => {
service.updateFilter(fakeTaskFilter).subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.length).toBe(3);
expect(res[0].appName).toBe('fakeAppName');
expect(res[1].appName).toBe('fakeAppName');
expect(res[2].appName).toBe('fakeAppName');
done();
});
});
it('should create task filter when trying to update in case filter is not exist in the filters', async () => {
it('should create task filter when trying to update in case filter is not exist in the filters', (done) => {
getPreferenceByKeySpy.and.returnValue(of([]));
await service.updateFilter(fakeTaskFilter).subscribe((res: any) => {
service.updateFilter(fakeTaskFilter).subscribe((res) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res.length).toBe(3);
expect(res[0].appName).toBe('fakeAppName');
expect(res[1].appName).toBe('fakeAppName');
expect(res[2].appName).toBe('fakeAppName');
expect(createPreferenceSpy).toHaveBeenCalled();
done();
});
expect(createPreferenceSpy).toHaveBeenCalled();
});
it('should check if given filter is a default filter', () => {
@@ -211,13 +225,14 @@ describe('TaskFilterCloudService', () => {
expect(service.isDefaultFilter(fakeFilterName)).toBe(false);
});
it('should return engine event task subscription', async () => {
it('should return engine event task subscription', (done) => {
spyOn(notificationCloudService, 'makeGQLQuery').and.returnValue(of(taskCloudEngineEventsMock));
await service.getTaskNotificationSubscription('myAppName').subscribe((res: TaskCloudEngineEvent[]) => {
service.getTaskNotificationSubscription('myAppName').subscribe((res) => {
expect(res.length).toBe(1);
expect(res[0].eventType).toBe('TASK_ASSIGNED');
expect(res[0].entity.name).toBe('This is a new task');
done();
});
});
});
@@ -244,9 +259,10 @@ describe('Inject [LocalPreferenceCloudService] into the TaskFilterCloudService',
spyOn(identityUserService, 'getCurrentUserInfo').and.returnValue(identityUserMock);
});
it('should create default task filters if there are no task filter preferences', async () => {
it('should create default task filters if there are no task filter preferences', (done) => {
const appName = 'fakeAppName';
await service.getTaskListFilters(appName).subscribe((res: TaskFilterCloudModel[]) => {
service.getTaskListFilters(appName).subscribe((res) => {
expect(res.length).toEqual(3);
expect(res[0].name).toEqual('ADF_CLOUD_TASK_FILTERS.MY_TASKS');
@@ -267,29 +283,31 @@ describe('Inject [LocalPreferenceCloudService] into the TaskFilterCloudService',
expect(res[2].appName).toEqual(appName);
expect(res[2].icon).toEqual('done');
expect(res[2].status).toEqual('COMPLETED');
expect(getPreferencesSpy).toHaveBeenCalled();
const localData = JSON.parse(localStorage.getItem(`task-filters-${appName}-${identityUserMock.username}`));
expect(localData.length).toEqual(3);
expect(localData[0].name).toEqual('ADF_CLOUD_TASK_FILTERS.MY_TASKS');
expect(localData[0].key).toEqual('my-tasks');
expect(localData[0].appName).toEqual(appName);
expect(localData[0].icon).toEqual('inbox');
expect(localData[0].status).toEqual('ASSIGNED');
expect(localData[0].assignee).toEqual(identityUserMock.username);
expect(localData[1].name).toEqual('ADF_CLOUD_TASK_FILTERS.QUEUED_TASKS');
expect(localData[1].key).toEqual('queued-tasks');
expect(localData[1].appName).toEqual(appName);
expect(localData[1].icon).toEqual('queue');
expect(localData[1].status).toEqual('CREATED');
expect(localData[2].name).toEqual('ADF_CLOUD_TASK_FILTERS.COMPLETED_TASKS');
expect(localData[2].key).toEqual('completed-tasks');
expect(localData[2].appName).toEqual(appName);
expect(localData[2].icon).toEqual('done');
expect(localData[2].status).toEqual('COMPLETED');
done();
});
expect(getPreferencesSpy).toHaveBeenCalled();
const localData = JSON.parse(localStorage.getItem(`task-filters-${appName}-${identityUserMock.username}`));
expect(localData.length).toEqual(3);
expect(localData[0].name).toEqual('ADF_CLOUD_TASK_FILTERS.MY_TASKS');
expect(localData[0].key).toEqual('my-tasks');
expect(localData[0].appName).toEqual(appName);
expect(localData[0].icon).toEqual('inbox');
expect(localData[0].status).toEqual('ASSIGNED');
expect(localData[0].assignee).toEqual(identityUserMock.username);
expect(localData[1].name).toEqual('ADF_CLOUD_TASK_FILTERS.QUEUED_TASKS');
expect(localData[1].key).toEqual('queued-tasks');
expect(localData[1].appName).toEqual(appName);
expect(localData[1].icon).toEqual('queue');
expect(localData[1].status).toEqual('CREATED');
expect(localData[2].name).toEqual('ADF_CLOUD_TASK_FILTERS.COMPLETED_TASKS');
expect(localData[2].key).toEqual('completed-tasks');
expect(localData[2].appName).toEqual(appName);
expect(localData[2].icon).toEqual('done');
expect(localData[2].status).toEqual('COMPLETED');
});
});