unit test performance (#3194)

* DataTable (-4 sec)

* PaginationComponent (-1 sec)

* DocumentList

* custom testbed setup, test upgrades

* test fixes

* more test fixes

* remove fdescribe

* test fixes

* test fixes

* more test fixes

* test fixes

* upgrade tests

* update tests

* upgrade tests

* upgrade tests

* upgrade tests

* upgrade tests

* update tests

* translate loader fixes

* auth and cookie fixes

* upgrade tests

* upgrade tests

* test fixes

* almost there

* diable broken tests

* process tests (part 1)

* fix lint issues

* another test upgrade

* almost there

* cleanup

* insights testing upgrade

* improve tests

* tests cleanup

* tests cleanup

* cleanup tests

* test cleanup

* favorite nodes tests

* rebase fix syntax

* fix core test

* give up test focus

* flush tabs

* fix search test

* Update document-list.component.spec.ts

* fix document list lock

* increase tick time

* remove duplicate test
This commit is contained in:
Denys Vuika
2018-04-23 09:55:22 +01:00
committed by Eugenio Romano
parent 9fbfcfa96e
commit 382ea3c1b3
204 changed files with 3093 additions and 4389 deletions
@@ -16,14 +16,13 @@
*/
import { CUSTOM_ELEMENTS_SCHEMA, SimpleChange } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { PathElementEntity } from 'alfresco-js-api';
import { DataTableModule } from '@alfresco/adf-core';
import { setupTestBed } from '@alfresco/adf-core';
import { fakeNodeWithCreatePermission } from '../mock';
import { CustomResourcesService, DocumentListService, DocumentListComponent } from '../document-list';
import { DocumentListComponent } from '../document-list';
import { BreadcrumbComponent } from './breadcrumb.component';
declare let jasmine: any;
import { ContentTestingModule } from '../testing/content.testing.module';
describe('Breadcrumb', () => {
@@ -31,33 +30,21 @@ describe('Breadcrumb', () => {
let fixture: ComponentFixture<BreadcrumbComponent>;
let documentList: DocumentListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
DataTableModule
],
declarations: [
DocumentListComponent,
BreadcrumbComponent
],
providers: [
DocumentListService,
CustomResourcesService
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
beforeEach(() => {
fixture = TestBed.createComponent(BreadcrumbComponent);
component = fixture.componentInstance;
documentList = TestBed.createComponent<DocumentListComponent>(DocumentListComponent).componentInstance;
});
afterEach(() => {
fixture.destroy();
});
it('should prevent default click behavior', () => {
let event = jasmine.createSpyObj('event', ['preventDefault']);
component.onRoutePathClick(null, event);
@@ -18,10 +18,11 @@
import { CUSTOM_ELEMENTS_SCHEMA, SimpleChange } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DataTableModule } from '@alfresco/adf-core';
import { setupTestBed } from '@alfresco/adf-core';
import { fakeNodeWithCreatePermission } from '../mock';
import { CustomResourcesService, DocumentListComponent, DocumentListService } from '../document-list';
import { DocumentListComponent } from '../document-list';
import { DropdownBreadcrumbComponent } from './dropdown-breadcrumb.component';
import { ContentTestingModule } from '../testing/content.testing.module';
describe('DropdownBreadcrumb', () => {
@@ -29,32 +30,21 @@ describe('DropdownBreadcrumb', () => {
let fixture: ComponentFixture<DropdownBreadcrumbComponent>;
let documentList: DocumentListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
DataTableModule
],
declarations: [
DocumentListComponent,
DropdownBreadcrumbComponent
],
providers: [
DocumentListService,
CustomResourcesService
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
beforeEach(() => {
fixture = TestBed.createComponent(DropdownBreadcrumbComponent);
component = fixture.componentInstance;
documentList = TestBed.createComponent<DocumentListComponent>(DocumentListComponent).componentInstance;
});
afterEach(() => {
fixture.destroy();
});
function openSelect() {
const folderIcon = fixture.debugElement.query(By.css('[data-automation-id="dropdown-breadcrumb-trigger"]'));
folderIcon.triggerEventHandler('click', null);
@@ -17,48 +17,24 @@
/*tslint:disable: ban*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
import { ContentMetadataCardComponent } from './content-metadata-card.component';
import { ContentMetadataComponent } from '../content-metadata/content-metadata.component';
import { MatExpansionModule, MatCardModule, MatButtonModule, MatIconModule } from '@angular/material';
import { ContentMetadataService } from '../../services/content-metadata.service';
import { BasicPropertiesService } from '../../services/basic-properties.service';
import { PropertyGroupTranslatorService } from '../../services/property-groups-translator.service';
import { PropertyDescriptorsService } from '../../services/property-descriptors.service';
import { ContentMetadataConfigFactory } from '../../services/config/content-metadata-config.factory';
import { ContentService, PermissionsEnum } from '@alfresco/adf-core';
import { setupTestBed, PermissionsEnum } from '@alfresco/adf-core';
import { ContentTestingModule } from '../../../testing/content.testing.module';
describe('ContentMetadataCardComponent', () => {
let component: ContentMetadataCardComponent,
fixture: ComponentFixture<ContentMetadataCardComponent>,
node: MinimalNodeEntryEntity,
preset = 'custom-preset';
let component: ContentMetadataCardComponent;
let fixture: ComponentFixture<ContentMetadataCardComponent>;
let node: MinimalNodeEntryEntity;
let preset = 'custom-preset';
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
MatExpansionModule,
MatCardModule,
MatButtonModule,
MatIconModule
],
declarations: [
ContentMetadataCardComponent,
ContentMetadataComponent
],
providers: [
ContentMetadataService,
BasicPropertiesService,
PropertyGroupTranslatorService,
ContentMetadataConfigFactory,
PropertyDescriptorsService,
ContentService
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule]
});
beforeEach(() => {
fixture = TestBed.createComponent(ContentMetadataCardComponent);
@@ -22,51 +22,33 @@ import { SimpleChange } from '@angular/core';
import { By } from '@angular/platform-browser';
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
import { ContentMetadataComponent } from './content-metadata.component';
import { MatExpansionModule, MatButtonModule, MatIconModule } from '@angular/material';
import { ContentMetadataService } from '../../services/content-metadata.service';
import { BasicPropertiesService } from '../../services/basic-properties.service';
import { PropertyGroupTranslatorService } from '../../services/property-groups-translator.service';
import { PropertyDescriptorsService } from '../../services/property-descriptors.service';
import {
CardViewBaseItemModel,
CardViewComponent,
CardViewUpdateService,
NodesApiService,
LogService
} from '@alfresco/adf-core';
LogService,
setupTestBed
} from '@alfresco/adf-core';
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
import { Observable } from 'rxjs/Observable';
import { ContentMetadataConfigFactory } from '../../services/config/content-metadata-config.factory';
import { ContentTestingModule } from '../../../testing/content.testing.module';
describe('ContentMetadataComponent', () => {
let component: ContentMetadataComponent,
fixture: ComponentFixture<ContentMetadataComponent>,
node: MinimalNodeEntryEntity,
folderNode: MinimalNodeEntryEntity,
preset = 'custom-preset';
let component: ContentMetadataComponent;
let fixture: ComponentFixture<ContentMetadataComponent>;
let node: MinimalNodeEntryEntity;
let folderNode: MinimalNodeEntryEntity;
let preset = 'custom-preset';
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
MatExpansionModule,
MatButtonModule,
MatIconModule
],
declarations: [
ContentMetadataComponent
],
providers: [
ContentMetadataService,
BasicPropertiesService,
PropertyGroupTranslatorService,
PropertyDescriptorsService,
ContentMetadataConfigFactory,
NodesApiService,
{ provide: LogService, useValue: { error: jasmine.createSpy('error') } }
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
providers: [
{ provide: LogService, useValue: { error: jasmine.createSpy('error') } }
]
});
beforeEach(() => {
fixture = TestBed.createComponent(ContentMetadataComponent);
@@ -96,7 +78,6 @@ describe('ContentMetadataComponent', () => {
afterEach(() => {
fixture.destroy();
TestBed.resetTestingModule();
});
describe('Default input param values', () => {
@@ -15,29 +15,31 @@
* limitations under the License.
*/
import { async, TestBed } from '@angular/core/testing';
import { AppConfigService, LogService } from '@alfresco/adf-core';
import { TestBed } from '@angular/core/testing';
import { AppConfigService, LogService, setupTestBed } from '@alfresco/adf-core';
import { IndifferentConfigService } from './indifferent-config.service';
import { AspectOrientedConfigService } from './aspect-oriented-config.service';
import { LayoutOrientedConfigService } from './layout-oriented-config.service';
import { ContentMetadataConfigFactory } from './content-metadata-config.factory';
import { ContentMetadataConfig } from '../../interfaces/content-metadata.interfaces';
import { HttpClientModule } from '@angular/common/http';
describe('ContentMetadataConfigFactory', () => {
let factory: ContentMetadataConfigFactory,
appConfig: AppConfigService,
config: ContentMetadataConfig;
let factory: ContentMetadataConfigFactory;
let appConfig: AppConfigService;
let config: ContentMetadataConfig;
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
ContentMetadataConfigFactory,
AppConfigService,
{ provide: LogService, useValue: { error: () => {} }}
]
}).compileComponents();
}));
setupTestBed({
imports: [
HttpClientModule
],
providers: [
ContentMetadataConfigFactory,
AppConfigService,
{ provide: LogService, useValue: { error: () => {} }}
]
});
beforeEach(() => {
factory = TestBed.get(ContentMetadataConfigFactory);
@@ -52,10 +54,6 @@ describe('ContentMetadataConfigFactory', () => {
};
}
afterEach(() => {
TestBed.resetTestingModule();
});
describe('get', () => {
let logService;
@@ -15,25 +15,22 @@
* limitations under the License.
*/
import { async, TestBed } from '@angular/core/testing';
import { TestBed } from '@angular/core/testing';
import { PropertyDescriptorsService } from './property-descriptors.service';
import { AlfrescoApiService } from '@alfresco/adf-core';
import { AlfrescoApiService, setupTestBed } from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import { ClassesApi } from 'alfresco-js-api';
import { PropertyGroup } from '../interfaces/content-metadata.interfaces';
import { ContentTestingModule } from '../../testing/content.testing.module';
describe('PropertyDescriptorLoaderService', () => {
let service: PropertyDescriptorsService,
classesApi: ClassesApi;
let service: PropertyDescriptorsService;
let classesApi: ClassesApi;
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
PropertyDescriptorsService
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule]
});
beforeEach(() => {
service = TestBed.get(PropertyDescriptorsService);
@@ -41,10 +38,6 @@ describe('PropertyDescriptorLoaderService', () => {
classesApi = alfrescoApiService.classesApi;
});
afterEach(() => {
TestBed.resetTestingModule();
});
it('should load the groups passed by paramter', () => {
spyOn(classesApi, 'getClass');
@@ -15,7 +15,7 @@
* limitations under the License.
*/
import { async, TestBed } from '@angular/core/testing';
import { TestBed } from '@angular/core/testing';
import { PropertyGroupTranslatorService } from './property-groups-translator.service';
import { Property, OrganisedPropertyGroup } from '../interfaces/content-metadata.interfaces';
import {
@@ -25,25 +25,25 @@ import {
CardViewFloatItemModel,
LogService,
CardViewBoolItemModel,
CardViewDatetimeItemModel
CardViewDatetimeItemModel,
setupTestBed
} from '@alfresco/adf-core';
import { ContentTestingModule } from '../../testing/content.testing.module';
describe('PropertyGroupTranslatorService', () => {
let service: PropertyGroupTranslatorService,
propertyGroups: OrganisedPropertyGroup[],
propertyGroup: OrganisedPropertyGroup,
property: Property,
propertyValues: { [key: string]: any };
let service: PropertyGroupTranslatorService;
let propertyGroups: OrganisedPropertyGroup[];
let propertyGroup: OrganisedPropertyGroup;
let property: Property;
let propertyValues: { [key: string]: any };
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
PropertyGroupTranslatorService,
{ provide: LogService, useValue: { error: () => {} }}
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
providers: [
{ provide: LogService, useValue: { error: () => {} }}
]
});
beforeEach(() => {
service = TestBed.get(PropertyGroupTranslatorService);
@@ -63,10 +63,6 @@ describe('PropertyGroupTranslatorService', () => {
propertyGroups = [];
});
afterEach(() => {
TestBed.resetTestingModule();
});
describe('General transformation', () => {
it('should translate EVERY properties in ONE group properly', () => {
@@ -15,15 +15,15 @@
* limitations under the License.
*/
import { async, TestBed, fakeAsync, tick } from '@angular/core/testing';
import { TestBed, fakeAsync, tick } from '@angular/core/testing';
import { MinimalNodeEntryEntity, SitePaging } from 'alfresco-js-api';
import { AppConfigService, SitesService } from '@alfresco/adf-core';
import { AppConfigService, SitesService, setupTestBed } from '@alfresco/adf-core';
import { DocumentListService } from '../document-list/services/document-list.service';
import { CustomResourcesService } from '../document-list/services/custom-resources.service';
import { ContentNodeDialogService } from './content-node-dialog.service';
import { MatDialog } from '@angular/material';
import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';
import { ContentTestingModule } from '../testing/content.testing.module';
const fakeNode: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {
id: 'fake',
@@ -60,18 +60,9 @@ describe('ContentNodeDialogService', () => {
let spyOnDialogOpen: jasmine.Spy;
let afterOpenObservable: Subject<any>;
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
ContentNodeDialogService,
DocumentListService,
CustomResourcesService,
SitesService,
MatDialog
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule]
});
beforeEach(() => {
let appConfig: AppConfigService = TestBed.get(AppConfigService);
@@ -89,7 +80,6 @@ describe('ContentNodeDialogService', () => {
error: new Subject<any>()
}
});
});
it('should not open the lock node dialog if have no permission', () => {
@@ -19,21 +19,16 @@ import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, fakeAsync, tick, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { MinimalNodeEntryEntity, SiteEntry, SitePaging } from 'alfresco-js-api';
import { SearchService, SitesService } from '@alfresco/adf-core';
import { DataTableModule } from '@alfresco/adf-core';
import { SearchService, SitesService, setupTestBed } from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import { Observer } from 'rxjs/Observer';
import {
CustomResourcesService,
EmptyFolderContentDirective,
DocumentListComponent,
DocumentListService
} from '../document-list';
import { DropdownSitesComponent } from '../site-dropdown';
import { DropdownBreadcrumbComponent } from '../breadcrumb';
import { ContentNodeSelectorPanelComponent } from './content-node-selector-panel.component';
import { ContentNodeSelectorService } from './content-node-selector.service';
import { NodePaging } from 'alfresco-js-api';
import { ContentTestingModule } from '../testing/content.testing.module';
import { DocumentListService } from '../document-list/services/document-list.service';
import { DocumentListComponent } from '../document-list/components/document-list.component';
const ONE_FOLDER_RESULT = {
list: {
@@ -74,37 +69,13 @@ describe('ContentNodeSelectorComponent', () => {
_observer.next(result);
}
afterEach(() => {
fixture.destroy();
TestBed.resetTestingModule();
setupTestBed({
imports: [ContentTestingModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
describe('General component features', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
DataTableModule
],
declarations: [
DocumentListComponent,
EmptyFolderContentDirective,
DropdownSitesComponent,
DropdownBreadcrumbComponent,
ContentNodeSelectorPanelComponent
],
providers: [
CustomResourcesService,
SearchService,
DocumentListService,
SitesService,
ContentNodeSelectorService
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
TestBed.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ContentNodeSelectorPanelComponent);
component = fixture.componentInstance;
@@ -120,6 +91,10 @@ describe('ContentNodeSelectorComponent', () => {
});
});
afterEach(() => {
fixture.destroy();
});
describe('Parameters', () => {
it('should trigger the select event when selection has been made', (done) => {
@@ -518,7 +493,7 @@ describe('ContentNodeSelectorComponent', () => {
expect(component.searchTerm).toBe('');
expect(component.folderIdToShow).toBe('namek');
});
}));
it('should show the current folder\'s content instead of search results if search was not performed', () => {
let documentList = fixture.debugElement.query(By.directive(DocumentListComponent));
@@ -18,74 +18,50 @@
import { MAT_DIALOG_DATA } from '@angular/material';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { EventEmitter } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ContentNodeSelectorComponent } from './content-node-selector.component';
import { ContentNodeSelectorPanelComponent } from './content-node-selector-panel.component';
import { ContentNodeSelectorService } from './content-node-selector.service';
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
import { By } from '@angular/platform-browser';
import {
EmptyFolderContentDirective,
DocumentListComponent,
DocumentListService,
CustomResourcesService
} from '../document-list';
import { ContentService } from '@alfresco/adf-core';
import { setupTestBed } from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import { ContentTestingModule } from '../testing/content.testing.module';
import { DocumentListService } from '../document-list/services/document-list.service';
import { DocumentListComponent } from '../document-list/components/document-list.component';
describe('ContentNodeSelectorDialogComponent', () => {
let component: ContentNodeSelectorComponent;
let fixture: ComponentFixture<ContentNodeSelectorComponent>;
let data: any;
let data: any = {
title: 'Move along citizen...',
actionName: 'move',
select: new EventEmitter<MinimalNodeEntryEntity>(),
rowFilter: () => {},
imageResolver: () => 'piccolo',
currentFolderId: 'cat-girl-nuku-nuku'
};
function setupTestbed(plusProviders) {
TestBed.configureTestingModule({
imports: [
],
declarations: [
ContentNodeSelectorComponent,
ContentNodeSelectorPanelComponent,
DocumentListComponent,
EmptyFolderContentDirective
],
providers: [
CustomResourcesService,
ContentNodeSelectorService,
ContentNodeSelectorPanelComponent,
DocumentListService,
ContentService,
DocumentListService,
ContentNodeSelectorService,
...plusProviders
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
}
setupTestBed({
imports: [ContentTestingModule],
providers: [
{ provide: MAT_DIALOG_DATA, useValue: data }
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
beforeEach(() => {
const documentListService: DocumentListService = TestBed.get(DocumentListService);
spyOn(documentListService, 'getFolder').and.returnValue(Observable.of({ list: [] }));
spyOn(documentListService, 'getFolderNode').and.returnValue(Observable.of({}));
fixture = TestBed.createComponent(ContentNodeSelectorComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
afterEach(() => {
fixture.destroy();
TestBed.resetTestingModule();
});
beforeEach(async(() => {
data = {
title: 'Move along citizen...',
actionName: 'move',
select: new EventEmitter<MinimalNodeEntryEntity>(),
rowFilter: () => {
},
imageResolver: () => 'piccolo',
currentFolderId: 'cat-girl-nuku-nuku'
};
setupTestbed([{ provide: MAT_DIALOG_DATA, useValue: data }]);
TestBed.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ContentNodeSelectorComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
describe('Data injecting with the "Material dialog way"', () => {
@@ -98,6 +74,7 @@ describe('ContentNodeSelectorDialogComponent', () => {
it('should have the INJECTED actionName on the name of the choose button', () => {
const actionButton = fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-actions-choose"]'));
expect(component.buttonActionName).toBe('NODE_SELECTOR.MOVE');
expect(actionButton).not.toBeNull();
expect(actionButton.nativeElement.innerText).toBe('NODE_SELECTOR.MOVE');
});
@@ -108,10 +85,14 @@ describe('ContentNodeSelectorDialogComponent', () => {
expect(documentList.componentInstance.currentFolderId).toBe('cat-girl-nuku-nuku');
});
it('should pass through the injected rowFilter to the documentlist', () => {
let documentList = fixture.debugElement.query(By.directive(DocumentListComponent));
expect(documentList).not.toBeNull('Document list should be shown');
expect(documentList.componentInstance.rowFilter).toBe(data.rowFilter);
it('should pass through the injected rowFilter to the documentlist', (done) => {
fixture.whenStable().then(() => {
let documentList = fixture.debugElement.query(By.directive(DocumentListComponent));
expect(documentList).not.toBeNull('Document list should be shown');
expect(documentList.componentInstance.rowFilter).toBe(data.rowFilter);
done();
});
});
it('should pass through the injected imageResolver to the documentlist', () => {
@@ -15,10 +15,11 @@
* limitations under the License.
*/
import { async, TestBed } from '@angular/core/testing';
import { TestBed } from '@angular/core/testing';
import { QueryBody } from 'alfresco-js-api';
import { SearchService } from '@alfresco/adf-core';
import { SearchService, setupTestBed } from '@alfresco/adf-core';
import { ContentNodeSelectorService } from './content-node-selector.service';
import { ContentTestingModule } from '../testing/content.testing.module';
class SearchServiceMock {
public query: QueryBody;
@@ -29,17 +30,15 @@ class SearchServiceMock {
describe('ContentNodeSelectorService', () => {
let service: ContentNodeSelectorService,
search: SearchServiceMock;
let service: ContentNodeSelectorService;
let search: SearchServiceMock;
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
ContentNodeSelectorService,
{ provide: SearchService, useClass: SearchServiceMock }
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
providers: [
{ provide: SearchService, useClass: SearchServiceMock }
]
});
beforeEach(() => {
service = TestBed.get(ContentNodeSelectorService);
+179 -297
View File
@@ -15,74 +15,45 @@
* limitations under the License.
*/
import { async, TestBed } from '@angular/core/testing';
import { ComponentFixture } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing';
import { Observable } from 'rxjs/Observable';
import { NodesApiService, TranslationService } from '@alfresco/adf-core';
import { TestBed } from '@angular/core/testing';
import { async, ComponentFixture } from '@angular/core/testing';
import { MatDialogRef } from '@angular/material';
import { NodesApiService, setupTestBed } from '@alfresco/adf-core';
import { FolderDialogComponent } from './folder.dialog';
import { Observable } from 'rxjs/Observable';
import { ContentTestingModule } from '../testing/content.testing.module';
import { By } from '@angular/platform-browser';
describe('FolderDialogComponent', () => {
let fixture: ComponentFixture<FolderDialogComponent>;
let component: FolderDialogComponent;
let translationService: TranslationService;
let nodesApi: NodesApiService;
let dialogRef;
let dialogRef = {
close: jasmine.createSpy('close')
};
setupTestBed({
imports: [ContentTestingModule],
providers: [
{ provide: MatDialogRef, useValue: dialogRef }
]
});
beforeEach(() => {
dialogRef.close.calls.reset();
fixture = TestBed.createComponent(FolderDialogComponent);
component = fixture.componentInstance;
nodesApi = TestBed.get(NodesApiService);
});
afterEach(() => {
fixture.destroy();
TestBed.resetTestingModule();
});
describe('Material dialog behaviour', () => {
beforeEach(async(() => {
dialogRef = { close: jasmine.createSpy('close') };
TestBed.configureTestingModule({
imports: [
FormsModule,
ReactiveFormsModule,
BrowserDynamicTestingModule
],
declarations: [
FolderDialogComponent
],
providers: [
{ provide: MatDialogRef, useValue: dialogRef },
{ provide: MAT_DIALOG_DATA, useValue: {
editTitle: 'edit',
createTitle: 'create'
} }
]
});
// entryComponents are not supported yet on TestBed, that is why this ugly workaround:
// https://github.com/angular/angular/issues/10760
TestBed.overrideModule(BrowserDynamicTestingModule, {
set: { entryComponents: [FolderDialogComponent] }
});
TestBed.compileComponents();
}));
describe('Edit', () => {
beforeEach(() => {
fixture = TestBed.createComponent(FolderDialogComponent);
component = fixture.componentInstance;
nodesApi = TestBed.get(NodesApiService);
translationService = TestBed.get(TranslationService);
spyOn(translationService, 'get').and.returnValue(Observable.of('message'));
});
it('should have the proper overridden title in case of editing', () => {
component.data = {
folder: {
id: 'node-id',
@@ -92,134 +63,61 @@ describe('FolderDialogComponent', () => {
}
}
};
fixture.detectChanges();
const title = fixture.debugElement.query(By.css('[mat-dialog-title]'));
expect(title === null).toBe(false);
expect(title.nativeElement.innerText.trim()).toBe('edit');
});
it('should have the proper overridden title in case of creating', () => {
component.data = {
parentNodeId: 'parentNodeId',
folder: null
};
fixture.detectChanges();
const title = fixture.debugElement.query(By.css('[mat-dialog-title]'));
expect(title === null).toBe(false);
expect(title.nativeElement.innerText.trim()).toBe('create');
});
});
describe('Basic component behaviour', () => {
beforeEach(async(() => {
dialogRef = { close: jasmine.createSpy('close') };
TestBed.configureTestingModule({
imports: [
FormsModule,
ReactiveFormsModule,
BrowserDynamicTestingModule
],
declarations: [
FolderDialogComponent
],
providers: [
{ provide: MatDialogRef, useValue: dialogRef }
]
});
// entryComponents are not supported yet on TestBed, that is why this ugly workaround:
// https://github.com/angular/angular/issues/10760
TestBed.overrideModule(BrowserDynamicTestingModule, {
set: { entryComponents: [FolderDialogComponent] }
});
TestBed.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(FolderDialogComponent);
component = fixture.componentInstance;
nodesApi = TestBed.get(NodesApiService);
translationService = TestBed.get(TranslationService);
spyOn(translationService, 'get').and.returnValue(Observable.of('message'));
it('should init form with folder name and description', () => {
expect(component.name).toBe('folder-name');
expect(component.description).toBe('folder-description');
});
describe('Edit', () => {
beforeEach(() => {
component.data = {
folder: {
id: 'node-id',
name: 'folder-name',
properties: {
['cm:description']: 'folder-description'
}
}
};
fixture.detectChanges();
});
it('should have the proper title', () => {
it('should have the proper title', () => {
const title = fixture.debugElement.query(By.css('[mat-dialog-title]'));
expect(title === null).toBe(false);
expect(title.nativeElement.innerText.trim()).toBe('CORE.FOLDER_DIALOG.EDIT_FOLDER_TITLE');
});
it('should init form with folder name and description', () => {
expect(component.name).toBe('folder-name');
expect(component.description).toBe('folder-description');
});
it('should update form input', () => {
component.form.controls['name'].setValue('folder-name-update');
component.form.controls['description'].setValue('folder-description-update');
it('should update form input', () => {
component.form.controls['name'].setValue('folder-name-update');
component.form.controls['description'].setValue('folder-description-update');
expect(component.name).toBe('folder-name-update');
expect(component.description).toBe('folder-description-update');
});
expect(component.name).toBe('folder-name-update');
expect(component.description).toBe('folder-description-update');
});
it('should submit updated values if form is valid', () => {
spyOn(nodesApi, 'updateNode').and.returnValue(Observable.of({}));
it('should submit updated values if form is valid', () => {
spyOn(nodesApi, 'updateNode').and.returnValue(Observable.of({}));
component.form.controls['name'].setValue('folder-name-update');
component.form.controls['description'].setValue('folder-description-update');
component.form.controls['name'].setValue('folder-name-update');
component.form.controls['description'].setValue('folder-description-update');
component.submit();
component.submit();
expect(nodesApi.updateNode).toHaveBeenCalledWith(
'node-id',
{
name: 'folder-name-update',
properties: {
'cm:title': 'folder-name-update',
'cm:description': 'folder-description-update'
}
expect(nodesApi.updateNode).toHaveBeenCalledWith(
'node-id',
{
name: 'folder-name-update',
properties: {
'cm:title': 'folder-name-update',
'cm:description': 'folder-description-update'
}
);
});
}
);
});
it('should call dialog to close with form data when submit is succesfluly', () => {
const folder = {
data: 'folder-data'
};
it('should call dialog to close with form data when submit is successfully', () => {
const folder = {
data: 'folder-data'
};
spyOn(nodesApi, 'updateNode').and.returnValue(Observable.of(folder));
spyOn(nodesApi, 'updateNode').and.returnValue(Observable.of(folder));
component.submit();
component.submit();
expect(dialogRef.close).toHaveBeenCalledWith(folder);
});
expect(dialogRef.close).toHaveBeenCalledWith(folder);
});
it('should emit success output event with folder when submit is succesfull', async(() => {
it('should emit success output event with folder when submit is succesfull', async(() => {
const folder = { data: 'folder-data' };
let expectedNode = null;
@@ -233,79 +131,79 @@ describe('FolderDialogComponent', () => {
});
}));
it('should not submit if form is invalid', () => {
spyOn(nodesApi, 'updateNode');
it('should not submit if form is invalid', () => {
spyOn(nodesApi, 'updateNode');
component.form.controls['name'].setValue('');
component.form.controls['description'].setValue('');
component.form.controls['name'].setValue('');
component.form.controls['description'].setValue('');
component.submit();
component.submit();
expect(component.form.valid).toBe(false);
expect(nodesApi.updateNode).not.toHaveBeenCalled();
});
it('should not call dialog to close if submit fails', () => {
spyOn(nodesApi, 'updateNode').and.returnValue(Observable.throw('error'));
spyOn(component, 'handleError').and.callFake(val => val);
component.submit();
expect(component.handleError).toHaveBeenCalled();
expect(dialogRef.close).not.toHaveBeenCalled();
});
expect(component.form.valid).toBe(false);
expect(nodesApi.updateNode).not.toHaveBeenCalled();
});
describe('Create', () => {
beforeEach(() => {
component.data = {
parentNodeId: 'parentNodeId',
folder: null
};
fixture.detectChanges();
});
it('should not call dialog to close if submit fails', () => {
spyOn(nodesApi, 'updateNode').and.returnValue(Observable.throw('error'));
spyOn(component, 'handleError').and.callFake(val => val);
it('should have the proper title', () => {
const title = fixture.debugElement.query(By.css('[mat-dialog-title]'));
expect(title === null).toBe(false);
expect(title.nativeElement.innerText.trim()).toBe('CORE.FOLDER_DIALOG.CREATE_FOLDER_TITLE');
});
component.submit();
it('should init form with empty inputs', () => {
expect(component.name).toBe('');
expect(component.description).toBe('');
});
expect(component.handleError).toHaveBeenCalled();
expect(dialogRef.close).not.toHaveBeenCalled();
});
});
it('should update form input', () => {
component.form.controls['name'].setValue('folder-name-update');
component.form.controls['description'].setValue('folder-description-update');
describe('Create', () => {
beforeEach(() => {
component.data = {
parentNodeId: 'parentNodeId',
folder: null
};
fixture.detectChanges();
});
expect(component.name).toBe('folder-name-update');
expect(component.description).toBe('folder-description-update');
});
it('should have the proper title', () => {
const title = fixture.debugElement.query(By.css('[mat-dialog-title]'));
expect(title === null).toBe(false);
expect(title.nativeElement.innerText.trim()).toBe('CORE.FOLDER_DIALOG.CREATE_FOLDER_TITLE');
});
it('should submit updated values if form is valid', () => {
spyOn(nodesApi, 'createFolder').and.returnValue(Observable.of({}));
it('should init form with empty inputs', () => {
expect(component.name).toBe('');
expect(component.description).toBe('');
});
component.form.controls['name'].setValue('folder-name-update');
component.form.controls['description'].setValue('folder-description-update');
it('should update form input', () => {
component.form.controls['name'].setValue('folder-name-update');
component.form.controls['description'].setValue('folder-description-update');
component.submit();
expect(component.name).toBe('folder-name-update');
expect(component.description).toBe('folder-description-update');
});
expect(nodesApi.createFolder).toHaveBeenCalledWith(
'parentNodeId',
{
name: 'folder-name-update',
properties: {
'cm:title': 'folder-name-update',
'cm:description': 'folder-description-update'
},
nodeType: 'cm:folder'
}
);
});
it('should submit updated values if form is valid', () => {
spyOn(nodesApi, 'createFolder').and.returnValue(Observable.of({}));
it('should submit updated values if form is valid (with custom nodeType)', () => {
component.form.controls['name'].setValue('folder-name-update');
component.form.controls['description'].setValue('folder-description-update');
component.submit();
expect(nodesApi.createFolder).toHaveBeenCalledWith(
'parentNodeId',
{
name: 'folder-name-update',
properties: {
'cm:title': 'folder-name-update',
'cm:description': 'folder-description-update'
},
nodeType: 'cm:folder'
}
);
});
it('should submit updated values if form is valid (with custom nodeType)', () => {
spyOn(nodesApi, 'createFolder').and.returnValue(Observable.of({}));
component.form.controls['name'].setValue('folder-name-update');
@@ -325,102 +223,86 @@ describe('FolderDialogComponent', () => {
nodeType: 'cm:sushi'
}
);
});
});
it('should call dialog to close with form data when submit is succesfluly', () => {
const folder = {
data: 'folder-data'
it('should call dialog to close with form data when submit is successfully', () => {
const folder = {
data: 'folder-data'
};
component.form.controls['name'].setValue('name');
component.form.controls['description'].setValue('description');
spyOn(nodesApi, 'createFolder').and.returnValue(Observable.of(folder));
component.submit();
expect(dialogRef.close).toHaveBeenCalledWith(folder);
});
it('should not submit if form is invalid', () => {
spyOn(nodesApi, 'createFolder');
component.form.controls['name'].setValue('');
component.form.controls['description'].setValue('');
component.submit();
expect(component.form.valid).toBe(false);
expect(nodesApi.createFolder).not.toHaveBeenCalled();
});
it('should not call dialog to close if submit fails', () => {
spyOn(nodesApi, 'createFolder').and.returnValue(Observable.throw('error'));
spyOn(component, 'handleError').and.callFake(val => val);
component.form.controls['name'].setValue('name');
component.form.controls['description'].setValue('description');
component.submit();
expect(component.handleError).toHaveBeenCalled();
expect(dialogRef.close).not.toHaveBeenCalled();
});
describe('Error events ', () => {
it('should raise error for 409', (done) => {
const error = {
message: '{ "error": { "statusCode" : 409 } }'
};
component.form.controls['name'].setValue('name');
component.form.controls['description'].setValue('description');
spyOn(nodesApi, 'createFolder').and.returnValue(Observable.of(folder));
component.submit();
expect(dialogRef.close).toHaveBeenCalledWith(folder);
});
it('should emit success output event with folder when submit is succesfull', async(() => {
const folder = { data: 'folder-data' };
let expectedNode = null;
component.form.controls['name'].setValue('name');
component.form.controls['description'].setValue('description');
spyOn(nodesApi, 'createFolder').and.returnValue(Observable.of(folder));
component.success.subscribe((node) => { expectedNode = node; });
component.submit();
fixture.whenStable().then(() => {
expect(expectedNode).toBe(folder);
component.error.subscribe((message) => {
expect(message).toBe('CORE.MESSAGES.ERRORS.EXISTENT_FOLDER');
done();
});
}));
it('should not submit if form is invalid', () => {
spyOn(nodesApi, 'createFolder');
component.form.controls['name'].setValue('');
component.form.controls['description'].setValue('');
component.submit();
expect(component.form.valid).toBe(false);
expect(nodesApi.createFolder).not.toHaveBeenCalled();
});
it('should not call dialog to close if submit fails', () => {
spyOn(nodesApi, 'createFolder').and.returnValue(Observable.throw('error'));
spyOn(component, 'handleError').and.callFake(val => val);
spyOn(nodesApi, 'createFolder').and.returnValue(Observable.throw(error));
component.form.controls['name'].setValue('name');
component.form.controls['description'].setValue('description');
component.submit();
expect(component.handleError).toHaveBeenCalled();
expect(dialogRef.close).not.toHaveBeenCalled();
});
describe('Error events ', () => {
it('should raise error for 409', (done) => {
const error = {
message: '{ "error": { "statusCode" : 409 } }'
};
it('should raise generic error', (done) => {
const error = {
message: '{ "error": { "statusCode" : 123 } }'
};
component.error.subscribe((message) => {
expect(message).toBe('CORE.MESSAGES.ERRORS.EXISTENT_FOLDER');
done();
});
spyOn(nodesApi, 'createFolder').and.returnValue(Observable.throw(error));
component.form.controls['name'].setValue('name');
component.form.controls['description'].setValue('description');
component.submit();
component.error.subscribe((message) => {
expect(message).toBe('CORE.MESSAGES.ERRORS.GENERIC');
done();
});
it('should raise generic error', (done) => {
const error = {
message: '{ "error": { "statusCode" : 123 } }'
};
spyOn(nodesApi, 'createFolder').and.returnValue(Observable.throw(error));
component.error.subscribe((message) => {
expect(message).toBe('CORE.MESSAGES.ERRORS.GENERIC');
done();
});
component.form.controls['name'].setValue('name');
component.form.controls['description'].setValue('description');
spyOn(nodesApi, 'createFolder').and.returnValue(Observable.throw(error));
component.form.controls['name'].setValue('name');
component.form.controls['description'].setValue('description');
component.submit();
});
component.submit();
});
});
});
});
@@ -17,57 +17,38 @@
import moment from 'moment-es6';
import { async, TestBed, fakeAsync, tick } from '@angular/core/testing';
import { TestBed, fakeAsync, tick } from '@angular/core/testing';
import { ComponentFixture } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatDialogRef } from '@angular/material';
import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing';
import { Observable } from 'rxjs/Observable';
import { AlfrescoApiService, TranslationService } from '@alfresco/adf-core';
import { AlfrescoApiService, setupTestBed } from '@alfresco/adf-core';
import { NodeLockDialogComponent } from './node-lock.dialog';
import { ContentTestingModule } from '../testing/content.testing.module';
describe('NodeLockDialogComponent', () => {
let fixture: ComponentFixture<NodeLockDialogComponent>;
let component: NodeLockDialogComponent;
let translationService: TranslationService;
let alfrescoApi: AlfrescoApiService;
let expiryDate;
const dialogRef = {
close: jasmine.createSpy('close')
};
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
FormsModule,
ReactiveFormsModule,
BrowserDynamicTestingModule
],
declarations: [
NodeLockDialogComponent
],
providers: [
{ provide: MatDialogRef, useValue: dialogRef }
]
});
TestBed.overrideModule(BrowserDynamicTestingModule, {
set: { entryComponents: [NodeLockDialogComponent] }
});
TestBed.compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
providers: [
{ provide: MatDialogRef, useValue: dialogRef }
]
});
beforeEach(() => {
fixture = TestBed.createComponent(NodeLockDialogComponent);
component = fixture.componentInstance;
alfrescoApi = TestBed.get(AlfrescoApiService);
});
translationService = TestBed.get(TranslationService);
spyOn(translationService, 'get').and.returnValue(Observable.of('message'));
afterEach(() => {
fixture.destroy();
});
describe('Node lock dialog component', () => {
@@ -15,55 +15,34 @@
* limitations under the License.
*/
import { async, TestBed } from '@angular/core/testing';
import { TestBed } from '@angular/core/testing';
import { ComponentFixture } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing';
import { Observable } from 'rxjs/Observable';
import { ShareDialogComponent } from './share.dialog';
import { ContentTestingModule } from '../testing/content.testing.module';
import { setupTestBed } from '@alfresco/adf-core';
describe('ShareDialogComponent', () => {
let fixture: ComponentFixture<ShareDialogComponent>;
let component: ShareDialogComponent;
let dialogRef;
const dialogRef = {
close: jasmine.createSpy('close')
};
let data: any = {
node: { entry: { properties: { 'qshare:sharedId': 'example-link' }, name: 'example-name' } }
node: { entry: { properties: { 'qshare:sharedId': 'example-link' }, name: 'example-name' } },
baseShareUrl: 'baseShareUrl-example'
};
beforeEach(async(() => {
dialogRef = {
close: jasmine.createSpy('close')
};
TestBed.configureTestingModule({
imports: [
FormsModule,
ReactiveFormsModule,
BrowserDynamicTestingModule
],
declarations: [
ShareDialogComponent
],
providers: [
{ provide: MatDialogRef, useValue: dialogRef },
{
provide: MAT_DIALOG_DATA,
useValue: data
}
]
});
TestBed.overrideModule(BrowserDynamicTestingModule, {
set: { entryComponents: [ShareDialogComponent] }
});
TestBed.compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
providers: [
{ provide: MatDialogRef, useValue: dialogRef },
{ provide: MAT_DIALOG_DATA, useValue: data }
]
});
beforeEach(() => {
fixture = TestBed.createComponent(ShareDialogComponent);
@@ -79,7 +58,7 @@ describe('ShareDialogComponent', () => {
describe('public link creation', () => {
it('should not create the public link if it alredy present in the node', () => {
it('should not create the public link if it already present in the node', () => {
let spyCreate = spyOn(component, 'createSharedLinks').and.returnValue(Observable.of(''));
component.ngOnInit();
@@ -87,16 +66,16 @@ describe('ShareDialogComponent', () => {
expect(spyCreate).not.toHaveBeenCalled();
});
it('should not create the public link if it alredy present in the node', () => {
it('should not create the public link if it already present in the node', () => {
component.data = {
node: { entry: { name: 'example-name' } }
node: { entry: { name: 'example-name' } },
baseShareUrl: 'baseShareUrl-example'
};
let spyCreate = spyOn(component, 'createSharedLinks').and.returnValue(Observable.of(''));
data = {
node: { entry: { name: 'example-name' } }
node: { entry: { name: 'example-name' } },
baseShareUrl: 'baseShareUrl-example'
};
@@ -19,7 +19,7 @@ import { TestBed, ComponentFixture } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { MatDialog } from '@angular/material';
import { Component, DebugElement } from '@angular/core';
import { AlfrescoApiService } from '@alfresco/adf-core';
import { AlfrescoApiService, setupTestBed, CoreModule, AlfrescoApiServiceMock } from '@alfresco/adf-core';
import { DialogModule } from '../dialogs/dialog.module';
import { NodeDownloadDirective } from './node-download.directive';
@@ -40,17 +40,22 @@ describe('NodeDownloadDirective', () => {
let contentService;
let dialogSpy;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
DialogModule
],
declarations: [
TestComponent,
NodeDownloadDirective
]
});
setupTestBed({
imports: [
CoreModule.forRoot(),
DialogModule
],
providers: [
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }
// { provide: AppConfigService, useValue: AppConfigServiceMock },
],
declarations: [
TestComponent,
NodeDownloadDirective
]
});
beforeEach(() => {
fixture = TestBed.createComponent(TestComponent);
component = fixture.componentInstance;
element = fixture.debugElement.query(By.directive(NodeDownloadDirective));
@@ -15,7 +15,7 @@
* limitations under the License.
*/
import { TestBed, ComponentFixture, async, fakeAsync } from '@angular/core/testing';
import { TestBed, ComponentFixture, fakeAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { Component, DebugElement } from '@angular/core';
@@ -24,6 +24,8 @@ import { MinimalNodeEntryEntity } from 'alfresco-js-api';
import { NodeActionsService } from '../document-list/services/node-actions.service';
import { ContentNodeDialogService } from '../content-node-selector/content-node-dialog.service';
import { DocumentListService } from '../document-list/services/document-list.service';
import { setupTestBed } from '../../core/testing';
import { CoreModule } from '@alfresco/adf-core';
const fakeNode: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {
id: 'fake',
@@ -44,22 +46,20 @@ describe('NodeLock Directive', () => {
let element: DebugElement;
let contentNodeDialogService: ContentNodeDialogService;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [],
providers: [
NodeActionsService,
ContentNodeDialogService,
DocumentListService
],
declarations: [
TestComponent,
NodeLockDirective
]
});
TestBed.compileComponents();
}));
setupTestBed({
imports: [
CoreModule.forRoot()
],
providers: [
NodeActionsService,
ContentNodeDialogService,
DocumentListService
],
declarations: [
TestComponent,
NodeLockDirective
]
});
beforeEach(() => {
fixture = TestBed.createComponent(TestComponent);
@@ -16,36 +16,22 @@
*/
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, TestBed } from '@angular/core/testing';
import { DataTableModule } from '@alfresco/adf-core';
import { DocumentListService } from '../../services/document-list.service';
import { CustomResourcesService } from '../../services/custom-resources.service';
import { TestBed } from '@angular/core/testing';
import { setupTestBed } from '@alfresco/adf-core';
import { ContentActionModel } from './../../models/content-action.model';
import { DocumentListComponent } from './../document-list.component';
import { ContentActionListComponent } from './content-action-list.component';
import { ContentTestingModule } from '../../../testing/content.testing.module';
describe('ContentColumnList', () => {
let documentList: DocumentListComponent;
let actionList: ContentActionListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
DataTableModule
],
declarations: [
DocumentListComponent
],
providers: [
DocumentListService,
CustomResourcesService
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
beforeEach(() => {
documentList = (TestBed.createComponent(DocumentListComponent).componentInstance as DocumentListComponent);
@@ -18,11 +18,8 @@
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { EventEmitter } from '@angular/core';
import { async, TestBed } from '@angular/core/testing';
import { ContentService } from '@alfresco/adf-core';
import { DataTableModule } from '@alfresco/adf-core';
import { ContentService, setupTestBed } from '@alfresco/adf-core';
import { FileNode } from '../../../mock';
import { DocumentListService } from '../../services/document-list.service';
import { CustomResourcesService } from '../../services/custom-resources.service';
import { ContentActionHandler } from './../../models/content-action.model';
import { DocumentActionsService } from './../../services/document-actions.service';
import { FolderActionsService } from './../../services/folder-actions.service';
@@ -31,6 +28,7 @@ import { DocumentListComponent } from './../document-list.component';
import { ContentActionListComponent } from './content-action-list.component';
import { ContentActionComponent } from './content-action.component';
import { ContentActionModel } from './../../models/content-action.model';
import { ContentTestingModule } from '../../../testing/content.testing.module';
describe('ContentAction', () => {
@@ -42,23 +40,10 @@ describe('ContentAction', () => {
let contentService: ContentService;
let nodeActionsService: NodeActionsService;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
DataTableModule
],
providers: [
DocumentListService,
CustomResourcesService
],
declarations: [
DocumentListComponent
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
beforeEach(() => {
contentService = TestBed.get(ContentService);
@@ -16,14 +16,12 @@
*/
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, TestBed } from '@angular/core/testing';
import { DataColumn, DataTableModule } from '@alfresco/adf-core';
import { TestBed } from '@angular/core/testing';
import { DataColumn, setupTestBed } from '@alfresco/adf-core';
import { LogService } from '@alfresco/adf-core';
import { DocumentListService } from '../../services/document-list.service';
import { CustomResourcesService } from '../../services/custom-resources.service';
import { DocumentListComponent } from './../document-list.component';
import { ContentColumnListComponent } from './content-column-list.component';
import { ContentTestingModule } from '../../../testing/content.testing.module';
describe('ContentColumnList', () => {
@@ -31,23 +29,10 @@ describe('ContentColumnList', () => {
let columnList: ContentColumnListComponent;
let logService: LogService;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
DataTableModule
],
declarations: [
DocumentListComponent
],
providers: [
CustomResourcesService,
DocumentListService
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
beforeEach(() => {
documentList = (TestBed.createComponent(DocumentListComponent).componentInstance as DocumentListComponent);
@@ -16,14 +16,12 @@
*/
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, TestBed } from '@angular/core/testing';
import { LogService } from '@alfresco/adf-core';
import { DataTableModule } from '@alfresco/adf-core';
import { DocumentListService } from '../../services/document-list.service';
import { CustomResourcesService } from '../../services/custom-resources.service';
import { TestBed } from '@angular/core/testing';
import { LogService, setupTestBed } from '@alfresco/adf-core';
import { DocumentListComponent } from './../document-list.component';
import { ContentColumnListComponent } from './content-column-list.component';
import { ContentColumnComponent } from './content-column.component';
import { ContentTestingModule } from '../../../testing/content.testing.module';
describe('ContentColumn', () => {
@@ -31,24 +29,10 @@ describe('ContentColumn', () => {
let columnList: ContentColumnListComponent;
let logService: LogService;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
DataTableModule
],
declarations: [
DocumentListComponent
],
providers: [
CustomResourcesService,
DocumentListService,
LogService
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
beforeEach(() => {
documentList = (TestBed.createComponent(DocumentListComponent).componentInstance as DocumentListComponent);
@@ -15,11 +15,10 @@
* limitations under the License.
*/
import { CUSTOM_ELEMENTS_SCHEMA, NgZone, SimpleChange, TemplateRef } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AlfrescoApiService, TranslationService } from '@alfresco/adf-core';
import { CUSTOM_ELEMENTS_SCHEMA, SimpleChange, TemplateRef } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AlfrescoApiService } from '@alfresco/adf-core';
import { DataColumn, DataTableComponent } from '@alfresco/adf-core';
import { DataTableModule } from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';
import { FileNode, FolderNode } from '../../mock';
@@ -38,8 +37,8 @@ import { RowFilter } from './../data/row-filter.model';
import { DocumentListService } from './../services/document-list.service';
import { CustomResourcesService } from './../services/custom-resources.service';
import { DocumentListComponent } from './document-list.component';
declare let jasmine: any;
import { setupTestBed } from '@alfresco/adf-core';
import { ContentTestingModule } from '../../testing/content.testing.module';
describe('DocumentList', () => {
@@ -51,24 +50,10 @@ describe('DocumentList', () => {
let element: HTMLElement;
let eventMock: any;
beforeEach(async(() => {
let zone = new NgZone({ enableLongStackTrace: false });
TestBed.configureTestingModule({
imports: [
DataTableModule
],
declarations: [
DocumentListComponent
],
providers: [
DocumentListService,
CustomResourcesService,
{ provide: NgZone, useValue: zone }
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
beforeEach(() => {
eventMock = {
@@ -78,35 +63,27 @@ describe('DocumentList', () => {
fixture = TestBed.createComponent(DocumentListComponent);
let translateService = TestBed.get(TranslationService);
spyOn(translateService, 'get').and.callFake((key) => {
return Observable.of(key);
});
element = fixture.nativeElement;
documentList = fixture.componentInstance;
documentListService = TestBed.get(DocumentListService);
apiService = TestBed.get(AlfrescoApiService);
customResourcesService = TestBed.get(CustomResourcesService);
fixture.detectChanges();
});
beforeEach(() => {
jasmine.Ajax.install();
});
afterEach(() => {
jasmine.Ajax.uninstall();
fixture.destroy();
});
it('should setup default columns', () => {
fixture.detectChanges();
documentList.ngAfterContentInit();
expect(documentList.data.getColumns().length).not.toBe(0);
});
it('should add the custom columns', () => {
fixture.detectChanges();
let column = <DataColumn> {
title: 'title',
key: 'source',
@@ -178,41 +155,29 @@ describe('DocumentList', () => {
expect(action.execute).toHaveBeenCalledWith(node);
});
it('should show the loading state during the loading of new elements', (done) => {
it('should show the loading state during the loading of new elements', () => {
documentList.ngOnInit();
documentList.ngAfterContentInit();
documentList.node = new NodePaging();
fixture.detectChanges();
fixture.whenStable().then(() => {
fixture.detectChanges();
expect(element.querySelector('.adf-document-list-loading')).toBeDefined();
done();
});
expect(element.querySelector('.adf-document-list-loading')).toBeDefined();
});
it('should hide the header if showHeader is false', (done) => {
it('should hide the header if showHeader is false', () => {
documentList.showHeader = false;
fixture.detectChanges();
fixture.whenStable().then(() => {
fixture.detectChanges();
expect(element.querySelector('.adf-datatable-header')).toBe(null);
done();
});
expect(element.querySelector('.adf-datatable-header')).toBe(null);
});
it('should show the header if showHeader is true', (done) => {
it('should show the header if showHeader is true', () => {
documentList.showHeader = true;
fixture.detectChanges();
fixture.whenStable().then(() => {
fixture.detectChanges();
expect(element.querySelector('.adf-datatable-header')).toBeDefined();
done();
});
expect(element.querySelector('.adf-datatable-header')).toBeDefined();
});
it('should reset selection upon reload', () => {
@@ -224,29 +189,21 @@ describe('DocumentList', () => {
expect(documentList.resetSelection).toHaveBeenCalled();
});
it('should use the cardview style if cardview is true', (done) => {
it('should use the cardview style if cardview is true', () => {
documentList.display = 'gallery';
fixture.detectChanges();
fixture.whenStable().then(() => {
fixture.detectChanges();
expect(element.querySelector('.adf-data-table-card')).toBeDefined();
done();
});
expect(element.querySelector('.adf-data-table-card')).toBeDefined();
});
it('should use the base document list style if cardview is false', (done) => {
it('should use the base document list style if cardview is false', () => {
documentList.display = 'list';
fixture.detectChanges();
fixture.whenStable().then(() => {
fixture.detectChanges();
expect(element.querySelector('.adf-data-table-card')).toBe(null);
expect(element.querySelector('.adf-data-table')).toBeDefined();
done();
});
expect(element.querySelector('.adf-data-table-card')).toBe(null);
expect(element.querySelector('.adf-data-table')).toBeDefined();
});
it('should reset selection upon reload', () => {
@@ -258,7 +215,7 @@ describe('DocumentList', () => {
expect(documentList.resetSelection).toHaveBeenCalled();
});
it('should reset when a prameter changes', () => {
it('should reset when a parameter changes', () => {
spyOn(documentList.dataTable, 'resetSelection').and.callThrough();
documentList.ngOnChanges({});
@@ -266,25 +223,18 @@ describe('DocumentList', () => {
});
it('should empty template be present when no element are present', (done) => {
documentList.currentFolderId = '1d26e465-dea3-42f3-b415-faa8364b9692';
fixture.detectChanges();
documentList.folderNode = new NodeMinimal();
documentList.folderNode.id = '1d26e465-dea3-42f3-b415-faa8364b9692';
documentList.reload();
fixture.detectChanges();
spyOn(documentListService, 'getFolder').and.returnValue(Observable.of(fakeNodeAnswerWithNOEntries));
documentList.ready.subscribe(() => {
fixture.detectChanges();
expect(element.querySelector('#adf-document-list-empty')).toBeDefined();
done();
});
jasmine.Ajax.requests.at(0).respondWith({
status: 200,
contentType: 'application/json',
responseText: JSON.stringify(fakeNodeAnswerWithNOEntries)
});
documentList.reload();
});
it('should not execute action without node provided', () => {
@@ -674,6 +624,8 @@ describe('DocumentList', () => {
let folder = new FolderNode();
let file = new FileNode();
spyOn(documentList, 'loadFolder').and.stub();
expect(documentList.performNavigation(folder)).toBeTruthy();
expect(documentList.performNavigation(file)).toBeFalsy();
expect(documentList.performNavigation(null)).toBeFalsy();
@@ -719,7 +671,7 @@ describe('DocumentList', () => {
it('should display folder content from loadFolderByNodeId on reload if currentFolderId defined', () => {
documentList.currentFolderId = 'id-folder';
spyOn(documentList, 'loadFolderByNodeId').and.callThrough();
spyOn(documentList, 'loadFolderByNodeId').and.stub();
documentList.reload();
expect(documentList.loadFolderByNodeId).toHaveBeenCalled();
});
@@ -833,6 +785,7 @@ describe('DocumentList', () => {
});
it('should set row filter and reload contents if currentFolderId is set when setting rowFilter', () => {
fixture.detectChanges();
let filter = <RowFilter> {};
documentList.currentFolderId = 'id';
spyOn(documentList.data, 'setFilter').and.callThrough();
@@ -854,6 +807,7 @@ describe('DocumentList', () => {
});
it('should set image resolver for underlying adapter', () => {
fixture.detectChanges();
let resolver = <ImageResolver> {};
spyOn(documentList.data, 'setImageResolver').and.callThrough();
@@ -933,7 +887,7 @@ describe('DocumentList', () => {
documentList.loadFolderByNodeId('123');
});
it('should set no permision when getFolderNode fails with 403', (done) => {
it('should set no permission when getFolderNode fails with 403', (done) => {
const error = { message: '{ "error": { "statusCode": 403 } }' };
spyOn(documentListService, 'getFolderNode').and.returnValue(Observable.throw(error));
@@ -957,6 +911,7 @@ describe('DocumentList', () => {
});
it('should reload contents if node data changes after previously got noPermission error', () => {
fixture.detectChanges();
spyOn(documentList.data, 'loadPage').and.callThrough();
documentList.noPermission = true;
@@ -968,7 +923,7 @@ describe('DocumentList', () => {
expect(documentList.noPermission).toBeFalsy();
});
it('should noPermission be true if navigate to a folder with no permission', (done) => {
it('should noPermission be true if navigate to a folder with no permission', () => {
const error = { message: '{ "error": { "statusCode": 403 } }' };
documentList.currentFolderId = '1d26e465-dea3-42f3-b415-faa8364b9692';
@@ -981,12 +936,8 @@ describe('DocumentList', () => {
documentList.loadFolder();
let clickedFolderNode = new FolderNode('fake-folder-node');
documentList.onNodeDblClick(clickedFolderNode);
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(documentList.noPermission).toBeTruthy();
done();
});
expect(documentList.noPermission).toBeTruthy();
});
it('should not perform navigation for virtual sources', () => {
@@ -1061,6 +1012,7 @@ describe('DocumentList', () => {
});
it('should assure that sites have name property set', (done) => {
fixture.detectChanges();
const sitesApi = apiService.getInstance().core.sitesApi;
spyOn(sitesApi, 'getSites').and.returnValue(Promise.resolve(fakeGetSitesAnswer));
@@ -1075,6 +1027,7 @@ describe('DocumentList', () => {
});
it('should assure that sites have name property set correctly', (done) => {
fixture.detectChanges();
const sitesApi = apiService.getInstance().core.sitesApi;
spyOn(sitesApi, 'getSites').and.returnValue(Promise.resolve(fakeGetSitesAnswer));
@@ -1109,6 +1062,7 @@ describe('DocumentList', () => {
});
it('should assure that user membership sites have name property set', (done) => {
fixture.detectChanges();
const peopleApi = apiService.getInstance().core.peopleApi;
spyOn(peopleApi, 'getSiteMembership').and.returnValue(Promise.resolve(fakeGetSiteMembership));
@@ -1123,6 +1077,7 @@ describe('DocumentList', () => {
});
it('should assure that user membership sites have name property set correctly', (done) => {
fixture.detectChanges();
const peopleApi = apiService.getInstance().core.peopleApi;
spyOn(peopleApi, 'getSiteMembership').and.returnValue(Promise.resolve(fakeGetSiteMembership));
@@ -1267,9 +1222,10 @@ describe('DocumentList', () => {
});
it('should add includeFields in the server request when present', () => {
fixture.detectChanges();
documentList.currentFolderId = 'fake-id';
documentList.includeFields = ['test-include'];
spyOn(documentListService, 'getFolder');
spyOn(documentListService, 'getFolder').and.stub();
documentList.ngOnChanges({ rowFilter: new SimpleChange(null, <RowFilter> {}, true) });
@@ -16,36 +16,21 @@
*/
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, TestBed } from '@angular/core/testing';
import { DataTableComponent, DataTableModule } from '@alfresco/adf-core';
import { DocumentListService } from '../../services/document-list.service';
import { CustomResourcesService } from '../../services/custom-resources.service';
import { TestBed } from '@angular/core/testing';
import { DataTableComponent, setupTestBed } from '@alfresco/adf-core';
import { DocumentListComponent } from './../document-list.component';
import { EmptyFolderContentDirective } from './empty-folder-content.directive';
import { ContentTestingModule } from '../../../testing/content.testing.module';
describe('EmptyFolderContent', () => {
let emptyFolderContent: EmptyFolderContentDirective;
let documentList: DocumentListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
DataTableModule
],
declarations: [
DocumentListComponent
],
providers: [
DocumentListService,
CustomResourcesService
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
beforeEach(() => {
documentList = (TestBed.createComponent(DocumentListComponent).componentInstance as DocumentListComponent);
@@ -15,35 +15,20 @@
* limitations under the License.
*/
import { async, TestBed } from '@angular/core/testing';
import { MatProgressSpinnerModule } from '@angular/material';
import { DataTableComponent, DataTableModule } from '@alfresco/adf-core';
import { DocumentListService } from '../../services/document-list.service';
import { CustomResourcesService } from '../../services/custom-resources.service';
import { TestBed } from '@angular/core/testing';
import { DataTableComponent, setupTestBed } from '@alfresco/adf-core';
import { DocumentListComponent } from './../document-list.component';
import { NoPermissionContentDirective } from './no-permission-content.directive';
import { ContentTestingModule } from '../../../testing/content.testing.module';
describe('NoPermissionContentDirective', () => {
let noPermissionContent: NoPermissionContentDirective;
let documentList: DocumentListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
DataTableModule,
MatProgressSpinnerModule
],
declarations: [
DocumentListComponent
],
providers: [
DocumentListService,
CustomResourcesService
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule]
});
beforeEach(() => {
documentList = (TestBed.createComponent(DocumentListComponent).componentInstance as DocumentListComponent);
@@ -16,7 +16,7 @@
*/
import { TestBed } from '@angular/core/testing';
import { AlfrescoApiServiceMock, AppConfigService, StorageService, ContentService, TranslationMock } from '@alfresco/adf-core';
import { AlfrescoApiServiceMock, AppConfigService, StorageService, ContentService, setupTestBed, CoreModule, TranslationMock } from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import { FileNode, FolderNode } from '../../mock';
import { ContentActionHandler } from '../models/content-action.model';
@@ -28,6 +28,12 @@ describe('FolderActionsService', () => {
let service: FolderActionsService;
let documentListService: DocumentListService;
setupTestBed({
imports: [
CoreModule.forRoot()
]
});
beforeEach(() => {
let appConfig: AppConfigService = TestBed.get(AppConfigService);
appConfig.config.ecmHost = 'http://localhost:9876/ecm';
@@ -17,14 +17,13 @@
import { async, TestBed } from '@angular/core/testing';
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
import { AppConfigService } from '@alfresco/adf-core';
import { AppConfigService, setupTestBed, CoreModule } from '@alfresco/adf-core';
import { DocumentListService } from './document-list.service';
import { NodeActionsService } from './node-actions.service';
import { ContentNodeDialogService } from '../../content-node-selector/content-node-dialog.service';
import { Observable } from 'rxjs/Observable';
import { MatDialogRef } from '@angular/material';
import { NodeLockDialogComponent } from '../../dialogs/node-lock.dialog';
import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing';
import { DialogModule } from '../../dialogs/dialog.module';
const fakeNode: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {
id: 'fake'
@@ -39,24 +38,18 @@ describe('NodeActionsService', () => {
open: jasmine.createSpy('open')
};
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
NodeLockDialogComponent
],
providers: [
NodeActionsService,
DocumentListService,
ContentNodeDialogService,
{ provide: MatDialogRef, useValue: dialogRef }
]
});
TestBed.overrideModule(BrowserDynamicTestingModule, {
set: { entryComponents: [ NodeLockDialogComponent ] }
}).compileComponents();
}));
setupTestBed({
imports: [
CoreModule.forRoot(),
DialogModule
],
providers: [
NodeActionsService,
DocumentListService,
ContentNodeDialogService,
{ provide: MatDialogRef, useValue: dialogRef }
]
});
beforeEach(() => {
let appConfig: AppConfigService = TestBed.get(AppConfigService);
@@ -15,17 +15,14 @@
* limitations under the License.
*/
import { HttpClientModule } from '@angular/common/http';
import { Component } from '@angular/core';
import { ComponentFixture, TestBed, async } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatDialog, MatDialogModule } from '@angular/material';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MatDialog } from '@angular/material';
import { By } from '@angular/platform-browser';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { Observable } from 'rxjs/Observable';
import { FolderDialogComponent } from '../dialogs/folder.dialog';
import { DirectiveModule, ContentService, TranslateLoaderService } from '@alfresco/adf-core';
import { ContentService, setupTestBed, CoreModule } from '@alfresco/adf-core';
import { FolderCreateDirective } from './folder-create.directive';
import { Subject } from 'rxjs/Subject';
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
@@ -39,7 +36,7 @@ import { MinimalNodeEntryEntity } from 'alfresco-js-api';
[nodeType]="'cm:my-litte-pony'">
</div>`
})
class Test1Component {
class TestTypeComponent {
parentNode = '';
public successParameter: MinimalNodeEntryEntity = null;
@@ -51,13 +48,13 @@ class Test1Component {
@Component({
template: `<div [adf-create-folder]="parentNode"></div>`
})
class Test2Component {
class TestComponent {
parentNode = '';
public successParameter: MinimalNodeEntryEntity = null;
}
describe('FolderCreateDirective', () => {
let fixture: ComponentFixture<Test1Component | Test2Component>;
let fixture: ComponentFixture<TestTypeComponent | TestComponent>;
let element;
let node: any;
let dialog: MatDialog;
@@ -66,32 +63,27 @@ describe('FolderCreateDirective', () => {
const event = { type: 'click', preventDefault: () => null };
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
HttpClientModule,
MatDialogModule,
FormsModule,
DirectiveModule,
ReactiveFormsModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateLoaderService
}
})
],
declarations: [
Test1Component,
Test2Component,
FolderDialogComponent,
FolderCreateDirective
],
providers: [
ContentService
]
}).compileComponents();
}));
setupTestBed({
imports: [
CoreModule.forRoot()
],
declarations: [
TestTypeComponent,
TestComponent,
FolderDialogComponent,
FolderCreateDirective
],
providers: [
ContentService
]
});
beforeEach(() => {
fixture = TestBed.createComponent(TestComponent);
element = fixture.debugElement.query(By.directive(FolderCreateDirective));
dialog = TestBed.get(MatDialog);
contentService = TestBed.get(ContentService);
});
beforeEach(() => {
node = { entry: { id: 'nodeId' } };
@@ -108,7 +100,7 @@ describe('FolderCreateDirective', () => {
describe('With overrides', () => {
beforeEach(() => {
fixture = TestBed.createComponent(Test1Component);
fixture = TestBed.createComponent(TestTypeComponent);
element = fixture.debugElement.query(By.directive(FolderCreateDirective));
dialog = TestBed.get(MatDialog);
contentService = TestBed.get(ContentService);
@@ -173,7 +165,7 @@ describe('FolderCreateDirective', () => {
describe('Without overrides', () => {
beforeEach(() => {
fixture = TestBed.createComponent(Test2Component);
fixture = TestBed.createComponent(TestComponent);
element = fixture.debugElement.query(By.directive(FolderCreateDirective));
dialog = TestBed.get(MatDialog);
contentService = TestBed.get(ContentService);
@@ -15,17 +15,13 @@
* limitations under the License.
*/
import { HttpClientModule } from '@angular/common/http';
import { Component } from '@angular/core';
import { ComponentFixture, TestBed, async } from '@angular/core/testing';
import { MatDialog, MatDialogModule } from '@angular/material';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MatDialog } from '@angular/material';
import { By } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { Observable } from 'rxjs/Observable';
import { ContentService, TranslateLoaderService, DirectiveModule } from '@alfresco/adf-core';
import { ContentService, setupTestBed, CoreModule } from '@alfresco/adf-core';
import { FolderEditDirective } from './folder-edit.directive';
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
import { Subject } from 'rxjs/Subject';
@@ -55,33 +51,17 @@ describe('FolderEditDirective', () => {
preventDefault: () => null
};
setupTestBed({
imports: [
CoreModule.forRoot()
],
declarations: [
TestComponent,
FolderEditDirective
]
});
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
HttpClientModule,
MatDialogModule,
FormsModule,
ReactiveFormsModule,
DirectiveModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateLoaderService
}
})
],
declarations: [
TestComponent,
FolderEditDirective
]
,
providers: [
ContentService
]
});
TestBed.compileComponents();
fixture = TestBed.createComponent(TestComponent);
element = fixture.debugElement.query(By.directive(FolderEditDirective));
dialog = TestBed.get(MatDialog);
+4 -28
View File
@@ -18,32 +18,8 @@ appContext.keys().forEach(appContext);
const TestBed = require('@angular/core/testing').TestBed;
const browser = require('@angular/platform-browser-dynamic/testing');
const NoopAnimationsModule = require('@angular/platform-browser/animations').NoopAnimationsModule;
const CoreModule = require('../core').CoreModule;
const AppConfigService = require('../core').AppConfigService;
const AppConfigServiceMock = require('../core').AppConfigServiceMock;
const TranslationService = require('../core').TranslationService;
const TranslationMock = require('../core').TranslationMock;
const AlfrescoApiServiceMock = require('../core').AlfrescoApiServiceMock;
const AlfrescoApiService = require('../core').AlfrescoApiService;
TestBed.initTestEnvironment(browser.BrowserDynamicTestingModule, browser.platformBrowserDynamicTesting());
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
CoreModule.forRoot()
],
providers: [
{provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock},
{provide: AppConfigService, useClass: AppConfigServiceMock},
{provide: TranslationService, useClass: TranslationMock}
]
});
});
afterEach(() => {
TestBed.resetTestingModule();
});
TestBed.initTestEnvironment(
browser.BrowserDynamicTestingModule,
browser.platformBrowserDynamicTesting()
);
-1
View File
@@ -20,4 +20,3 @@ export * from './document-list.component.mock';
export * from './document-list.service.mock';
export * from './search.component.mock';
export * from './search.service.mock';
export * from './search-control.component.mock';
@@ -1,41 +0,0 @@
/*!
* @license
* Copyright 2016 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';
@Component({
template: `
<adf-search-control [highlight]="true">
<adf-empty-search-result>
<span id="custom-no-result">{{customMessage}}</span>
</adf-empty-search-result>
</adf-search-control>
`
})
export class SimpleSearchTestCustomEmptyComponent {
customMessage: string = '';
constructor() {
}
setCustomMessageForNoResult(message: string) {
this.customMessage = message;
}
}
@@ -18,7 +18,7 @@
import { SimpleInheritedPermissionTestComponent } from '../../mock/inherited-permission.component.mock';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { PermissionManagerModule } from '../../index';
import { NodesApiService } from '@alfresco/adf-core';
import { NodesApiService, setupTestBed, CoreModule } from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
const fakeNodeWithInherit: any = { id: 'fake-id', permissions : {isInheritanceEnabled : true}};
@@ -31,26 +31,22 @@ describe('InheritPermissionDirective', () => {
let component: SimpleInheritedPermissionTestComponent;
let nodeService: NodesApiService;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
PermissionManagerModule
],
declarations: [
SimpleInheritedPermissionTestComponent
]
}).compileComponents().then(() => {
fixture = TestBed.createComponent(SimpleInheritedPermissionTestComponent);
component = fixture.componentInstance;
element = fixture.nativeElement;
nodeService = TestBed.get(NodesApiService);
});
}));
setupTestBed({
imports: [
CoreModule.forRoot(),
PermissionManagerModule
],
declarations: [
SimpleInheritedPermissionTestComponent
]
});
afterEach(async(() => {
fixture.destroy();
TestBed.resetTestingModule();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SimpleInheritedPermissionTestComponent);
component = fixture.componentInstance;
element = fixture.nativeElement;
nodeService = TestBed.get(NodesApiService);
});
it('should be able to render the simple component', async(() => {
fixture.detectChanges();
@@ -18,7 +18,7 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { PermissionListComponent } from './permission-list.component';
import { By } from '@angular/platform-browser';
import { NodesApiService, SearchService } from '@alfresco/adf-core';
import { NodesApiService, SearchService, setupTestBed } from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import { NodePermissionService } from '../../services/node-permission.service';
import { fakeNodeWithPermissions,
@@ -28,6 +28,7 @@ import { fakeNodeWithPermissions,
fakeSiteRoles,
fakeNodeWithoutPermissions,
fakeEmptyResponse } from '../../../mock/permission-list.component.mock';
import { ContentTestingModule } from '../../../testing/content.testing.module';
describe('PermissionDisplayComponent', () => {
@@ -38,28 +39,26 @@ describe('PermissionDisplayComponent', () => {
let nodePermissionService: NodePermissionService;
let searchApiService: SearchService;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
PermissionListComponent
],
providers: [NodePermissionService]
}).compileComponents().then(() => {
fixture = TestBed.createComponent(PermissionListComponent);
component = fixture.componentInstance;
element = fixture.nativeElement;
nodeService = TestBed.get(NodesApiService);
nodePermissionService = TestBed.get(NodePermissionService);
searchApiService = TestBed.get(SearchService);
});
}));
setupTestBed({
imports: [ContentTestingModule]
});
afterEach(async(() => {
beforeEach(() => {
fixture = TestBed.createComponent(PermissionListComponent);
component = fixture.componentInstance;
element = fixture.nativeElement;
nodeService = TestBed.get(NodesApiService);
nodePermissionService = TestBed.get(NodePermissionService);
searchApiService = TestBed.get(SearchService);
});
afterEach(() => {
fixture.destroy();
TestBed.resetTestingModule();
}));
});
it('should be able to render the component', () => {
spyOn(nodeService, 'getNode').and.returnValue(Observable.of(fakeNodeWithOnlyLocally));
spyOn(nodePermissionService, 'getNodeRoles').and.returnValue(Observable.of([]));
fixture.detectChanges();
expect(element.querySelector('#adf-permission-display-container')).not.toBeNull();
});
@@ -17,24 +17,25 @@
import { async, TestBed } from '@angular/core/testing';
import { NodePermissionService } from './node-permission.service';
import { SearchService, NodesApiService } from '@alfresco/adf-core';
import { SearchService, NodesApiService, setupTestBed, CoreModule } from '@alfresco/adf-core';
import { MinimalNodeEntryEntity, PermissionElement } from 'alfresco-js-api';
import { Observable } from 'rxjs/Observable';
import { fakeEmptyResponse, fakeNodeWithOnlyLocally, fakeSiteRoles, fakeSiteNodeResponse } from '../../mock/permission-list.component.mock';
describe('NodePermissionService', () => {
let service: NodePermissionService,
nodeService: NodesApiService,
searchApiService: SearchService;
let service: NodePermissionService;
let nodeService: NodesApiService;
let searchApiService: SearchService;
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
NodePermissionService
]
}).compileComponents();
}));
setupTestBed({
imports: [
CoreModule.forRoot()
],
providers: [
NodePermissionService
]
});
beforeEach(() => {
service = TestBed.get(NodePermissionService);
@@ -15,19 +15,44 @@
* limitations under the License.
*/
import { DebugElement } from '@angular/core';
import { Component, DebugElement, ViewChild } from '@angular/core';
import { async, discardPeriodicTasks, fakeAsync, ComponentFixture, TestBed, tick } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { AuthenticationService, SearchService } from '@alfresco/adf-core';
import { AuthenticationService, SearchService, setupTestBed, CoreModule } from '@alfresco/adf-core';
import { ThumbnailService } from '@alfresco/adf-core';
import { noResult, results } from '../../mock';
import { SearchControlComponent } from './search-control.component';
import { SearchTriggerDirective } from './search-trigger.directive';
import { SearchComponent } from './search.component';
import { EmptySearchResultComponent } from './empty-search-result.component';
import { SimpleSearchTestCustomEmptyComponent } from '../../mock';
import { SearchModule } from '../../index';
import { Observable } from 'rxjs/Observable';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
@Component({
template: `
<adf-search-control [highlight]="true" #search>
<adf-empty-search-result>
<span id="custom-no-result">{{customMessage}}</span>
</adf-empty-search-result>
</adf-search-control>
`
})
export class SimpleSearchTestCustomEmptyComponent {
customMessage: string = '';
@ViewChild(SearchControlComponent)
searchComponent: SearchControlComponent;
constructor() {
}
setCustomMessageForNoResult(message: string) {
this.customMessage = message;
}
}
describe('SearchControlComponent', () => {
@@ -37,37 +62,37 @@ describe('SearchControlComponent', () => {
let debugElement: DebugElement;
let searchService: SearchService;
let authService: AuthenticationService;
let fixtureCustom: ComponentFixture<SimpleSearchTestCustomEmptyComponent>;
let elementCustom: HTMLElement;
let componentCustom: SimpleSearchTestCustomEmptyComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
SearchControlComponent,
SearchComponent,
SearchTriggerDirective,
EmptySearchResultComponent
],
providers: [
ThumbnailService,
SearchService
]
}).compileComponents().then(() => {
fixture = TestBed.createComponent(SearchControlComponent);
debugElement = fixture.debugElement;
searchService = TestBed.get(SearchService);
authService = TestBed.get(AuthenticationService);
component = fixture.componentInstance;
element = fixture.nativeElement;
});
}));
setupTestBed({
imports: [
NoopAnimationsModule,
CoreModule.forRoot()
],
declarations: [
SearchControlComponent,
SearchComponent,
SearchTriggerDirective,
EmptySearchResultComponent,
SimpleSearchTestCustomEmptyComponent
],
providers: [
ThumbnailService,
SearchService
]
});
beforeEach(async(() => {
beforeEach(() => {
fixture = TestBed.createComponent(SearchControlComponent);
debugElement = fixture.debugElement;
searchService = TestBed.get(SearchService);
authService = TestBed.get(AuthenticationService);
spyOn(authService, 'isEcmLoggedIn').and.returnValue(true);
}));
afterEach(async(() => {
fixture.destroy();
TestBed.resetTestingModule();
}));
component = fixture.componentInstance;
element = fixture.nativeElement;
});
function typeWordIntoSearchInput(word: string): void {
let inputDebugElement = debugElement.query(By.css('#adf-control-input'));
@@ -78,9 +103,9 @@ describe('SearchControlComponent', () => {
describe('when input values are inserted', () => {
beforeEach(async(() => {
beforeEach(() => {
fixture.detectChanges();
}));
});
it('should emit searchChange when search term input changed', async(() => {
spyOn(searchService, 'search').and.returnValue(
@@ -202,7 +227,7 @@ describe('SearchControlComponent', () => {
expect(element.querySelector('#autocomplete-search-result-list')).toBeNull();
}));
it('should make autocomplete list control visible when search box has focus and there is a search result', (done) => {
it('should make autocomplete list control visible when search box has focus and there is a search result', async(() => {
spyOn(component, 'isSearchBarActive').and.returnValue(true);
spyOn(searchService, 'search').and.returnValue(Observable.of(results));
fixture.detectChanges();
@@ -213,9 +238,8 @@ describe('SearchControlComponent', () => {
fixture.detectChanges();
let resultElement: Element = element.querySelector('#autocomplete-search-result-list');
expect(resultElement).not.toBe(null);
done();
});
});
}));
it('should show autocomplete list noe results when search box has focus and there is search result with length 0', async(() => {
spyOn(component, 'isSearchBarActive').and.returnValue(true);
@@ -231,7 +255,7 @@ describe('SearchControlComponent', () => {
});
}));
it('should hide autocomplete list results when the search box loses focus', (done) => {
it('should hide autocomplete list results when the search box loses focus', async(() => {
spyOn(component, 'isSearchBarActive').and.returnValue(true);
spyOn(searchService, 'search').and.returnValue(Observable.of(results));
fixture.detectChanges();
@@ -248,9 +272,8 @@ describe('SearchControlComponent', () => {
fixture.detectChanges();
resultElement = element.querySelector('#autocomplete-search-result-list');
expect(resultElement).not.toBe(null);
done();
});
});
}));
it('should keep autocomplete list control visible when user tabs into results', async(() => {
spyOn(component, 'isSearchBarActive').and.returnValue(true);
@@ -272,7 +295,7 @@ describe('SearchControlComponent', () => {
});
}));
it('should close the autocomplete when user press ESCAPE', (done) => {
it('should close the autocomplete when user press ESCAPE', async(() => {
spyOn(component, 'isSearchBarActive').and.returnValue(true);
spyOn(searchService, 'search').and.returnValue(Observable.of(results));
fixture.detectChanges();
@@ -291,12 +314,11 @@ describe('SearchControlComponent', () => {
fixture.detectChanges();
resultElement = <HTMLElement> element.querySelector('#result_option_0');
expect(resultElement).toBeNull();
done();
});
});
});
}));
it('should close the autocomplete when user press ENTER on input', (done) => {
it('should close the autocomplete when user press ENTER on input', async(() => {
spyOn(component, 'isSearchBarActive').and.returnValue(true);
spyOn(searchService, 'search').and.returnValue(Observable.of(results));
fixture.detectChanges();
@@ -315,10 +337,9 @@ describe('SearchControlComponent', () => {
fixture.detectChanges();
resultElement = <HTMLElement> element.querySelector('#result_option_0');
expect(resultElement).toBeNull();
done();
});
});
});
}));
it('should focus input element when autocomplete list is cancelled', async(() => {
spyOn(component, 'isSearchBarActive').and.returnValue(true);
@@ -380,13 +401,13 @@ describe('SearchControlComponent', () => {
expect(document.activeElement.id).toBe('result_option_0');
let firstElement = debugElement.query(By.css('#result_option_0'));
firstElement.triggerEventHandler('keyup.arrowdown', { target : firstElement.nativeElement});
firstElement.triggerEventHandler('keyup.arrowdown', { target: firstElement.nativeElement });
fixture.detectChanges();
expect(document.activeElement.id).toBe('result_option_1');
});
}));
it('should focus the input search when ARROW UP is pressed on the first list item', (done) => {
it('should focus the input search when ARROW UP is pressed on the first list item', async(() => {
spyOn(searchService, 'search').and.returnValue(Observable.of(results));
fixture.detectChanges();
let inputDebugElement = debugElement.query(By.css('#adf-control-input'));
@@ -401,16 +422,15 @@ describe('SearchControlComponent', () => {
expect(document.activeElement.id).toBe('result_option_0');
let firstElement = debugElement.query(By.css('#result_option_0'));
firstElement.triggerEventHandler('keyup.arrowup', { target : firstElement.nativeElement});
firstElement.triggerEventHandler('keyup.arrowup', { target: firstElement.nativeElement });
fixture.detectChanges();
fixture.whenStable().then(() => {
fixture.detectChanges();
expect(document.activeElement.id).toBe('adf-control-input');
done();
});
});
});
}));
});
@@ -458,19 +478,16 @@ describe('SearchControlComponent', () => {
discardPeriodicTasks();
}));
it('click on the search button should apply focus on input', fakeAsync(() => {
fixture = TestBed.createComponent(SearchControlComponent);
debugElement = fixture.debugElement;
xit('click on the search button should apply focus on input', fakeAsync(() => {
fixture.detectChanges();
let searchButton: DebugElement = debugElement.query(By.css('#adf-search-button'));
let inputDebugElement = debugElement.query(By.css('#adf-control-input'));
tick(100);
let searchButton: DebugElement = debugElement.query(By.css('#adf-search-button'));
searchButton.triggerEventHandler('click', null);
tick(100);
fixture.detectChanges();
let inputDebugElement = debugElement.query(By.css('#adf-control-input'));
tick(300);
tick(100);
fixture.detectChanges();
tick(100);
@@ -551,7 +568,7 @@ describe('SearchControlComponent', () => {
});
}));
it('should set deactivate the search after element is clicked', (done) => {
it('should set deactivate the search after element is clicked', async(() => {
spyOn(component, 'isSearchBarActive').and.returnValue(true);
spyOn(searchService, 'search').and.returnValue(Observable.of(results));
component.optionClicked.subscribe((item) => {
@@ -567,9 +584,8 @@ describe('SearchControlComponent', () => {
fixture.detectChanges();
let firstOption: DebugElement = debugElement.query(By.css('#result_name_0'));
firstOption.triggerEventHandler('click', null);
done();
});
});
}));
it('should NOT reset the search term after element is clicked', async(() => {
spyOn(component, 'isSearchBarActive').and.returnValue(true);
@@ -589,56 +605,33 @@ describe('SearchControlComponent', () => {
});
}));
});
});
describe('SearchControlComponent - No result custom', () => {
describe('SearchControlComponent - No result custom', () => {
let fixtureCustom: ComponentFixture<SimpleSearchTestCustomEmptyComponent>;
let elementCustom: HTMLElement;
let componentCustom: SimpleSearchTestCustomEmptyComponent;
let authServiceCustom: AuthenticationService;
let searchServiceCustom: SearchService;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
SearchModule
],
declarations: [
SimpleSearchTestCustomEmptyComponent
]
}).compileComponents().then(() => {
beforeEach(() => {
fixtureCustom = TestBed.createComponent(SimpleSearchTestCustomEmptyComponent);
componentCustom = fixtureCustom.componentInstance;
elementCustom = fixtureCustom.nativeElement;
authServiceCustom = TestBed.get(AuthenticationService);
searchServiceCustom = TestBed.get(SearchService);
});
}));
beforeEach(async(() => {
spyOn(authServiceCustom, 'isEcmLoggedIn').and.returnValue(true);
}));
afterEach(async(() => {
fixtureCustom.destroy();
TestBed.resetTestingModule();
}));
it('should display the custom no results when it is configured', async(() => {
const noResultCustomMessage = 'BANDI IS NOTHING';
componentCustom.setCustomMessageForNoResult(noResultCustomMessage);
spyOn(searchServiceCustom, 'search').and.returnValue(Observable.of(noResult));
fixtureCustom.detectChanges();
let inputDebugElement = fixtureCustom.debugElement.query(By.css('#adf-control-input'));
inputDebugElement.nativeElement.value = 'BANDY NOTHING';
inputDebugElement.nativeElement.focus();
inputDebugElement.nativeElement.dispatchEvent(new Event('input'));
fixtureCustom.whenStable().then(() => {
it('should display the custom no results when it is configured', async(() => {
const noResultCustomMessage = 'BANDI IS NOTHING';
spyOn(componentCustom.searchComponent, 'isSearchBarActive').and.returnValue(true);
componentCustom.setCustomMessageForNoResult(noResultCustomMessage);
spyOn(searchService, 'search').and.returnValue(Observable.of(noResult));
fixtureCustom.detectChanges();
expect(elementCustom.querySelector('#custom-no-result').textContent).toBe(noResultCustomMessage);
});
}));
let inputDebugElement = fixtureCustom.debugElement.query(By.css('#adf-control-input'));
inputDebugElement.nativeElement.value = 'SOMETHING';
inputDebugElement.nativeElement.focus();
inputDebugElement.nativeElement.dispatchEvent(new Event('input'));
fixtureCustom.detectChanges();
fixtureCustom.whenStable().then(() => {
fixtureCustom.detectChanges();
expect(elementCustom.querySelector('#custom-no-result').textContent).toBe(noResultCustomMessage);
});
}));
});
});
@@ -15,12 +15,12 @@
* limitations under the License.
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SearchService } from '@alfresco/adf-core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { SearchService, setupTestBed, CoreModule } from '@alfresco/adf-core';
import { QueryBody } from 'alfresco-js-api';
import { SearchModule } from '../../index';
import { differentResult, folderResult, result, SimpleSearchTestComponent } from '../../mock';
import { Observable } from 'rxjs/Observable';
import { SearchModule } from '../search.module';
function fakeNodeResultSearch(searchNode: QueryBody): Observable<any> {
if (searchNode && searchNode.query.query === 'FAKE_SEARCH_EXMPL') {
@@ -39,26 +39,23 @@ describe('SearchComponent', () => {
let component: SimpleSearchTestComponent;
let searchService: SearchService;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
SearchModule
],
declarations: [SimpleSearchTestComponent]
}).compileComponents().then(() => {
fixture = TestBed.createComponent(SimpleSearchTestComponent);
component = fixture.componentInstance;
element = fixture.nativeElement;
searchService = TestBed.get(SearchService);
});
}));
setupTestBed({
imports: [
CoreModule.forRoot(),
SearchModule
],
declarations: [SimpleSearchTestComponent]
});
beforeEach(() => {
fixture = TestBed.createComponent(SimpleSearchTestComponent);
component = fixture.componentInstance;
element = fixture.nativeElement;
searchService = TestBed.get(SearchService);
});
describe('search results', () => {
afterEach(() => {
fixture.destroy();
});
it('should clear results straight away when a new search term is entered', (done) => {
spyOn(searchService, 'search').and.returnValues(
Observable.of(result),
@@ -135,10 +132,6 @@ describe('SearchComponent', () => {
describe('search node', () => {
afterEach(() => {
fixture.destroy();
});
it('should perform a search based on the query node given', (done) => {
spyOn(searchService, 'searchByQueryBody')
.and.callFake((searchObj) => fakeNodeResultSearch(searchObj));
@@ -19,8 +19,9 @@ import { DebugElement } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DropdownSitesComponent, Relations } from './sites-dropdown.component';
import { SitesService, LogService } from '@alfresco/adf-core';
import { SitesService, setupTestBed, CoreModule, AlfrescoApiService, AlfrescoApiServiceMock } from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
declare let jasmine: any;
@@ -34,15 +35,18 @@ describe('DropdownSitesComponent', () => {
let siteListWitMembers: any;
let siteService: SitesService;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
DropdownSitesComponent
],
providers: [SitesService, LogService]
}).compileComponents();
}));
setupTestBed({
imports: [
NoopAnimationsModule,
CoreModule.forRoot()
],
declarations: [
DropdownSitesComponent
],
providers: [
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }
]
});
beforeEach(() => {
fixture = TestBed.createComponent(DropdownSitesComponent);
@@ -222,7 +226,6 @@ describe('DropdownSitesComponent', () => {
afterEach(() => {
jasmine.Ajax.uninstall();
fixture.destroy();
TestBed.resetTestingModule();
});
it('Dropdown sites should be rendered', async(() => {
@@ -251,6 +254,8 @@ describe('DropdownSitesComponent', () => {
responseText: sitesList
});
fixture.detectChanges();
fixture.whenStable().then(() => {
fixture.detectChanges();
debug.query(By.css('.mat-select-trigger')).triggerEventHandler('click', null);
@@ -269,6 +274,8 @@ describe('DropdownSitesComponent', () => {
responseText: sitesList
});
fixture.detectChanges();
fixture.whenStable().then(() => {
fixture.detectChanges();
debug.query(By.css('.mat-select-trigger')).triggerEventHandler('click', null);
@@ -17,7 +17,8 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { LikeComponent } from './like.component';
import { RatingService } from './services/rating.service';
import { setupTestBed } from '../../core/testing';
import { ContentTestingModule } from '../testing/content.testing.module';
declare let jasmine: any;
@@ -27,12 +28,9 @@ describe('Like component', () => {
let fixture: ComponentFixture<LikeComponent>;
let element: HTMLElement;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ LikeComponent ],
providers: [ RatingService ]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule]
});
beforeEach(() => {
jasmine.Ajax.install();
@@ -45,6 +43,7 @@ describe('Like component', () => {
});
afterEach(() => {
fixture.destroy();
jasmine.Ajax.uninstall();
});
@@ -15,9 +15,10 @@
* limitations under the License.
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { RatingComponent } from './rating.component';
import { RatingService } from './services/rating.service';
import { setupTestBed } from '../../core/testing';
import { ContentTestingModule } from '../testing/content.testing.module';
declare let jasmine: any;
@@ -27,16 +28,9 @@ describe('Rating component', () => {
let fixture: ComponentFixture<RatingComponent>;
let element: HTMLElement;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
RatingComponent
],
providers: [
RatingService
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule]
});
beforeEach(() => {
fixture = TestBed.createComponent(RatingComponent);
@@ -48,6 +42,10 @@ describe('Rating component', () => {
fixture.detectChanges();
});
afterEach(() => {
fixture.destroy();
});
describe('Rendering tests', () => {
beforeEach(() => {
@@ -15,10 +15,10 @@
* limitations under the License.
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AppConfigService } from '@alfresco/adf-core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AppConfigService, setupTestBed } from '@alfresco/adf-core';
import { TagActionsComponent } from './tag-actions.component';
import { TagService } from './services/tag.service';
import { ContentTestingModule } from '../testing/content.testing.module';
declare let jasmine: any;
@@ -28,16 +28,9 @@ describe('TagActionsComponent', () => {
let fixture: ComponentFixture<TagActionsComponent>;
let element: HTMLElement;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
TagActionsComponent
],
providers: [
TagService
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule]
});
beforeEach(() => {
let appConfig: AppConfigService = TestBed.get(AppConfigService);
@@ -50,6 +43,10 @@ describe('TagActionsComponent', () => {
fixture.detectChanges();
});
afterEach(() => {
fixture.destroy();
});
let dataTag = {
'list': {
'pagination': {
@@ -15,12 +15,12 @@
* limitations under the License.
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AppConfigService } from '@alfresco/adf-core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AppConfigService, setupTestBed } from '@alfresco/adf-core';
import { TagService } from './services/tag.service';
import { TagListComponent } from '././tag-list.component';
declare let jasmine: any;
import { Observable } from 'rxjs/Observable';
import { ContentTestingModule } from '../testing/content.testing.module';
describe('TagList', () => {
@@ -44,22 +44,19 @@ describe('TagList', () => {
let component: any;
let fixture: ComponentFixture<TagListComponent>;
let element: HTMLElement;
let tagService: TagService;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
TagListComponent
],
providers: [
TagService
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule]
});
beforeEach(() => {
let appConfig: AppConfigService = TestBed.get(AppConfigService);
appConfig.config.ecmHost = 'http://localhost:9876/ecm';
tagService = TestBed.get(TagService);
spyOn(tagService, 'getAllTheTags').and.returnValue(Observable.of(dataTag));
fixture = TestBed.createComponent(TagListComponent);
element = fixture.nativeElement;
@@ -67,16 +64,11 @@ describe('TagList', () => {
fixture.detectChanges();
});
afterEach(() => {
fixture.destroy();
});
describe('Rendering tests', () => {
beforeEach(() => {
jasmine.Ajax.install();
});
afterEach(() => {
jasmine.Ajax.uninstall();
});
it('Tag list relative a single node should be rendered', (done) => {
component.result.subscribe(() => {
fixture.detectChanges();
@@ -89,12 +81,6 @@ describe('TagList', () => {
});
component.ngOnInit();
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200,
contentType: 'json',
responseText: dataTag
});
});
});
});
@@ -15,12 +15,12 @@
* limitations under the License.
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AppConfigService } from '@alfresco/adf-core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AppConfigService, setupTestBed } from '@alfresco/adf-core';
import { TagNodeListComponent } from './tag-node-list.component';
import { TagService } from './services/tag.service';
declare let jasmine: any;
import { Observable } from 'rxjs/Observable';
import { ContentTestingModule } from '../testing/content.testing.module';
describe('TagNodeList', () => {
@@ -44,17 +44,11 @@ describe('TagNodeList', () => {
let component: any;
let fixture: ComponentFixture<TagNodeListComponent>;
let element: HTMLElement;
let tagService: TagService;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
TagNodeListComponent
],
providers: [
TagService
]
}).compileComponents();
}));
setupTestBed({
imports: [ContentTestingModule]
});
beforeEach(() => {
let appConfig: AppConfigService = TestBed.get(AppConfigService);
@@ -62,6 +56,9 @@ describe('TagNodeList', () => {
fixture = TestBed.createComponent(TagNodeListComponent);
tagService = TestBed.get(TagService);
spyOn(tagService, 'getTagsByNodeId').and.returnValue(Observable.of(dataTag));
element = fixture.nativeElement;
component = fixture.componentInstance;
fixture.detectChanges();
@@ -69,14 +66,6 @@ describe('TagNodeList', () => {
describe('Rendering tests', () => {
beforeEach(() => {
jasmine.Ajax.install();
});
afterEach(() => {
jasmine.Ajax.uninstall();
});
it('Tag list relative a single node should be rendered', (done) => {
component.nodeId = 'fake-node-id';
@@ -95,42 +84,24 @@ describe('TagNodeList', () => {
});
component.ngOnChanges();
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200,
contentType: 'json',
responseText: dataTag
});
});
it('Tag list click on delete button should delete the tag', (done) => {
component.nodeId = 'fake-node-id';
spyOn(tagService, 'removeTag').and.returnValue(Observable.of(true));
component.results.subscribe(() => {
fixture.detectChanges();
let deleteButton: any = element.querySelector('#tag_delete_0');
deleteButton.click();
expect(jasmine.Ajax.requests.mostRecent().url).
toContain('0ee933fa-57fc-4587-8a77-b787e814f1d2');
expect(jasmine.Ajax.requests.mostRecent().method).toBe('DELETE');
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200,
contentType: 'json'
});
expect(tagService.removeTag).toHaveBeenCalledWith('fake-node-id', '0ee933fa-57fc-4587-8a77-b787e814f1d2');
done();
});
component.ngOnChanges();
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200,
contentType: 'json',
responseText: dataTag
});
});
});
});
@@ -0,0 +1,48 @@
/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { NgModule } from '@angular/core';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { RouterTestingModule } from '@angular/router/testing';
import {
CoreModule,
AlfrescoApiService,
AppConfigService,
TranslationService,
CookieService,
AlfrescoApiServiceMock,
AppConfigServiceMock,
TranslationMock,
CookieServiceMock
} from '@alfresco/adf-core';
import { ContentModule } from '../content.module';
@NgModule({
imports: [
NoopAnimationsModule,
RouterTestingModule,
CoreModule.forRoot(),
ContentModule
],
providers: [
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
{ provide: AppConfigService, useClass: AppConfigServiceMock },
{ provide: TranslationService, useClass: TranslationMock },
{ provide: CookieService, useClass: CookieServiceMock }
]
})
export class ContentTestingModule {}
@@ -16,10 +16,11 @@
*/
import { EventEmitter } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { FileModel, FileUploadCompleteEvent, FileUploadErrorEvent, UploadService } from '@alfresco/adf-core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { FileModel, FileUploadCompleteEvent, FileUploadErrorEvent, UploadService, setupTestBed, CoreModule, AlfrescoApiService, AlfrescoApiServiceMock } from '@alfresco/adf-core';
import { UploadModule } from '../upload.module';
import { FileUploadingDialogComponent } from './file-uploading-dialog.component';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
describe('FileUploadingDialogComponent', () => {
let fixture: ComponentFixture<FileUploadingDialogComponent>;
@@ -28,18 +29,24 @@ describe('FileUploadingDialogComponent', () => {
let emitter: EventEmitter<any>;
let filelist: FileModel[];
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
UploadModule
]
}).compileComponents();
}));
setupTestBed({
imports: [
NoopAnimationsModule,
CoreModule.forRoot(),
UploadModule
],
providers: [
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }
]
});
beforeEach(() => {
fixture = TestBed.createComponent(FileUploadingDialogComponent);
component = fixture.componentInstance;
uploadService = TestBed.get(UploadService);
uploadService.clearQueue();
emitter = new EventEmitter();
filelist = [
new FileModel(<File> { name: 'fake-name', size: 10 }),
@@ -49,11 +56,6 @@ describe('FileUploadingDialogComponent', () => {
fixture.detectChanges();
});
afterEach(() => {
fixture.destroy();
TestBed.resetTestingModule();
});
describe('upload service subscribers', () => {
it('should not render dialog when uploading list is empty', () => {
uploadService.addToQueue();
@@ -150,7 +152,7 @@ describe('FileUploadingDialogComponent', () => {
});
describe('toggleMinimized()', () => {
it('should minimze the dialog', () => {
it('should minimize the dialog', () => {
component.isDialogMinimized = true;
component.toggleMinimized();
@@ -16,10 +16,13 @@
*/
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslationService, FileUploadStatus, NodesApiService, UploadService } from '@alfresco/adf-core';
import { TranslationService, FileUploadStatus, NodesApiService, UploadService,
setupTestBed, CoreModule, AlfrescoApiService, AlfrescoApiServiceMock
} from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import { UploadModule } from '../upload.module';
import { FileUploadingListComponent } from './file-uploading-list.component';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
describe('FileUploadingListComponent', () => {
let fixture: ComponentFixture<FileUploadingListComponent>;
@@ -33,17 +36,23 @@ describe('FileUploadingListComponent', () => {
file = { data: { entry: { id: 'x' } } };
});
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
UploadModule
]
}).compileComponents();
setupTestBed({
imports: [
NoopAnimationsModule,
CoreModule.forRoot(),
UploadModule
],
providers: [
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }
]
});
beforeEach(() => {
nodesApiService = TestBed.get(NodesApiService);
uploadService = TestBed.get(UploadService);
uploadService.clearQueue();
translateService = TestBed.get(TranslationService);
fixture = TestBed.createComponent(FileUploadingListComponent);
component = fixture.componentInstance;
@@ -16,11 +16,12 @@
*/
import { SimpleChange } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ContentService, UploadService, TranslationService } from '@alfresco/adf-core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ContentService, UploadService, TranslationService, setupTestBed, CoreModule } from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import { UploadButtonComponent } from './upload-button.component';
import { TranslationMock } from '@alfresco/adf-core';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
describe('UploadButtonComponent', () => {
@@ -49,18 +50,20 @@ describe('UploadButtonComponent', () => {
let uploadService: UploadService;
let contentService: ContentService;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
UploadButtonComponent
],
providers: [
UploadService,
ContentService,
{ provide: TranslationService, useClass: TranslationMock }
]
}).compileComponents();
}));
setupTestBed({
imports: [
NoopAnimationsModule,
CoreModule.forRoot()
],
declarations: [
UploadButtonComponent
],
providers: [
UploadService,
ContentService,
{ provide: TranslationService, useClass: TranslationMock }
]
});
beforeEach(() => {
fixture = TestBed.createComponent(UploadButtonComponent);
@@ -16,7 +16,7 @@
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { FileModel, UploadService } from '@alfresco/adf-core';
import { FileModel, UploadService, setupTestBed, CoreModule } from '@alfresco/adf-core';
import { FileDraggableDirective } from '../directives/file-draggable.directive';
import { UploadDragAreaComponent } from './upload-drag-area.component';
@@ -61,17 +61,18 @@ describe('UploadDragAreaComponent', () => {
let fixture: ComponentFixture<UploadDragAreaComponent>;
let uploadService: UploadService;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
FileDraggableDirective,
UploadDragAreaComponent
],
providers: [
UploadService
]
}).compileComponents();
}));
setupTestBed({
imports: [
CoreModule.forRoot()
],
declarations: [
FileDraggableDirective,
UploadDragAreaComponent
],
providers: [
UploadService
]
});
beforeEach(() => {
fixture = TestBed.createComponent(UploadDragAreaComponent);
@@ -83,7 +84,6 @@ describe('UploadDragAreaComponent', () => {
afterEach(() => {
fixture.destroy();
TestBed.resetTestingModule();
});
describe('When disabled', () => {
@@ -185,7 +185,7 @@ describe('UploadDragAreaComponent', () => {
it('should upload the list of files dropped', async(() => {
component.success = null;
uploadService.uploadFilesInTheQueue = jasmine.createSpy('uploadFilesInTheQueue');
spyOn(uploadService, 'uploadFilesInTheQueue');
fixture.detectChanges();
const file = <File> { name: 'fake-name-1', size: 10, webkitRelativePath: 'fake-folder1/fake-name-1.json' };
let filesList = [file];
@@ -16,10 +16,10 @@
*/
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed, tick, fakeAsync } from '@angular/core/testing';
import { ComponentFixture, TestBed, tick, fakeAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { VersionListComponent } from './version-list.component';
import { AlfrescoApiService } from '@alfresco/adf-core';
import { AlfrescoApiService, setupTestBed, CoreModule, AlfrescoApiServiceMock } from '@alfresco/adf-core';
import { MatDialog } from '@angular/material';
import { Observable } from 'rxjs/Observable';
@@ -32,14 +32,18 @@ describe('VersionListComponent', () => {
const nodeId = 'test-id';
const versionId = '1.0';
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
VersionListComponent
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
}).compileComponents();
}));
setupTestBed({
imports: [
CoreModule.forRoot()
],
declarations: [
VersionListComponent
],
providers: [
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
afterEach(() => {
fixture.destroy();
@@ -99,24 +103,6 @@ describe('VersionListComponent', () => {
expect(alfrescoApiService.versionsApi.deleteVersion).not.toHaveBeenCalled();
});
it('should reload list once a version is deleted', fakeAsync(() => {
spyOn(component, 'loadVersionHistory').and.stub();
spyOn(dialog, 'open').and.returnValue({
afterClosed() {
return Observable.of(true);
}
});
spyOn(alfrescoApiService.versionsApi, 'deleteVersion').and.returnValue(Promise.resolve(true));
component.deleteVersion(versionId);
tick();
expect(component.loadVersionHistory).toHaveBeenCalled();
}));
it('should reload and raise version-deleted DOM event', (done) => {
spyOn(component, 'loadVersionHistory').and.stub();
fixture.nativeElement.addEventListener('version-deleted', () => {
@@ -18,7 +18,7 @@
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { AlfrescoApiService } from '@alfresco/adf-core';
import { AlfrescoApiService, setupTestBed, CoreModule, AlfrescoApiServiceMock } from '@alfresco/adf-core';
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
import { VersionManagerComponent } from './version-manager.component';
import { VersionListComponent } from './version-list.component';
@@ -42,14 +42,19 @@ describe('VersionManagerComponent', () => {
}
};
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
VersionManagerComponent, VersionListComponent
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
}).compileComponents();
}));
setupTestBed({
imports: [
CoreModule.forRoot()
],
declarations: [
VersionManagerComponent,
VersionListComponent
],
providers: [
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
beforeEach(() => {
fixture = TestBed.createComponent(VersionManagerComponent);
@@ -15,9 +15,8 @@
* limitations under the License.
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AppConfigService } from '@alfresco/adf-core';
import { DataTableModule } from '@alfresco/adf-core';
import { ComponentFixture, TestBed, async } from '@angular/core/testing';
import { AppConfigService, setupTestBed, CoreModule } from '@alfresco/adf-core';
import { WebscriptComponent } from './webscript.component';
declare let jasmine: any;
@@ -28,27 +27,27 @@ describe('WebscriptComponent', () => {
let fixture: ComponentFixture<WebscriptComponent>;
let element: HTMLElement;
setupTestBed({
imports: [
CoreModule.forRoot()
],
declarations: [
WebscriptComponent
]
});
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
DataTableModule
],
declarations: [
WebscriptComponent
]
}).compileComponents().then(() => {
let appConfig: AppConfigService = TestBed.get(AppConfigService);
appConfig.config.ecmHost = 'http://localhost:9876/ecm';
let appConfig: AppConfigService = TestBed.get(AppConfigService);
appConfig.config.ecmHost = 'http://localhost:9876/ecm';
fixture = TestBed.createComponent(WebscriptComponent);
component = fixture.componentInstance;
fixture = TestBed.createComponent(WebscriptComponent);
component = fixture.componentInstance;
element = fixture.nativeElement;
component = fixture.componentInstance;
component.scriptPath = 'fakePath';
component.showData = true;
fixture.detectChanges();
});
element = fixture.nativeElement;
component = fixture.componentInstance;
component.scriptPath = 'fakePath';
component.showData = true;
fixture.detectChanges();
}));
describe('View', () => {