Unit tests

This commit is contained in:
Denys Vuika 2016-07-08 12:16:09 +01:00
parent 32c00b7e99
commit c637d1d053
4 changed files with 111 additions and 131 deletions

View File

@ -33,7 +33,7 @@ export class PageNode extends NodePaging {
}
export class FileNode extends MinimalNodeEntity {
constructor(name?: string) {
constructor(name?: string, mimeType?: string) {
super();
this.entry = new MinimalNodeEntryEntity();
this.entry.id = 'file-id';
@ -42,6 +42,7 @@ export class FileNode extends MinimalNodeEntity {
this.entry.name = name;
this.entry.path = new PathInfoEntity();
this.entry.content = new ContentInfo();
this.entry.content.mimeType = mimeType || 'text/plain';
}
}

View File

@ -416,87 +416,6 @@ describe('DocumentList', () => {
expect(documentList.displayFolderContent).toHaveBeenCalled();
});
// TODO: move to data adapter
/*
it('should generate file icon path based on mime type', () => {
let fileName = 'custom-icon.svg';
spyOn(alfrescoServiceMock, 'getMimeTypeIcon').and.returnValue(fileName);
documentList.baseComponentPath = '/root';
let file = new FileNode();
file.entry.content.mimeType = 'text/plain';
expect(documentList.getThumbnailUrl(file)).toBe(`/root/img/${fileName}`);
});
*/
// TODO: move to data adapter
/*
it('should fallback to default icon for missing mime type', () => {
spyOn(documentListService, 'getMimeTypeIcon').and.returnValue(null);
documentList.baseComponentPath = '/root';
let file = new FileNode();
file.entry.content.mimeType = null;
expect(documentList.getThumbnailUrl(file)).toBe('/root/img/ft_ic_miscellaneous.svg');
});
*/
// TODO: move to data adapter
/*
it('should fallback to default icon for unknown mime type', () => {
spyOn(documentListService, 'getMimeTypeIcon').and.returnValue(null);
documentList.baseComponentPath = '/root';
let file = new FileNode();
file.entry.content.mimeType = 'text/plain';
expect(documentList.getThumbnailUrl(file)).toBe('/root/img/ft_ic_miscellaneous.svg');
});
*/
// TODO: move to data adapter
/*
it('should resolve thumbnail url for a file', () => {
let url = 'http://<some url>';
spyOn(documentListService, 'getDocumentThumbnailUrl').and.returnValue(url);
documentList.thumbnails = true;
let file = new FileNode();
expect(documentList.getThumbnailUrl(file)).toBe(url);
});
*/
// TODO: move to data adapter
/*
it('should return no thumbnail url with missing service', () => {
let list = new DocumentList(null, null);
list.thumbnails = true;
let file = new FileNode();
expect(list.getThumbnailUrl(file)).toBeNull();
});
*/
// TODO: move to data adapter
/*
it('should convert cell value to thumbnail', () => {
let url = 'http://<address>';
spyOn(documentList, 'getThumbnailUrl').and.returnValue(url);
let file = new FileNode();
let col = new ContentColumnModel();
col.source = '$thumbnail';
col.type = 'image';
let value = documentList.getCellValue(file, col);
expect(value).toBe(url);
});
*/
it('should require path to display folder content', () => {
spyOn(documentListService, 'getFolder').and.callThrough();
@ -579,47 +498,6 @@ describe('DocumentList', () => {
expect(documentList.displayFolderContent).not.toHaveBeenCalled();
});
// TODO: move to data adapter
/*
it('should not sort empty page', () => {
let page = new PageNode();
spyOn(page.list.entries, 'sort').and.stub();
documentList.sort(page, null);
expect(page.list.entries.sort).not.toHaveBeenCalled();
});
*/
// TODO: move to data adapter
/*
it('should put folders to top on sort', () => {
let folder = new FolderNode();
let file1 = new FileNode('file1');
let file2 = new FileNode('file2');
let page = new PageNode([file1, file2, folder]);
// asc
documentList.sort(page, new ColumnSortingModel({
key: 'name',
direction: 'asc'
}));
expect(page.list.entries[0]).toBe(folder);
expect(page.list.entries[1]).toBe(file1);
expect(page.list.entries[2]).toBe(file2);
// desc
documentList.sort(page, new ColumnSortingModel({
key: 'name',
direction: 'desc'
}));
expect(page.list.entries[0]).toBe(folder);
expect(page.list.entries[1]).toBe(file2);
expect(page.list.entries[2]).toBe(file1);
});
*/
// TODO: move to data adapter
/*
it('should sort by dates up to ms', () => {

View File

@ -16,8 +16,7 @@
*/
import { it, describe, expect, beforeEach } from '@angular/core/testing';
import { DataColumn, DataRow } from 'ng2-alfresco-datatable';
import { DataColumn, DataRow, DataSorting } from 'ng2-alfresco-datatable';
import { DocumentListServiceMock } from './../assets/document-list.service.mock';
import { ShareDataTableAdapter, ShareDataRow } from './share-datatable-adapter';
import { FileNode, FolderNode, PageNode } from './../assets/document-library.model.mock';
@ -209,10 +208,49 @@ describe('ShareDataTableAdapter', () => {
expect(console.error).toHaveBeenCalledWith(`Error parsing date ${value} to format ${col.format}`);
});
it('should generate fallback icon for a file thumbnail', () => {
let adapter = new ShareDataTableAdapter(null, basePath, null);
it('should generate fallback icon for a file thumbnail with unknown mime type', () => {
let adapter = new ShareDataTableAdapter(documentListService, basePath, null);
let row = new ShareDataRow(new FileNode());
let file = new FileNode('file', 'wrong-mime');
let row = new ShareDataRow(file);
let col = <DataColumn> { type: 'image', key: '$thumbnail' };
let value = adapter.getValue(row, col);
expect(value).toBe(`${basePath}/img/ft_ic_miscellaneous.svg`);
});
it('should generate fallback icon for a file thumbnail with missing mime type', () => {
let adapter = new ShareDataTableAdapter(documentListService, basePath, null);
let file = new FileNode();
file.entry.content.mimeType = null;
let row = new ShareDataRow(file);
let col = <DataColumn> { type: 'image', key: '$thumbnail' };
let value = adapter.getValue(row, col);
expect(value).toBe(`${basePath}/img/ft_ic_miscellaneous.svg`);
});
it('should generate fallback icon for a file with no content entry', () => {
let adapter = new ShareDataTableAdapter(documentListService, basePath, null);
let file = new FileNode();
file.entry.content = null;
let row = new ShareDataRow(file);
let col = <DataColumn> { type: 'image', key: '$thumbnail' };
let value = adapter.getValue(row, col);
expect(value).toBe(`${basePath}/img/ft_ic_miscellaneous.svg`);
});
it('should generate fallback icon when document service fails to find one', () => {
spyOn(documentListService, 'getMimeTypeIcon').and.returnValue(null);
let adapter = new ShareDataTableAdapter(documentListService, basePath, null);
let file = new FileNode();
let row = new ShareDataRow(file);
let col = <DataColumn> { type: 'image', key: '$thumbnail' };
let value = adapter.getValue(row, col);
@ -301,10 +339,73 @@ describe('ShareDataTableAdapter', () => {
expect(console.error).toHaveBeenCalledWith(error);
});
it('should generate file icon path based on mime type', () => {
let fileName = 'custom-icon.svg';
spyOn(documentListService, 'getMimeTypeIcon').and.returnValue(fileName);
let file = new FileNode('file1', 'text/plain');
let row = new ShareDataRow(file);
let col = <DataColumn> {type: 'image', key: '$thumbnail'};
let adapter = new ShareDataTableAdapter(documentListService, '/root', null);
let value = adapter.getValue(row, col);
expect(value).toBe(`/root/img/${fileName}`);
expect(documentListService.getMimeTypeIcon).toHaveBeenCalled();
});
it('should put folders on top upon sort', () => {
let file1 = new FileNode('file1');
let file2 = new FileNode('file2');
let folder = new FolderNode();
let col = <DataColumn> { key: 'name' };
let adapter = new ShareDataTableAdapter(null, null, [col]);
adapter.setSorting(new DataSorting('name', 'asc'));
adapter.setRows([
new ShareDataRow(file2),
new ShareDataRow(file1),
new ShareDataRow(folder)
]);
let sorted = adapter.getRows();
expect((<ShareDataRow> sorted[0]).node).toBe(folder);
expect((<ShareDataRow> sorted[1]).node).toBe(file1);
expect((<ShareDataRow> sorted[2]).node).toBe(file2);
});
it('should sort by dates up to ms', () => {
let file1 = new FileNode('file1');
file1.entry['dateProp'] = new Date(2016, 6, 30, 13, 14, 1);
let file2 = new FileNode('file2');
file2.entry['dateProp'] = new Date(2016, 6, 30, 13, 14, 2);
let col = <DataColumn> { key: 'dateProp' };
let adapter = new ShareDataTableAdapter(null, null, [col]);
adapter.setRows([
new ShareDataRow(file2),
new ShareDataRow(file1)
]);
adapter.sort('dateProp', 'asc');
let rows = adapter.getRows();
expect((<ShareDataRow> rows[0]).node).toBe(file1);
expect((<ShareDataRow> rows[1]).node).toBe(file2);
adapter.sort('dateProp', 'desc');
expect((<ShareDataRow> rows[0]).node).toBe(file2);
expect((<ShareDataRow> rows[1]).node).toBe(file1);
});
it('should sort folders', () => {
});
});
describe('ShareDataRow', () => {
it('should wrap node', () => {

View File

@ -99,7 +99,7 @@ export class ShareDataTableAdapter implements DataTableAdapter {
return null;
}
if (node.entry.content && node.entry.content.mimeType) {
if (node.entry.content) {
let mimeType = node.entry.content.mimeType;
if (mimeType) {
let icon = this.documentListService.getMimeTypeIcon(mimeType);
@ -125,7 +125,7 @@ export class ShareDataTableAdapter implements DataTableAdapter {
setSorting(sorting: DataSorting): void {
this.sorting = sorting;
if (sorting && sorting.key) {
if (sorting && sorting.key && this.rows && this.rows.length > 0) {
this.rows.sort((a: ShareDataRow, b: ShareDataRow) => {
if (a.node.entry.isFolder !== b.node.entry.isFolder) {
return a.node.entry.isFolder ? -1 : 1;