Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WEBUI-1233: Backward Port: Unit test cases coverage improvement #1951

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions test/nuxeo-breadcrumb.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,29 @@ suite('nuxeo-breadcrumb', () => {
});
});

suite('Visibility without breadcrum entries', () => {
const document2 = {
'entity-type': 'document',
contextParameters: {},
path: '/default-domain/workspaces/my workspace/folder 1/folder 2/folder 3/my file',
title: 'my file',
type: 'File',
uid: '7',
};
setup(async () => {
server = await login();
breadcrumb = await fixture(
html`
<nuxeo-breadcrumb .document=${document2} .router=${router}></nuxeo-breadcrumb>
`,
);
});

test('Should display a breadcrumb when document does not have breadcrumb entries', async () => {
expect(isElementVisible(breadcrumb)).to.be.true;
});
});

suite('Breadcrumb composition', () => {
test('Should display all the ancestors except the last one when document has breadcrumb entries', async () => {
const ancestors = breadcrumb.shadowRoot.querySelector('#ancestors');
Expand Down Expand Up @@ -164,4 +187,33 @@ suite('nuxeo-breadcrumb', () => {
expect(ancestors.childElementCount).to.be.below(6);
});
});
suite('Title', () => {
test('title should not return title if document is not present or type is root', async () => {
const document3 = {
type: 'Root',
title: 'breadcrumb',
};
expect(breadcrumb._title(document3)).to.be.not.equal(document3.title);
expect(breadcrumb._title()).to.be.undefined;
});
test('Should return title when document.type is not root', async () => {
const document4 = {
title: 'breadcrumb',
};
expect(breadcrumb._title(document4)).to.equal(document4.title);
});
});

suite('Icon', () => {
test('Should return concat when document and url is present else empty', async () => {
const document5 = {
properties: {
'common:icon': 'testicon',
},
};
const url = 'path/';
expect(breadcrumb._icon(document5, '')).to.equal('');
expect(breadcrumb._icon(document5, url)).to.equal('path/testicon');
});
});
});
62 changes: 62 additions & 0 deletions test/nuxeo-document-tree.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ let rootDocument;
let levelOneDocuments;
let levelTwoDocuments;
let levelThreeDocuments;
let levelFourDocuments;
let levelOneDocument;
let levelTwoDocument;
let uidCounter;
Expand Down Expand Up @@ -263,6 +264,10 @@ suite('nuxeo-document-tree', () => {
// assert there's no icon to expand the node
const icon = node.querySelector('iron-icon');
expect(icon).to.be.null;
expect(documentTree._icon(false)).to.be.equal('icons:folder');
expect(documentTree._icon(true)).to.be.equal('icons:folder-open');
expect(documentTree._loading(false)).to.be.equal('');
expect(documentTree._documentChanged()).to.be.undefined;
});

test('Icons should be updated due to tree node expansion', async () => {
Expand Down Expand Up @@ -312,6 +317,23 @@ suite('nuxeo-document-tree', () => {
isElementVisible(documentTree.shadowRoot.querySelector('.parents'));
});

test('Tree breadcrumb is present with root document', async () => {
// set the new document that contains the breadcrumb

levelFourDocuments = [
generateDocument({ type: 'Root', parentRef: '7', parentPath: '/Folder6/Folder7', isFolderish: false }),
generateDocument({ type: 'File', parentRef: '8', parentPath: '/Folder6/Folder8', isFolderish: false }),
];
const [doc] = levelFourDocuments;
documentTree.currentDocument = doc;
await flush();
await waitForChildListMutation(documentTree.$.tree);
await waitForTreeNodeLoading(documentTree);

const nodes = getTreeNodes(documentTree);
expect(nodes).to.have.length(4);
});

test('Tree should collapse when clicking on a document', async () => {
// expand the nodes to reach the leaf (expanding two levels)
let node = getTreeNodeByUid(documentTree, 4);
Expand Down Expand Up @@ -395,6 +417,24 @@ suite('nuxeo-document-tree', () => {
});
});

test('Should not remove document when documents to be deleted are not present', async () => {
// fire the event to remove the documents from the tree
const documentsToDelete = null;
window.dispatchEvent(
new CustomEvent('nuxeo-documents-deleted', {
detail: {
documents: documentsToDelete,
},
}),
);
await flush();
await waitForTreeNodeLoading(documentTree);

// assert that the documents are not removed
const nodes = getTreeNodes(documentTree);
expect(nodes).to.have.length(4);
});

test('Should update the tree when a document is created', async () => {
// the newly created document
const document = generateDocument({
Expand Down Expand Up @@ -454,5 +494,27 @@ suite('nuxeo-document-tree', () => {
expect(node).to.be.not.null;
expect(node.querySelector('.node-name').textContent.trim()).to.be.equal(title);
});

test('When server responded with 403', async () => {
// set a new title a document to validate the refresh-display updates the tree
const title = 'New doc title';
levelOneDocuments[0].title = title;
// override the response to retrieve the updated document
generatePageProviderResponse(levelOneDocuments);
server.respondWith('GET', '/api/v1/path/Folder4/Folder6', [403, jsonHeader, JSON.stringify(levelTwoDocument)]);

// dispatch the refresh-display event
window.dispatchEvent(new CustomEvent('refresh-display'));
await flush();
await waitForChildListMutation(documentTree.$.tree);
await waitForTreeNodeLoading(documentTree);

// check we still have all the tree nodes
const nodes = getTreeNodes(documentTree);
expect(nodes).to.have.length(4);
// assert the node has the updated title
const node = Array.from(nodes).find((n) => n.data.title === title);
expect(node).to.be.undefined;
});
});
});
42 changes: 42 additions & 0 deletions test/nuxeo-edit-documents-button.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,48 @@ suite('nuxeo-edit-documents-button', () => {
expect(isElementVisible(dialog)).to.be.false;
});

test('Should submit form when properties are modified correctly when update mode is replace', async () => {
button = await buildButton();
const { dialog, save } = button.$;
const natureWidget = getWidget('dc:nature');
const natureBulkWidget = getBulkWidget(natureWidget);
const expiredWidget = getWidget('dc:expired');
// open the bulk edit dialog
button.$$('.action').click();
await waitForDialogOpen(dialog);
// set dc:nature update mode to remove
natureBulkWidget.updateMode = 'replace';
natureWidget.value = 'test';
// set a dc:expired date
expiredWidget.value = new Date();
// click the save button
save.click();
await waitForDialogClose(dialog);
// check that dialog is closed
expect(isElementVisible(dialog)).to.be.false;
});

test('Should submit form when properties are modified correctly when update mode is addvalues', async () => {
button = await buildButton();
const { dialog, save } = button.$;
const natureWidget = getWidget('dc:nature');
const natureBulkWidget = getBulkWidget(natureWidget);
const expiredWidget = getWidget('dc:expired');
// open the bulk edit dialog
button.$$('.action').click();
await waitForDialogOpen(dialog);
// set dc:nature update mode to remove
natureBulkWidget.updateMode = 'addValues';
natureWidget.value = 'test';
// set a dc:expired date
expiredWidget.value = new Date();
// click the save button
save.click();
await waitForDialogClose(dialog);
// check that dialog is closed
expect(isElementVisible(dialog)).to.be.false;
});

test('Should show the append option only if the field is multivalued', async () => {
button = await buildButton();
const { dialog } = button.$;
Expand Down
121 changes: 121 additions & 0 deletions test/nuxeo-grid.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,81 @@ suite('nuxeo-grid', () => {
expect(console.warn.notCalled).to.be.true;
});

suite('Should generate proper style when partial properties are set', () => {
test('Should not log warning when column property is not set', async () => {
grid.columns = 3;
grid.rows = 4;
grid.rowGap = '8px';
grid.columnGap = '8px';
grid.gap = '16px';
grid.alignItems = 'center';
grid.justifyItems = 'center';
grid.justify = '';

const [top, main] = grid.querySelectorAll('*');
top.setAttribute('data-row', '1');
top.setAttribute('data-column-span', '1');
main.setAttribute('data-row', '2');
main.setAttribute('data-column-span', '2');
main.setAttribute('data-row-span', '2');

await flush();
expect(console.warn.notCalled).to.be.true;
});

test('Should not log warning when only row span property is set', async () => {
grid.columns = 0;
grid.rows = 0;
grid.rowGap = '8px';
grid.columnGap = '8px';
grid.gap = '16px';
grid.alignItems = 'center';
grid.justifyItems = 'center';

const [main] = grid.querySelectorAll('*');
main.setAttribute('data-row-span', '1');
main.setAttribute('data-row-span', '2');

await flush();
expect(console.warn.notCalled).to.be.true;
});

test('Should not log warning when only when only column span property is set', async () => {
grid.columns = 0;
grid.rows = 0;
grid.rowGap = '8px';
grid.columnGap = '8px';
grid.gap = '16px';
grid.alignItems = 'center';
grid.justifyItems = 'center';

const [top, main] = grid.querySelectorAll('*');
top.setAttribute('data-column-span', '3');
main.setAttribute('data-column-span', '2');
await flush();
expect(console.warn.notCalled).to.be.true;
});

test('Should generate proper style when align and justify properties are set', async () => {
grid.columns = 0;
grid.rows = 0;
grid.rowGap = '8px';
grid.columnGap = '8px';
grid.gap = '16px';
grid.alignItems = 'center';
grid.justifyItems = 'center';

const [main] = grid.querySelectorAll('*');
main.setAttribute('data-row-span', '1');
main.setAttribute('data-row-span', '2');
main.setAttribute('data-align', 'center');
main.setAttribute('data-justify', 'center');

await flush();
expect(console.warn.notCalled).to.be.true;
});
});

test('Should generate proper style when column and row templates are set', async () => {
grid.columns = 100; // this will be ignored if templateColumns is defined
grid.rows = 300; // this will be ignored if templateRows is defined
Expand Down Expand Up @@ -194,6 +269,52 @@ suite('nuxeo-grid', () => {
grid-row: 3;
}
}
`;
expect(getStyle(grid)).to.equal(expected);
expect(console.warn.notCalled).to.be.true;
});
test('Should generate proper style when align and justify items are empty', async () => {
grid.columns = 100; // this will be ignored if templateColumns is defined
grid.rows = 300; // this will be ignored if templateRows is defined
grid.rowGap = '8px';
grid.columnGap = '8px';
grid.gap = '16px';
grid.alignItems = '';
grid.justifyItems = '';
grid.templateColumns = '1fr 300px auto';
grid.templateRows = '2fr auto 200px';
grid.columnspan = '1';
await flush();
const expected = `:host {
display: grid;
grid-template-columns: 1fr 300px auto;
grid-template-rows: 2fr auto 200px;
grid-gap: 16px;
grid-column-gap: 8px;
grid-row-gap: 8px;
}
@media (max-width: 1024px) {
:host {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: auto;
grid-gap: 16px;
grid-column-gap: 8px;
grid-row-gap: 8px;
}
::slotted([data-child-id="1"]) {
grid-column: 1;
grid-row: 1;
}
::slotted([data-child-id="2"]) {
grid-column: 1;
grid-row: 2;
}
::slotted([data-child-id="3"]) {
grid-column: 1;
grid-row: 3;
}
}
`;
expect(getStyle(grid)).to.equal(expected);
expect(console.warn.notCalled).to.be.true;
Expand Down
Loading