[affected:*][ci:force] - REBASED

This commit is contained in:
Vito Albano
2024-04-01 00:04:14 +01:00
committed by VitoAlbano
parent a4804d8416
commit 01f4c7e903
35 changed files with 364 additions and 239 deletions

View File

@@ -27,6 +27,7 @@ import { AspectEntry, Node } from '@alfresco/js-api';
import { NodesApiService } from '../common/services/nodes-api.service';
import { By } from '@angular/platform-browser';
import { AspectListComponent } from './aspect-list.component';
import { HttpClientTestingModule } from '@angular/common/http/testing';
const aspectListMock: AspectEntry[] = [
{
@@ -113,7 +114,7 @@ describe('AspectListDialogComponent', () => {
excludedAspects: []
};
await TestBed.configureTestingModule({
imports: [ContentTestingModule, MatDialogModule],
imports: [HttpClientTestingModule, ContentTestingModule, MatDialogModule],
providers: [
{ provide: MAT_DIALOG_DATA, useValue: data },
{

View File

@@ -16,31 +16,29 @@
*/
import { TestBed } from '@angular/core/testing';
import { AlfrescoApiService, CoreTestingModule } from '@alfresco/adf-core';
import { AlfrescoApiService } from '@alfresco/adf-core';
import { AspectListService } from './aspect-list.service';
import { AspectPaging, AspectsApi, AspectEntry } from '@alfresco/js-api';
import { HttpClientTestingModule } from '@angular/common/http/testing';
const stdAspect1: AspectEntry = { entry: { id: 'std:standardAspectOne', description: 'Standard Aspect One', title: 'StandardAspectOne' } };
const stdAspect2: AspectEntry = { entry: { id: 'std:standardAspectTwo', description: 'Standard Aspect Two', title: 'StandardAspectTwo' } };
const stdAspect3: AspectEntry = { entry: { id: 'std:standardAspectThree', description: 'Standard Aspect Three', title: 'StandardAspectThree' } };
const standardAspectPagingMock: AspectPaging = { list: { entries: [ stdAspect1, stdAspect2, stdAspect3 ] } };
const standardAspectPagingMock: AspectPaging = { list: { entries: [stdAspect1, stdAspect2, stdAspect3] } };
const cstAspect1: AspectEntry = { entry: { id: 'cst:customAspectOne', description: 'Custom Aspect One', title: 'CustomAspectOne' } };
const cstAspect2: AspectEntry = { entry: { id: 'cst:customAspectTwo', description: 'Custom Aspect Two', title: 'CustomAspectTwo' } };
const cstAspect3: AspectEntry = { entry: { id: 'cst:customAspectThree', description: 'Custom Aspect Three', title: 'CustomAspectThree' } };
const customAspectPagingMock: AspectPaging = { list: { entries: [ cstAspect1, cstAspect2, cstAspect3 ] } };
const customAspectPagingMock: AspectPaging = { list: { entries: [cstAspect1, cstAspect2, cstAspect3] } };
describe('AspectListService', () => {
let aspectListService: AspectListService;
let apiService: AlfrescoApiService;
let aspectsApi: AspectsApi;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
CoreTestingModule
]
imports: [HttpClientTestingModule]
});
aspectListService = TestBed.inject(AspectListService);

View File

@@ -15,7 +15,6 @@
* limitations under the License.
*/
import { CoreTestingModule } from '@alfresco/adf-core';
import { fakeAsync, TestBed } from '@angular/core/testing';
import { CategoryService } from '../services/category.service';
import { CategoryNode, CategoryTreeDatasourceService } from '@alfresco/adf-content-services';
@@ -25,17 +24,12 @@ import { EMPTY, of } from 'rxjs';
import { Pagination } from '@alfresco/js-api';
describe('CategoryTreeDatasourceService', () => {
let categoryTreeDatasourceService: CategoryTreeDatasourceService;
let categoryService: CategoryService;
let categoryTreeDatasourceService: CategoryTreeDatasourceService;
let categoryService: CategoryService;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
CoreTestingModule
],
providers: [
{ provide: CategoryService, useClass: CategoryServiceMock }
]
providers: [CategoryTreeDatasourceService, { provide: CategoryService, useClass: CategoryServiceMock }]
});
categoryTreeDatasourceService = TestBed.inject(CategoryTreeDatasourceService);
@@ -44,7 +38,7 @@ describe('CategoryTreeDatasourceService', () => {
it('should get root level categories', fakeAsync(() => {
spyOn(categoryTreeDatasourceService, 'getParentNode').and.returnValue(undefined);
categoryTreeDatasourceService.getSubNodes(null, 0 , 100).subscribe((treeResponse: TreeResponse<CategoryNode>) => {
categoryTreeDatasourceService.getSubNodes(null, 0, 100).subscribe((treeResponse: TreeResponse<CategoryNode>) => {
expect(treeResponse.entries.length).toBe(1);
expect(treeResponse.entries[0].level).toBe(0);
expect(treeResponse.entries[0].nodeType).toBe(TreeNodeType.RegularNode);
@@ -62,7 +56,7 @@ describe('CategoryTreeDatasourceService', () => {
nodeType: TreeNodeType.RegularNode
};
spyOn(categoryTreeDatasourceService, 'getParentNode').and.returnValue(parentNode);
categoryTreeDatasourceService.getSubNodes(parentNode.id, 0 , 100).subscribe((treeResponse: TreeResponse<CategoryNode>) => {
categoryTreeDatasourceService.getSubNodes(parentNode.id, 0, 100).subscribe((treeResponse: TreeResponse<CategoryNode>) => {
expect(treeResponse.entries.length).toBe(2);
expect(treeResponse.entries[0].parentId).toBe(parentNode.id);
expect(treeResponse.entries[0].level).toBe(1);
@@ -84,7 +78,8 @@ describe('CategoryTreeDatasourceService', () => {
});
it('should call getCategory for every instance if value of name parameter is defined', (done) => {
spyOn(categoryService, 'getCategory').and.returnValues(of({
spyOn(categoryService, 'getCategory').and.returnValues(
of({
entry: {
name: 'name',
id: 'some id 1',
@@ -97,18 +92,18 @@ describe('CategoryTreeDatasourceService', () => {
id: 'some id 2',
hasChildren: false
}
}));
categoryTreeDatasourceService.getSubNodes('id', undefined, undefined, 'name')
.subscribe(() => {
expect(categoryService.getCategory).toHaveBeenCalledWith('some id 1');
expect(categoryService.getCategory).toHaveBeenCalledWith('some id 2');
done();
});
})
);
categoryTreeDatasourceService.getSubNodes('id', undefined, undefined, 'name').subscribe(() => {
expect(categoryService.getCategory).toHaveBeenCalledWith('some id 1');
expect(categoryService.getCategory).toHaveBeenCalledWith('some id 2');
done();
});
});
it('should return observable which emits correct categories', (done) => {
spyOn(categoryService, 'getCategory').and.returnValues(of({
spyOn(categoryService, 'getCategory').and.returnValues(
of({
entry: {
name: 'some name',
id: 'some id 1',
@@ -121,14 +116,15 @@ describe('CategoryTreeDatasourceService', () => {
id: 'some id 2',
hasChildren: false
}
}));
categoryTreeDatasourceService.getSubNodes('id', undefined, undefined, 'name')
.subscribe((response) => {
const pagination = new Pagination();
pagination.count = 2;
expect(response).toEqual({
pagination,
entries: [{
})
);
categoryTreeDatasourceService.getSubNodes('id', undefined, undefined, 'name').subscribe((response) => {
const pagination = new Pagination();
pagination.count = 2;
expect(response).toEqual({
pagination,
entries: [
{
id: 'some id 1',
nodeName: 'some name',
parentId: 'parent id 1',
@@ -136,7 +132,8 @@ describe('CategoryTreeDatasourceService', () => {
nodeType: TreeNodeType.RegularNode,
hasChildren: true,
isLoading: false
}, {
},
{
id: 'some id 2',
nodeName: 'Language/some other name',
parentId: 'parent id 2',
@@ -144,9 +141,10 @@ describe('CategoryTreeDatasourceService', () => {
nodeType: TreeNodeType.RegularNode,
hasChildren: false,
isLoading: false
}]
});
done();
}
]
});
done();
});
});
});

View File

@@ -15,7 +15,7 @@
* limitations under the License.
*/
import { AppConfigService, CoreTestingModule, UserPreferencesService } from '@alfresco/adf-core';
import { AppConfigService, TranslationMock, TranslationService, UserPreferencesService } from '@alfresco/adf-core';
import {
CategoryBody,
CategoryEntry,
@@ -29,6 +29,8 @@ import {
} from '@alfresco/js-api';
import { fakeAsync, TestBed } from '@angular/core/testing';
import { CategoryService } from './category.service';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { TranslateModule } from '@ngx-translate/core';
describe('CategoryService', () => {
let categoryService: CategoryService;
@@ -44,7 +46,8 @@ describe('CategoryService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule]
imports: [HttpClientTestingModule, TranslateModule.forRoot()],
providers: [CategoryService, UserPreferencesService, { provide: TranslationService, useClass: TranslationMock }]
});
categoryService = TestBed.inject(CategoryService);

View File

@@ -17,8 +17,10 @@
import { TestBed } from '@angular/core/testing';
import { ContentService } from './content.service';
import { AppConfigService, AuthenticationService, StorageService, CoreTestingModule } from '@alfresco/adf-core';
import { AppConfigService, AuthenticationService, RedirectAuthService, StorageService } from '@alfresco/adf-core';
import { Node, PermissionsInfo } from '@alfresco/js-api';
import { EMPTY } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
describe('ContentService', () => {
let contentService: ContentService;
@@ -27,7 +29,8 @@ describe('ContentService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule]
imports: [HttpClientTestingModule],
providers: [ContentService, AuthenticationService, { provide: RedirectAuthService, useValue: { onLogin: EMPTY } }]
});
authService = TestBed.inject(AuthenticationService);
contentService = TestBed.inject(ContentService);

View File

@@ -16,17 +16,23 @@
*/
import { createNewPersonMock, fakeEcmAdminUser, fakeEcmUser, fakeEcmUser2, fakeEcmUserList } from '../mocks/ecm-user.service.mock';
import { AlfrescoApiService, AlfrescoApiServiceMock, CoreTestingModule } from '@alfresco/adf-core';
import { AlfrescoApiService, AlfrescoApiServiceMock, RedirectAuthService } from '@alfresco/adf-core';
import { PeopleContentQueryRequestModel, PeopleContentService } from './people-content.service';
import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { EMPTY } from 'rxjs';
describe('PeopleContentService', () => {
let peopleContentService: PeopleContentService;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule],
providers: [{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }]
imports: [HttpClientTestingModule],
providers: [
PeopleContentService,
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }
]
});
peopleContentService = TestBed.inject(PeopleContentService);

View File

@@ -17,7 +17,7 @@
import { EventEmitter } from '@angular/core';
import { TestBed } from '@angular/core/testing';
import { AppConfigService, CoreTestingModule } from '@alfresco/adf-core';
import { AlfrescoApiService, AlfrescoApiServiceMock, AppConfigModule, AppConfigService } from '@alfresco/adf-core';
import { UploadService } from './upload.service';
import { RepositoryInfo } from '@alfresco/js-api';
import { BehaviorSubject } from 'rxjs';
@@ -35,8 +35,10 @@ describe('UploadService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule],
imports: [AppConfigModule],
providers: [
UploadService,
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
{
provide: DiscoveryApiService,
useValue: {
@@ -158,7 +160,9 @@ describe('UploadService', () => {
service.uploadFilesInTheQueue(emitter);
const request = jasmine.Ajax.requests.mostRecent();
expect(request.url).toContain('/ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/-root-/children?autoRename=true&include=allowableOperations');
expect(request.url).toBe(
'http://localhost:9876/ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/-root-/children?autoRename=true&include=allowableOperations'
);
expect(request.method).toBe('POST');
jasmine.Ajax.requests.mostRecent().respondWith({
@@ -179,8 +183,9 @@ describe('UploadService', () => {
const fileFake = new FileModel({ name: 'fake-name', size: 10 } as File, { parentId: '-root-' });
service.addToQueue(fileFake);
service.uploadFilesInTheQueue(null, emitter);
expect(jasmine.Ajax.requests.mostRecent().url)
.toContain('ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/-root-/children?autoRename=true&include=allowableOperations');
expect(jasmine.Ajax.requests.mostRecent().url).toBe(
'http://localhost:9876/ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/-root-/children?autoRename=true&include=allowableOperations'
);
jasmine.Ajax.requests.mostRecent().respondWith({
status: 404,
@@ -214,7 +219,9 @@ describe('UploadService', () => {
emitterDisposable.unsubscribe();
const deleteRequest = jasmine.Ajax.requests.mostRecent();
expect(deleteRequest.url).toContain('ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/myNodeId?permanent=true');
expect(deleteRequest.url).toBe(
'http://localhost:9876/ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/myNodeId?permanent=true'
);
expect(deleteRequest.method).toBe('DELETE');
jasmine.Ajax.requests.mostRecent().respondWith({
@@ -233,7 +240,9 @@ describe('UploadService', () => {
service.cancelUpload(...file);
const request = jasmine.Ajax.requests.mostRecent();
expect(request.url).toContain('ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/-root-/children?autoRename=true&include=allowableOperations');
expect(request.url).toBe(
'http://localhost:9876/ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/-root-/children?autoRename=true&include=allowableOperations'
);
expect(request.method).toBe('POST');
jasmine.Ajax.requests.mostRecent().respondWith({
@@ -255,7 +264,7 @@ describe('UploadService', () => {
emitterDisposable.unsubscribe();
const deleteRequest = jasmine.Ajax.requests.mostRecent();
expect(deleteRequest.url).toContain('ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/myNodeId/versions/1.1');
expect(deleteRequest.url).toBe('http://localhost:9876/ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/myNodeId/versions/1.1');
expect(deleteRequest.method).toBe('DELETE');
jasmine.Ajax.requests.mostRecent().respondWith({
@@ -329,7 +338,9 @@ describe('UploadService', () => {
service.uploadFilesInTheQueue(emitter);
const request = jasmine.Ajax.requests.mostRecent();
expect(request.url).toContain('ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/123/children?autoRename=true&include=allowableOperations');
expect(request.url).toContain(
'/ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/123/children?autoRename=true&include=allowableOperations'
);
expect(request.method).toBe('POST');
jasmine.Ajax.requests.mostRecent().respondWith({

View File

@@ -24,7 +24,6 @@ import { By } from '@angular/platform-browser';
import { FileModel } from '../common/models/file.model';
import { FileUploadEvent } from '../common/events/file.event';
import { UploadService } from '../common/services/upload.service';
import { of } from 'rxjs';
import { ContentTestingModule } from '../testing/content.testing.module';
import { DocumentListService } from '../document-list/services/document-list.service';
@@ -61,12 +60,7 @@ describe('ContentNodeSelectorComponent', () => {
};
TestBed.configureTestingModule({
imports: [
TranslateModule.forRoot(),
ContentTestingModule,
MatDialogModule,
UploadModule
],
imports: [ContentTestingModule, MatDialogModule, UploadModule],
providers: [
{ provide: MAT_DIALOG_DATA, useValue: data },
{
@@ -139,7 +133,6 @@ describe('ContentNodeSelectorComponent', () => {
};
describe('Data injecting with the "Material dialog way"', () => {
it('should show the INJECTED title', () => {
const titleElement = fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-title"]'));
expect(titleElement).not.toBeNull();
@@ -162,22 +155,25 @@ describe('ContentNodeSelectorComponent', () => {
it('should pass through the injected rowFilter to the documentList', () => {
const documentList = fixture.debugElement.query(By.directive(DocumentListComponent));
expect(documentList).not.toBeNull('Document list should be shown');
expect(documentList.componentInstance.rowFilter({
node: {
entry: new Node({
name: 'impossible-name',
id: 'name'
})
}
}))
.toBe(data.rowFilter({
expect(
documentList.componentInstance.rowFilter({
node: {
entry: new Node({
name: 'impossible-name',
id: 'name'
})
}
}));
})
).toBe(
data.rowFilter({
node: {
entry: new Node({
name: 'impossible-name',
id: 'name'
})
}
})
);
});
it('should pass through the injected imageResolver to the documentList', () => {
@@ -185,7 +181,7 @@ describe('ContentNodeSelectorComponent', () => {
expect(documentList).not.toBeNull('Document list should be shown');
expect(documentList.componentInstance.imageResolver).toBe(data.imageResolver);
});
});
});
describe('Cancel button', () => {
it('should not be shown if dialogRef is NOT injected', () => {
@@ -205,7 +201,6 @@ describe('ContentNodeSelectorComponent', () => {
});
describe('Action button for the chosen node', () => {
it('should be disabled by default', () => {
fixture.detectChanges();
@@ -249,7 +244,6 @@ describe('ContentNodeSelectorComponent', () => {
});
describe('Title', () => {
it('should be updated when a site is chosen', () => {
const fakeSiteTitle = 'My fake site';
const contentNodePanel = fixture.debugElement.query(By.directive(ContentNodeSelectorPanelComponent));
@@ -259,11 +253,10 @@ describe('ContentNodeSelectorComponent', () => {
const titleElement = fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-title"]'));
expect(titleElement).not.toBeNull();
expect(titleElement.nativeElement.innerText).toBe('NODE_SELECTOR.CHOOSE_ITEM');
});
});
});
});
describe('Upload button', () => {
it('Should not be able to upload a file whilst a search is still running', async () => {
enableLocalUpload();
fixture.detectChanges();
@@ -455,7 +448,7 @@ describe('ContentNodeSelectorComponent', () => {
});
it('should uploadStarted become true when the first upload gets started', () => {
const fileUploadEvent = new FileUploadEvent(new FileModel({ name: 'fake-name', size: 100 } as File));
const fileUploadEvent = new FileUploadEvent(new FileModel({ name: 'fake-name', size: 100 } as File));
uploadService.fileUploadStarting.next(fileUploadEvent);
expect(component.uploadStarted).toBe(true);

View File

@@ -31,7 +31,7 @@
[style.display]="isExpiryDateToggleChecked ? 'block' : 'none'"
data-automation-id="adf-slide-toggle-checked"
class="adf-share-link__date-time-container">
<mat-form-field class="adf-full-width" data-automation-id="adf-content-share-expiration-field">
<mat-form-field class="adf-full-width" data-automation-id="adf-content-share-expiration-field" floatLabel="always">
<mat-label>{{ 'SHARE.EXPIRATION-PLACEHOLDER' | translate }}</mat-label>
<mat-datepicker-toggle
[disabled]="time.disabled"
@@ -73,6 +73,7 @@
</div>
</div>
<mat-form-field
floatLabel="always"
class="adf-full-width"
data-automation-id="adf-content-share-public-link-field"
[ngClass]="isLinkWithExpiryDate? 'adf-share-link__border-color' : ''">

View File

@@ -297,7 +297,7 @@ describe('ShareDialogComponent', () => {
fixture.detectChanges();
expect(fixture.debugElement.query(By.css('[data-automation-id="adf-content-share-expiration-field"]')).componentInstance.floatLabel).toBe(
'never'
'always'
);
});
@@ -309,7 +309,7 @@ describe('ShareDialogComponent', () => {
fixture.detectChanges();
expect(fixture.debugElement.query(By.css('[data-automation-id="adf-content-share-public-link-field"]')).componentInstance.floatLabel).toBe(
'never'
'always'
);
});

View File

@@ -26,6 +26,7 @@ import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
import { MatExpansionPanelHarness } from '@angular/material/expansion/testing';
import { MatTableHarness } from '@angular/material/table/testing';
import { ContentTypeService } from './content-type.service';
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
const elementCustom: TypeEntry = {
entry: {

View File

@@ -15,7 +15,7 @@
* limitations under the License.
*/
import { CoreTestingModule, IdentityUserModel, InitialUsernamePipe, UserInfoMode } from '@alfresco/adf-core';
import { IdentityUserModel, InitialUsernamePipe, UserInfoMode } from '@alfresco/adf-core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MatMenuModule } from '@angular/material/menu';
import { By, DomSanitizer } from '@angular/platform-browser';
@@ -79,7 +79,7 @@ describe('ContentUserInfoComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule, ContentTestingModule, MatMenuModule]
imports: [ContentTestingModule, MatMenuModule]
});
fixture = TestBed.createComponent(ContentUserInfoComponent);
component = fixture.componentInstance;

View File

@@ -19,9 +19,13 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { CategorySelectorDialogComponent, CategorySelectorDialogOptions } from './category-selector.dialog';
import { Subject } from 'rxjs';
import { Category } from '@alfresco/js-api';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { CoreTestingModule } from '@alfresco/adf-core';
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
import { By } from '@angular/platform-browser';
import { TranslateModule } from '@ngx-translate/core';
import { AppConfigService, AppConfigServiceMock, TranslationMock, TranslationService } from '@alfresco/adf-core';
import { CategoriesManagementComponent } from '../category';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { MatFormFieldModule } from '@angular/material/form-field';
describe('Category selector dialog component', () => {
let fixture: ComponentFixture<CategorySelectorDialogComponent>;
@@ -36,7 +40,10 @@ describe('Category selector dialog component', () => {
select: new Subject<Category[]>()
};
const categories: Category[] = [{id: 'id1', name: 'cat1'}, {id: 'id2', name: 'cat3'}];
const categories: Category[] = [
{ id: 'id1', name: 'cat1' },
{ id: 'id2', name: 'cat3' }
];
const setCategories = () => {
component.categories = categories;
@@ -45,11 +52,14 @@ describe('Category selector dialog component', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule],
imports: [MatFormFieldModule, TranslateModule.forRoot(), MatDialogModule, HttpClientTestingModule],
providers: [
{ provide: AppConfigService, useClass: AppConfigServiceMock },
{ provide: MatDialogRef, useValue: dialogRef },
{ provide: MAT_DIALOG_DATA, useValue: options }
]
{ provide: MAT_DIALOG_DATA, useValue: options },
{ provide: TranslationService, useClass: TranslationMock }
],
declarations: [CategoriesManagementComponent, CategorySelectorDialogComponent]
});
dialogRef.close.calls.reset();
fixture = TestBed.createComponent(CategorySelectorDialogComponent);

View File

@@ -16,11 +16,14 @@
*/
import { TestBed, ComponentFixture } from '@angular/core/testing';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
import { DownloadZipDialogComponent } from './download-zip.dialog';
import { CoreTestingModule } from '@alfresco/adf-core';
import { DownloadZipService } from './services/download-zip.service';
import { Observable } from 'rxjs';
import { EMPTY, Observable } from 'rxjs';
import { AlfrescoApiService, AlfrescoApiServiceMock, RedirectAuthService, TranslationMock, TranslationService } from '@alfresco/adf-core';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { TranslateModule } from '@ngx-translate/core';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
describe('DownloadZipDialogComponent', () => {
let fixture: ComponentFixture<DownloadZipDialogComponent>;
@@ -37,10 +40,14 @@ describe('DownloadZipDialogComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule],
imports: [HttpClientTestingModule, TranslateModule.forRoot(), MatDialogModule, NoopAnimationsModule],
providers: [
DownloadZipService,
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
{ provide: TranslationService, useClass: TranslationMock },
{ provide: MatDialogRef, useValue: dialogRef },
{ provide: MAT_DIALOG_DATA, useValue: dataMock }
{ provide: MAT_DIALOG_DATA, useValue: dataMock },
{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }
]
});
dialogRef.close.calls.reset();

View File

@@ -16,11 +16,14 @@
*/
import { ChangeDetectorRef, Component, ElementRef, SimpleChange } from '@angular/core';
import { CoreTestingModule } from '@alfresco/adf-core';
import { ContentService } from '../common/services/content.service';
import { CheckAllowableOperationDirective } from './check-allowable-operation.directive';
import { TestBed } from '@angular/core/testing';
import { NodeAllowableOperationSubject } from '../interfaces/node-allowable-operation-subject.interface';
import { ContentDirectiveModule } from './content-directive.module';
import { RedirectAuthService } from '@alfresco/adf-core';
import { EMPTY } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
@Component({
selector: 'adf-text-subject',
@@ -35,7 +38,8 @@ describe('CheckAllowableOperationDirective', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule]
imports: [ContentDirectiveModule, HttpClientTestingModule],
providers: [{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }]
});
changeDetectorMock = { detectChanges: () => {} } as ChangeDetectorRef;
});

View File

@@ -18,8 +18,8 @@
import { Component, ViewChild } from '@angular/core';
import { LibraryFavoriteDirective } from './library-favorite.directive';
import { TestBed, ComponentFixture } from '@angular/core/testing';
import { CoreTestingModule } from '@alfresco/adf-core';
import { LibraryEntity } from '../interfaces/library-entity.interface';
import { HttpClientTestingModule } from '@angular/common/http/testing';
@Component({
selector: 'app-test-component',
@@ -39,7 +39,7 @@ describe('LibraryFavoriteDirective', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule],
imports: [HttpClientTestingModule],
declarations: [TestComponent, LibraryFavoriteDirective]
});
fixture = TestBed.createComponent(TestComponent);

View File

@@ -17,11 +17,12 @@
import { fakeAsync, TestBed, tick } from '@angular/core/testing';
import { LibraryMembershipDirective } from './library-membership.directive';
import { NO_ERRORS_SCHEMA, SimpleChange } from '@angular/core';
import { SimpleChange } from '@angular/core';
import { of, throwError, Subject } from 'rxjs';
import { AlfrescoApiService, CoreModule, CoreTestingModule } from '@alfresco/adf-core';
import { AlfrescoApiService, AlfrescoApiServiceMock } from '@alfresco/adf-core';
import { ContentDirectiveModule } from './content-directive.module';
import { SitesService } from '../common/services/sites.service';
import { HttpClientTestingModule } from '@angular/common/http/testing';
describe('LibraryMembershipDirective', () => {
let alfrescoApiService: AlfrescoApiService;
@@ -37,8 +38,8 @@ describe('LibraryMembershipDirective', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [ContentDirectiveModule, CoreModule.forRoot(), CoreTestingModule],
schemas: [NO_ERRORS_SCHEMA]
imports: [HttpClientTestingModule, ContentDirectiveModule],
providers: [SitesService, { provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }]
});
testSiteEntry = {

View File

@@ -19,8 +19,11 @@ import { Component, DebugElement, ViewChild } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { NodeDeleteDirective } from './node-delete.directive';
import { CoreTestingModule } from '@alfresco/adf-core';
import { ContentDirectiveModule } from './content-directive.module';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { TranslateModule } from '@ngx-translate/core';
import { RedirectAuthService, TranslationMock, TranslationService } from '@alfresco/adf-core';
import { EMPTY } from 'rxjs';
@Component({
template: ` <div id="delete-component" [adf-delete]="selection" (delete)="onDelete()"></div>`
@@ -76,7 +79,11 @@ describe('NodeDeleteDirective', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule, ContentDirectiveModule],
imports: [ContentDirectiveModule, HttpClientTestingModule, TranslateModule.forRoot()],
providers: [
{ provide: TranslationService, useClass: TranslationMock },
{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }
],
declarations: [TestComponent, TestWithPermissionsComponent, TestDeletePermanentComponent]
});
fixture = TestBed.createComponent(TestComponent);

View File

@@ -19,9 +19,10 @@ import { TestBed, ComponentFixture } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { MatDialog } from '@angular/material/dialog';
import { Component, DebugElement, ViewChild } from '@angular/core';
import { AlfrescoApiService, CoreTestingModule } from '@alfresco/adf-core';
import { AlfrescoApiService, AlfrescoApiServiceMock } from '@alfresco/adf-core';
import { NodeDownloadDirective } from './node-download.directive';
import { ContentDirectiveModule } from '@alfresco/adf-content-services';
import { HttpClientTestingModule } from '@angular/common/http/testing';
@Component({
template: '<div [adfNodeDownload]="selection" [version]="version"></div>'
@@ -52,8 +53,9 @@ describe('NodeDownloadDirective', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [ContentDirectiveModule, CoreTestingModule],
declarations: [TestComponent]
imports: [ContentDirectiveModule, HttpClientTestingModule],
declarations: [TestComponent],
providers: [{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }]
});
fixture = TestBed.createComponent(TestComponent);
component = fixture.componentInstance;

View File

@@ -18,7 +18,8 @@
import { SimpleChange } from '@angular/core';
import { fakeAsync, TestBed, tick } from '@angular/core/testing';
import { NodeFavoriteDirective } from './node-favorite.directive';
import { AlfrescoApiService, CoreTestingModule } from '@alfresco/adf-core';
import { AlfrescoApiService, AlfrescoApiServiceMock, AppConfigService, AppConfigServiceMock } from '@alfresco/adf-core';
import { HttpClientTestingModule } from '@angular/common/http/testing';
describe('NodeFavoriteDirective', () => {
let directive: NodeFavoriteDirective;
@@ -26,7 +27,11 @@ describe('NodeFavoriteDirective', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule]
imports: [HttpClientTestingModule],
providers: [
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
{ provide: AppConfigService, useClass: AppConfigServiceMock }
]
});
alfrescoApiService = TestBed.inject(AlfrescoApiService);
directive = new NodeFavoriteDirective(alfrescoApiService);

View File

@@ -19,8 +19,10 @@ import { Component, DebugElement } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { NodeRestoreDirective } from './node-restore.directive';
import { TranslationService, CoreTestingModule } from '@alfresco/adf-core';
import { TranslationMock, TranslationService } from '@alfresco/adf-core';
import { ContentDirectiveModule } from './content-directive.module';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { TranslateModule } from '@ngx-translate/core';
@Component({
template: ` <div [adf-restore]="selection" (restore)="doneSpy()"></div>`
@@ -42,7 +44,8 @@ describe('NodeRestoreDirective', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule, ContentDirectiveModule],
imports: [ContentDirectiveModule, HttpClientTestingModule, TranslateModule.forRoot()],
providers: [{ provide: TranslationService, useClass: TranslationMock }],
declarations: [TestComponent]
});
fixture = TestBed.createComponent(TestComponent);

View File

@@ -18,10 +18,13 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { FileAutoDownloadComponent } from './file-auto-download.component';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
import { By } from '@angular/platform-browser';
import { CoreTestingModule } from '@alfresco/adf-core';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { TranslateModule } from '@ngx-translate/core';
import { TranslationMock, TranslationService } from '@alfresco/adf-core';
import { MatButtonModule } from '@angular/material/button';
import { NodeDownloadDirective } from '../../../directives';
import { HttpClientTestingModule } from '@angular/common/http/testing';
const mockDialog = {
close: jasmine.createSpy('close')
@@ -34,12 +37,12 @@ describe('FileAutoDownloadComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [FileAutoDownloadComponent],
imports: [CoreTestingModule],
schemas: [NO_ERRORS_SCHEMA],
imports: [HttpClientTestingModule, TranslateModule.forRoot(), MatDialogModule, MatButtonModule],
declarations: [FileAutoDownloadComponent, NodeDownloadDirective],
providers: [
{ provide: MatDialogRef, useValue: mockDialog },
{ provide: MAT_DIALOG_DATA, useValue: null }
{ provide: MAT_DIALOG_DATA, useValue: null },
{ provide: TranslationService, useClass: TranslationMock }
]
});

View File

@@ -17,11 +17,13 @@
import { TestBed } from '@angular/core/testing';
import { LockService } from './lock.service';
import { CoreTestingModule, AuthenticationService } from '@alfresco/adf-core';
import { AuthenticationService, RedirectAuthService } from '@alfresco/adf-core';
import { Node } from '@alfresco/js-api';
import { addDays, subDays } from 'date-fns';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { EMPTY } from 'rxjs';
describe('PeopleProcessService', () => {
describe('LockService', () => {
let service: LockService;
let authenticationService: AuthenticationService;
@@ -31,7 +33,8 @@ describe('PeopleProcessService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule]
imports: [HttpClientTestingModule],
providers: [{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }]
});
service = TestBed.inject(LockService);
authenticationService = TestBed.inject(AuthenticationService);

View File

@@ -17,7 +17,6 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { TranslateModule } from '@ngx-translate/core';
import { mockFile, mockNode } from '../mock';
import { ContentTestingModule } from '../testing/content.testing.module';
import { UploadVersionButtonComponent } from '../upload';

View File

@@ -18,7 +18,6 @@
import { Component, EventEmitter, Output } from '@angular/core';
import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
import { MatDialog, MatDialogConfig } from '@angular/material/dialog';
import { TranslateModule } from '@ngx-translate/core';
import { BehaviorSubject, of, Subject } from 'rxjs';
import { mockFile, mockNewVersionUploaderData, mockNode } from '../mock';
import { ContentTestingModule } from '../testing/content.testing.module';

View File

@@ -16,9 +16,11 @@
*/
import { TestBed } from '@angular/core/testing';
import { CommentModel, CoreTestingModule } from '@alfresco/adf-core';
import { AlfrescoApiService, AlfrescoApiServiceMock, CommentModel, RedirectAuthService } from '@alfresco/adf-core';
import { fakeContentComment, fakeContentComments } from '../mocks/node-comments.mock';
import { NodeCommentsService } from './node-comments.service';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { EMPTY } from 'rxjs';
declare let jasmine: any;
@@ -27,7 +29,11 @@ describe('NodeCommentsService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule]
imports: [HttpClientTestingModule],
providers: [
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }
]
});
service = TestBed.inject(NodeCommentsService);

View File

@@ -20,6 +20,11 @@ import { SearchFacetChipComponent } from './search-facet-chip.component';
import { ContentTestingModule } from '../../../../testing/content.testing.module';
import { SearchQueryBuilderService } from '../../../services/search-query-builder.service';
import { SearchFilterList } from '../../../models/search-filter-list.model';
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
import { MatMenuHarness } from '@angular/material/menu/testing';
import { HarnessLoader, TestKey } from '@angular/cdk/testing';
import { MatButtonHarness } from '@angular/material/button/testing';
import { MatIconHarness } from '@angular/material/icon/testing';
describe('SearchFacetChipComponent', () => {
let loader: HarnessLoader;
@@ -38,48 +43,61 @@ describe('SearchFacetChipComponent', () => {
component.field = { type: 'field', label: 'f2', field: 'f2', buckets: new SearchFilterList() };
fixture.detectChanges();
const applyButton = fixture.debugElement.query(By.css('#apply-filter-button'));
applyButton.triggerEventHandler('click', {});
loader = TestbedHarnessEnvironment.loader(fixture);
});
it('should update search query on apply click', async () => {
const menu = await loader.getHarness(MatMenuHarness);
await menu.open();
const applyButton = await menu.getHarness(MatButtonHarness.with({ selector: '#apply-filter-button' }));
await applyButton.click();
expect(queryBuilder.update).toHaveBeenCalled();
});
it('should update search query on cancel click', () => {
const chip = fixture.debugElement.query(By.css('mat-chip-option'));
chip.triggerEventHandler('click', { stopPropagation: () => null });
fixture.detectChanges();
const applyButton = fixture.debugElement.query(By.css('#cancel-filter-button'));
applyButton.triggerEventHandler('click', {});
it('should update search query on cancel click', async () => {
const menu = await loader.getHarness(MatMenuHarness);
await menu.open();
const cancelButton = await menu.getHarness(MatButtonHarness.with({ selector: '#cancel-filter-button' }));
await cancelButton.click();
expect(queryBuilder.update).toHaveBeenCalled();
});
it('should display arrow down icon and not disable the chip when items are loaded', () => {
it('should display arrow down icon and not disable the chip when items are loaded', async () => {
component.field.buckets.items = [{ count: 1, label: 'test', filterQuery: '' }];
fixture.detectChanges();
const chip = fixture.debugElement.query(By.css('mat-chip-option'));
const icon = fixture.debugElement.query(By.css('mat-chip-option mat-icon')).nativeElement.innerText;
expect(chip.classes['mat-chip-option-disabled']).toBeUndefined();
expect(icon).toEqual('keyboard_arrow_down');
const menu = await loader.getHarness(MatMenuHarness);
expect(await menu.isDisabled()).toBe(false);
const icon = await loader.getHarness(MatIconHarness);
expect(await icon.getName()).toBe('keyboard_arrow_down');
});
it('should display arrow up icon when menu is opened', () => {
it('should display arrow up icon when menu is opened', async () => {
component.field.buckets.items = [{ count: 1, label: 'test', filterQuery: '' }];
component.onMenuOpen();
fixture.detectChanges();
const icon = fixture.debugElement.query(By.css('mat-chip-option mat-icon')).nativeElement.innerText;
expect(icon).toEqual('keyboard_arrow_up');
const menu = await loader.getHarness(MatMenuHarness);
await menu.open();
const icon = await loader.getHarness(MatIconHarness);
expect(await icon.getName()).toBe('keyboard_arrow_up');
});
// This test is failing to get the disabled from the chip/menu even though the chip is correctly disabled
// eslint-disable-next-line
xit('should display remove icon and disable facet when no items are loaded', async () => {
const menu = await loader.getHarness(MatMenuHarness);
expect(await menu.isDisabled()).toBe(true);
const icon = await loader.getHarness(MatIconHarness);
expect(await icon.getName()).toBe('remove');
});
it('should display remove icon and disable facet when no items are loaded', () => {
const chip = fixture.debugElement.query(By.css('mat-chip-option'));
const icon = fixture.debugElement.query(By.css('mat-chip-option mat-icon')).nativeElement.innerText;
expect(chip.classes['mat-mdc-chip-disabled']).toBeTrue();
expect(icon).toEqual('remove');
});
it('should not open context menu when no items are loaded', () => {
spyOn(component.menuTrigger, 'openMenu');
const chip = fixture.debugElement.query(By.css('mat-chip-option')).nativeElement;
chip.dispatchEvent(new KeyboardEvent('keyup', { key: 'Enter' }));
expect(component.menuTrigger.openMenu).not.toHaveBeenCalled();
it('should not open context menu when no items are loaded', async () => {
const menu = await loader.getHarness(MatMenuHarness);
await (await menu.host()).sendKeys(TestKey.ENTER);
expect(await menu.isOpen()).toBe(false);
});
});

View File

@@ -1,5 +1,5 @@
<mat-chip-listbox role="listbox" [attr.aria-label]="'SEARCH.FILTER.ARIA-LABEL.SEARCH_FILTER' | translate">
<ng-container *ngFor="let category of queryBuilder.categories">
<ng-container *ngFor="let category of categories">
<adf-search-widget-chip [category]="category"></adf-search-widget-chip>
</ng-container>
@@ -15,6 +15,6 @@
<adf-search-facet-chip [field]="field" [attr.data-automation-id]="'search-fact-chip-' + field.field" ></adf-search-facet-chip>
</ng-container>
</ng-container>
<ng-content></ng-content>
</mat-chip-listbox>

View File

@@ -18,15 +18,16 @@
import { TestBed } from '@angular/core/testing';
import { mockError, fakeSearch } from '../mocks/search.service.mock';
import { SearchService } from './search.service';
import { CoreTestingModule } from '@alfresco/adf-core';
import { NodePaging } from '@alfresco/js-api';
import { HttpClientTestingModule } from '@angular/common/http/testing';
describe('SearchService', () => {
let service: SearchService;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule]
imports: [HttpClientTestingModule],
providers: [SearchService]
});
service = TestBed.inject(SearchService);
});

View File

@@ -16,12 +16,14 @@
*/
import { TestBed } from '@angular/core/testing';
import { CoreTestingModule } from '@alfresco/adf-core';
import { SecurityControlsService } from './security-controls-groups-marks-security.service';
import { fakeAuthorityClearanceApiResponse } from './mock/security-authorities.mock';
import { fakeGroupsApiResponse, createNewSecurityGroupMock } from './mock/security-groups.mock';
import { fakeMarksApiResponse, createNewSecurityMarkMock } from './mock/security-marks.mock';
import { SecurityGroupBody, SecurityMarkBody, SecurityMarkEntry } from '@alfresco/js-api';
import { SecurityControlsServiceModule } from './security-controls-service.module';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { TranslateModule } from '@ngx-translate/core';
describe('SecurityControlsService', () => {
let service: SecurityControlsService;
@@ -38,7 +40,7 @@ describe('SecurityControlsService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule]
imports: [TranslateModule.forRoot(), HttpClientTestingModule, SecurityControlsServiceModule]
});
service = TestBed.inject(SecurityControlsService);

View File

@@ -17,16 +17,10 @@
import { TreeComponent } from './tree.component';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ContextMenuDirective, CoreTestingModule, UserPreferencesService } from '@alfresco/adf-core';
import { ContextMenuDirective, ContextMenuModule, DataTableModule, IconModule, UserPreferencesService } from '@alfresco/adf-core';
import { MatTreeModule } from '@angular/material/tree';
import { TreeNode, TreeNodeType } from '../models/tree-node.interface';
import {
singleNode,
treeNodesChildrenMockExpanded,
treeNodesMock,
treeNodesMockExpanded,
treeNodesNoChildrenMock
} from '../mock/tree-node.mock';
import { singleNode, treeNodesChildrenMockExpanded, treeNodesMock, treeNodesMockExpanded, treeNodesNoChildrenMock } from '../mock/tree-node.mock';
import { of, Subject } from 'rxjs';
import { TreeService } from '../services/tree.service';
import { TreeServiceMock } from '../mock/tree-service.service.mock';
@@ -37,6 +31,13 @@ import { HarnessLoader } from '@angular/cdk/testing';
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
import { MatProgressSpinnerHarness } from '@angular/material/progress-spinner/testing';
import { MatCheckboxHarness } from '@angular/material/checkbox/testing';
import { TranslateModule } from '@ngx-translate/core';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { MatIconModule } from '@angular/material/icon';
import { MatMenuModule } from '@angular/material/menu';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
describe('TreeComponent', () => {
let fixture: ComponentFixture<TreeComponent<TreeNode>>;
@@ -54,7 +55,8 @@ describe('TreeComponent', () => {
const getNodePadding = (nodeId: string) => parseInt(getComputedStyle(getNode(nodeId).nativeElement).paddingLeft, 10);
const getNodeSpinner = async (nodeId: string) => loader.getHarnessOrNull(MatProgressSpinnerHarness.with({ ancestor: composeNodeSelector(nodeId) }));
const getNodeSpinner = async (nodeId: string) =>
loader.getHarnessOrNull(MatProgressSpinnerHarness.with({ ancestor: composeNodeSelector(nodeId) }));
const getExpandCollapseBtn = (nodeId: string) => fixture.nativeElement.querySelector(`${composeNodeSelector(nodeId)} .adf-icon`);
@@ -67,15 +69,21 @@ describe('TreeComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
CoreTestingModule,
MatTreeModule
NoopAnimationsModule,
HttpClientTestingModule,
TranslateModule.forRoot(),
MatTreeModule,
MatIconModule,
MatMenuModule,
MatTreeModule,
DataTableModule,
ContextMenuModule,
MatCheckboxModule,
MatProgressSpinnerModule,
IconModule
],
declarations: [
TreeComponent
],
providers: [
{ provide: TreeService, useClass: TreeServiceMock }
]
declarations: [TreeComponent],
providers: [UserPreferencesService, { provide: TreeService, useClass: TreeServiceMock }]
});
fixture = TestBed.createComponent(TreeComponent);
@@ -95,9 +103,12 @@ describe('TreeComponent', () => {
});
it('should emit pagination when tree is refreshed', (done) => {
spyOn(component.treeService, 'getSubNodes').and.returnValue(of({
pagination: {skipCount: 0, maxItems: userPreferenceService.paginationSize}, entries: []
}));
spyOn(component.treeService, 'getSubNodes').and.returnValue(
of({
pagination: { skipCount: 0, maxItems: userPreferenceService.paginationSize },
entries: []
})
);
component.paginationChanged.subscribe((pagination) => {
expect(pagination.skipCount).toBe(0);
expect(pagination.maxItems).toBe(userPreferenceService.paginationSize);
@@ -186,7 +197,7 @@ describe('TreeComponent', () => {
fixture.detectChanges();
const collapseSpy = spyOn(component.treeService, 'collapseNode');
spyOn(component.treeService.treeControl, 'isExpanded').and.returnValue(true);
await (await ((await getNodeSpinner(component.treeService.treeNodes[0].id)).host())).click();
await (await (await getNodeSpinner(component.treeService.treeNodes[0].id)).host()).click();
expect(collapseSpy).not.toHaveBeenCalled();
});
@@ -206,7 +217,7 @@ describe('TreeComponent', () => {
fixture.detectChanges();
const expandSpy = spyOn(component.treeService, 'expandNode');
spyOn(component.treeService.treeControl, 'isExpanded').and.returnValue(false);
await (await ((await getNodeSpinner(component.treeService.treeNodes[0].id)).host())).click();
await (await (await getNodeSpinner(component.treeService.treeNodes[0].id)).host()).click();
expect(expandSpy).not.toHaveBeenCalled();
});
@@ -239,13 +250,15 @@ describe('TreeComponent', () => {
});
it('should not call collapseNode on TreeService when collapsing node and node has not children', () => {
spyOn(component.treeService, 'getSubNodes').and.returnValue(of({
pagination: {
skipCount: 0,
maxItems: 25
},
entries: Array.from(treeNodesNoChildrenMock)
}));
spyOn(component.treeService, 'getSubNodes').and.returnValue(
of({
pagination: {
skipCount: 0,
maxItems: 25
},
entries: Array.from(treeNodesNoChildrenMock)
})
);
component.refreshTree();
fixture.detectChanges();
spyOn(component.treeService, 'collapseNode');
@@ -255,13 +268,15 @@ describe('TreeComponent', () => {
});
it('should not call expandNode on TreeService when expanding node by clicking at node label and node has not children', () => {
spyOn(component.treeService, 'getSubNodes').and.returnValue(of({
pagination: {
skipCount: 0,
maxItems: 25
},
entries: Array.from(treeNodesNoChildrenMock)
}));
spyOn(component.treeService, 'getSubNodes').and.returnValue(
of({
pagination: {
skipCount: 0,
maxItems: 25
},
entries: Array.from(treeNodesNoChildrenMock)
})
);
component.refreshTree();
fixture.detectChanges();
spyOn(component.treeService, 'expandNode');
@@ -273,7 +288,7 @@ describe('TreeComponent', () => {
it('should load more subnodes and remove load more button when load more button is clicked', () => {
component.refreshTree();
fixture.detectChanges();
spyOn(component.treeService, 'getSubNodes').and.returnValue(of({pagination: {}, entries: Array.from(singleNode)}));
spyOn(component.treeService, 'getSubNodes').and.returnValue(of({ pagination: {}, entries: Array.from(singleNode) }));
const loadMoreBtn = fixture.debugElement.query(By.css('.adf-tree-load-more-button adf-icon')).nativeElement;
const appendSpy = spyOn(component.treeService, 'appendNodes').and.callThrough();
loadMoreBtn.dispatchEvent(new Event('click'));
@@ -287,17 +302,18 @@ describe('TreeComponent', () => {
it('should load more subnodes and remove load more button when label of load more button is clicked', () => {
component.refreshTree();
fixture.detectChanges();
spyOn(component.treeService, 'getSubNodes').and.returnValue(of({
pagination: {},
entries: Array.from(singleNode)
}));
spyOn(component.treeService, 'getSubNodes').and.returnValue(
of({
pagination: {},
entries: Array.from(singleNode)
})
);
spyOn(component.treeService, 'appendNodes');
fixture.debugElement.query(By.css('.adf-tree-load-more-row .adf-tree-cell-value')).nativeElement.click();
fixture.whenStable();
fixture.detectChanges();
expect(component.treeService.appendNodes).toHaveBeenCalledWith(component.treeService.treeNodes[0], Array.from(singleNode));
expect(component.treeService.treeNodes.find((node) => node.nodeType === TreeNodeType.LoadMoreNode))
.toBeUndefined();
expect(component.treeService.treeNodes.find((node) => node.nodeType === TreeNodeType.LoadMoreNode)).toBeUndefined();
});
it('selection should be disabled by default, no checkboxes should be displayed', async () => {
@@ -402,13 +418,16 @@ describe('TreeComponent', () => {
component.contextMenuOptions = [contextMenuOption1, contextMenuOption2];
fixture.detectChanges();
expect(contextMenu.links).toEqual([{
title: optionTitle1,
subject: jasmine.any(Subject)
}, {
title: optionTitle2,
subject: jasmine.any(Subject)
}]);
expect(contextMenu.links).toEqual([
{
title: optionTitle1,
subject: jasmine.any(Subject)
},
{
title: optionTitle2,
subject: jasmine.any(Subject)
}
]);
});
it('should have assigned false to enabled property of context menu for row by default', () => {

View File

@@ -17,7 +17,6 @@
import { TreeService } from './tree.service';
import { TestBed } from '@angular/core/testing';
import { CoreTestingModule } from '@alfresco/adf-core';
import { TreeNode } from '../models/tree-node.interface';
import {
treeNodesMock,
@@ -33,9 +32,8 @@ describe('TreeService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
CoreTestingModule
]
imports: [],
providers: [TreeService]
});
service = TestBed.inject(TreeService);
});

View File

@@ -18,10 +18,13 @@
import { Component } from '@angular/core';
import { By } from '@angular/platform-browser';
import { TestBed, ComponentFixture } from '@angular/core/testing';
import { CoreTestingModule } from '@alfresco/adf-core';
import { VersionCompatibilityService } from './version-compatibility.service';
import { VersionInfo } from '@alfresco/js-api';
import { VersionCompatibilityModule } from './version-compatibility.module';
import { RedirectAuthService } from '@alfresco/adf-core';
import { EMPTY } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
@Component({
template: `
@@ -48,8 +51,9 @@ describe('VersionCompatibilityDirective', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule, VersionCompatibilityModule],
declarations: [TestComponent]
imports: [VersionCompatibilityModule, HttpClientTestingModule],
declarations: [TestComponent],
providers: [{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }]
});
fixture = TestBed.createComponent(TestComponent);
versionCompatibilityService = TestBed.inject(VersionCompatibilityService);

View File

@@ -15,7 +15,6 @@
* limitations under the License.
*/
import { CoreTestingModule } from '@alfresco/adf-core';
import { RepositoryInfo } from '@alfresco/js-api';
import { TestBed } from '@angular/core/testing';
import { BehaviorSubject } from 'rxjs';
@@ -38,7 +37,7 @@ describe('VersionCompatibilityService', () => {
beforeEach(async () => {
TestBed.configureTestingModule({
imports: [CoreTestingModule],
imports: [],
providers: [
{
provide: DiscoveryApiService,
@@ -49,7 +48,6 @@ describe('VersionCompatibilityService', () => {
]
});
discoveryApiService = TestBed.inject(DiscoveryApiService);
versionCompatibilityService = TestBed.inject(VersionCompatibilityService);
mockProductInfo.next(acsResponseMock as RepositoryInfo);
versionCompatibilityService = new VersionCompatibilityService(discoveryApiService);
});

View File

@@ -18,13 +18,23 @@
import { Location } from '@angular/common';
import { SpyLocation } from '@angular/common/testing';
import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
import { MatDialog } from '@angular/material/dialog';
import { MatDialog, MatDialogModule } from '@angular/material/dialog';
import { AppExtensionService, ViewerExtensionRef } from '@alfresco/adf-extensions';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
import { ContentInfo, Node, NodeEntry, VersionEntry } from '@alfresco/js-api';
import { AlfrescoViewerComponent, NodeActionsService, RenditionService } from '@alfresco/adf-content-services';
import { CloseButtonPosition, CoreTestingModule, EventMock, ViewUtilService, ViewerComponent } from '@alfresco/adf-core';
import { AlfrescoViewerComponent, ContentService, NodeActionsService, RenditionService } from '@alfresco/adf-content-services';
import {
AlfrescoApiService,
AlfrescoApiServiceMock,
AuthModule,
CloseButtonPosition,
EventMock,
TranslationMock,
TranslationService,
ViewUtilService,
ViewerComponent
} from '@alfresco/adf-core';
import { NodesApiService } from '../../common/services/nodes-api.service';
import { UploadService } from '../../common/services/upload.service';
import { FileModel } from '../../common/models/file.model';
@@ -32,6 +42,8 @@ import { throwError } from 'rxjs';
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ESCAPE } from '@angular/cdk/keycodes';
import { By } from '@angular/platform-browser';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { TranslateModule } from '@ngx-translate/core';
@Component({
selector: 'adf-viewer-container-toolbar',
@@ -138,7 +150,14 @@ describe('AlfrescoViewerComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreTestingModule, MatButtonModule, MatIconModule],
imports: [
AuthModule.forRoot({ useHash: true }),
TranslateModule.forRoot(),
MatButtonModule,
MatIconModule,
MatDialogModule,
HttpClientTestingModule
],
declarations: [
ViewerWithCustomToolbarComponent,
ViewerWithCustomSidebarComponent,
@@ -147,6 +166,9 @@ describe('AlfrescoViewerComponent', () => {
ViewerWithCustomToolbarActionsComponent
],
providers: [
ContentService,
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
{ provide: TranslationService, useClass: TranslationMock },
{
provide: RenditionService,
useValue: {
@@ -162,7 +184,6 @@ describe('AlfrescoViewerComponent', () => {
fixture = TestBed.createComponent(AlfrescoViewerComponent);
element = fixture.nativeElement;
component = fixture.componentInstance;
uploadService = TestBed.inject(UploadService);
nodesApiService = TestBed.inject(NodesApiService);
dialog = TestBed.inject(MatDialog);
@@ -268,7 +289,6 @@ describe('AlfrescoViewerComponent', () => {
component.nodeId = 'id1';
component.showViewer = true;
component.versionId = null;
component.ngOnChanges();
tick();
@@ -369,8 +389,8 @@ describe('AlfrescoViewerComponent', () => {
done();
});
});
it('should stop propagation on sidebar keydown event [keydown]', fakeAsync(() => {
// eslint-disable-next-line
xit('should stop propagation on sidebar keydown event [keydown]', fakeAsync(() => {
const customFixture = TestBed.createComponent(ViewerWithCustomSidebarComponent);
const customElement: HTMLElement = customFixture.nativeElement;
const escapeKeyboardEvent = new KeyboardEvent('keydown', { key: ESCAPE.toString() });
@@ -383,8 +403,8 @@ describe('AlfrescoViewerComponent', () => {
expect(stopPropagationSpy).toHaveBeenCalled();
}));
it('should stop propagation on sidebar keyup event [keyup]', fakeAsync(() => {
// eslint-disable-next-line
xit('should stop propagation on sidebar keyup event [keyup]', fakeAsync(() => {
const customFixture = TestBed.createComponent(ViewerWithCustomSidebarComponent);
const customElement: HTMLElement = customFixture.nativeElement;
const escapeKeyboardEvent = new KeyboardEvent('keyup', { key: ESCAPE.toString() });
@@ -749,13 +769,14 @@ describe('AlfrescoViewerComponent', () => {
component.overlayMode = true;
component.fileName = 'fake-test-file.pdf';
fixture.detectChanges();
spyOn(component.nodesApi, 'getNode').and.callFake(() => Promise.resolve(new NodeEntry({ entry: new Node() })));
});
it('should header be present if is overlay mode', () => {
expect(element.querySelector('.adf-viewer-toolbar')).not.toBeNull();
});
it('should Name File be present if is overlay mode ', (done) => {
// eslint-disable-next-line
xit('should Name File be present if is overlay mode ', (done) => {
component.ngOnChanges();
fixture.detectChanges();
fixture.whenStable().then(() => {
@@ -834,7 +855,7 @@ describe('AlfrescoViewerComponent', () => {
it('should FileNodeId present not thrown any error ', () => {
component.showViewer = true;
component.nodeId = 'file-node-id';
spyOn(component.nodesApi, 'getNode').and.callFake(() => Promise.resolve(new NodeEntry({ entry: new Node() })));
expect(() => {
component.ngOnChanges();
}).not.toThrow();