Cypress test. Update cases dump/upload annotations. (#3545)

* Update cypress tests

* Added wait to command. Removed from tetst.

* Added rename archive to export dataset 3d functionality
main
Dmitry Kruchinin 5 years ago committed by GitHub
parent 589dc91d2d
commit 3c3465dd8e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -34,8 +34,9 @@ context('Dump/Upload annotation.', { browser: '!firefox' }, () => {
const imagesFolder = `cypress/fixtures/${imageFileName}`;
const directoryToArchive = imagesFolder;
const dumpType = 'CVAT for images';
const exportFormat = 'CVAT for images';
let annotationArchiveName = '';
let annotationArchiveNameCustomeName = '';
function uploadToTask(toTaskName) {
cy.contains('.cvat-item-task-name', toTaskName)
@ -43,13 +44,13 @@ context('Dump/Upload annotation.', { browser: '!firefox' }, () => {
.find('.cvat-menu-icon')
.trigger('mouseover');
cy.contains('Upload annotations').trigger('mouseover');
cy.contains('.cvat-menu-load-submenu-item', dumpType.split(' ')[0])
cy.contains('.cvat-menu-load-submenu-item', exportFormat.split(' ')[0])
.should('be.visible')
.within(() => {
cy.get('.cvat-menu-load-submenu-item-button')
.click()
.get('input[type=file]')
.attachFile(annotationArchiveName);
.attachFile(annotationArchiveNameCustomeName);
});
}
@ -65,24 +66,39 @@ context('Dump/Upload annotation.', { browser: '!firefox' }, () => {
});
describe(`Testing case "${caseId}"`, () => {
it('Save job. Dump annotation. Remove annotation. Save job.', () => {
it('Save job. Dump annotation with renaming the archive.', () => {
cy.saveJob('PATCH', 200, 'saveJobDump');
cy.intercept('GET', '/api/v1/tasks/**/annotations**').as('dumpAnnotations');
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').within(() => {
cy.get('.cvat-modal-export-select').should('contain.text', dumpType);
cy.contains('button', 'OK').click();
const exportAnnotationRenameArchive = {
as: 'exportAnnotationsRenameArchive',
type: 'annotations',
format: exportFormat,
archiveCustomeName: 'task_export_annotation_custome_name'
};
cy.exportTask(exportAnnotationRenameArchive);
const regex = new RegExp(`^${exportAnnotationRenameArchive.archiveCustomeName}.zip$`);
cy.task('listFiles', 'cypress/fixtures').each((fileName) => {
if (fileName.match(regex)) {
cy.readFile(`cypress/fixtures/${fileName}`).should('exist');
annotationArchiveNameCustomeName = fileName;
}
});
cy.wait('@dumpAnnotations', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@dumpAnnotations').its('response.statusCode').should('equal', 201);
});
it('Save job. Dump annotation. Remove annotation. Save job.', () => {
const exportAnnotation = {
as: 'exportAnnotations',
type: 'annotations',
format: exportFormat,
};
cy.exportTask(exportAnnotation);
cy.removeAnnotations();
cy.saveJob('PUT');
cy.get('#cvat_canvas_shape_1').should('not.exist');
cy.get('#cvat-objects-sidebar-state-item-1').should('not.exist');
cy.wait(2000); // Waiting for the full download.
const regex = new RegExp(`^task_${taskName.toLowerCase()}-.*-${exportAnnotation.format.toLowerCase()}.*.zip$`);
cy.task('listFiles', 'cypress/fixtures').each((fileName) => {
if (fileName.includes(dumpType.toLowerCase())) {
if (fileName.match(regex)) {
cy.readFile(`cypress/fixtures/${fileName}`).should('exist');
annotationArchiveName = fileName;
}
});
@ -90,7 +106,7 @@ context('Dump/Upload annotation.', { browser: '!firefox' }, () => {
it('Upload annotation to job.', () => {
cy.interactMenu('Upload annotations');
cy.contains('.cvat-menu-load-submenu-item', dumpType.split(' ')[0])
cy.contains('.cvat-menu-load-submenu-item', exportFormat.split(' ')[0])
.should('be.visible')
.within(() => {
cy.get('.cvat-menu-load-submenu-item-button')
@ -107,6 +123,8 @@ context('Dump/Upload annotation.', { browser: '!firefox' }, () => {
cy.get('#cvat_canvas_shape_1').should('exist');
cy.get('#cvat-objects-sidebar-state-item-1').should('exist');
cy.removeAnnotations();
cy.get('#cvat_canvas_shape_1').should('not.exist');
cy.get('#cvat-objects-sidebar-state-item-1').should('not.exist');
});
it('Upload annotation to task.', () => {

@ -26,18 +26,35 @@ context('Export task dataset.', () => {
});
describe(`Testing case "${caseId}"`, () => {
it(`Go to Menu. Press "Export task dataset" with the "${exportFormat}" format.`, () => {
cy.intercept('GET', '/api/v1/tasks/**/dataset**').as('exportDataset');
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').within(() => {
cy.get('.cvat-modal-export-select').should('contain.text', exportFormat);
cy.get('[type="checkbox"]').should('not.be.checked').check();
cy.contains('button', 'OK').click();
it('Export a task as dataset.', () => {
const exportDataset = {
as: 'exportDataset',
type: 'dataset',
format: exportFormat,
};
cy.exportTask(exportDataset);
const regex = new RegExp(`^task_${taskName.toLowerCase()}-.*-${exportDataset.format.toLowerCase()}.*.zip$`);
cy.task('listFiles', 'cypress/fixtures').each((fileName) => {
if (fileName.match(regex)) {
cy.readFile(`cypress/fixtures/${fileName}`).should('exist');
}
});
});
it('Export a task as dataset with renaming the archive.', () => {
const exportDataset = {
as: 'exportDatasetRenameArchive',
type: 'dataset',
format: exportFormat,
archiveCustomeName: 'task_export_dataset_custome_name'
};
cy.exportTask(exportDataset);
const regex = new RegExp(`^${exportDataset.archiveCustomeName}.zip$`);
cy.task('listFiles', 'cypress/fixtures').each((fileName) => {
if (fileName.match(regex)) {
cy.readFile(`cypress/fixtures/${fileName}`).should('exist');
}
});
cy.get('.cvat-notification-notice-export-task-start').should('exist');
cy.closeNotification('.cvat-notification-notice-export-task-start');
cy.wait('@exportDataset', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@exportDataset').its('response.statusCode').should('equal', 201);
});
});
});

@ -13,6 +13,7 @@ context('Canvas 3D functionality. Dump/upload annotation. "Point Cloud" format',
};
const dumpTypePC = 'Sly Point Cloud Format';
let annotationPCArchiveName = '';
let annotationPCArchiveCustomeName = '';
function confirmUpdate(modalWindowClassName) {
cy.get(modalWindowClassName).within(() => {
@ -20,63 +21,54 @@ context('Canvas 3D functionality. Dump/upload annotation. "Point Cloud" format',
});
}
function uploadToTask(toTaskName) {
cy.contains('.cvat-item-task-name', toTaskName)
.parents('.cvat-tasks-list-item')
.find('.cvat-menu-icon')
.trigger('mouseover');
cy.contains('Upload annotations').trigger('mouseover');
cy.readFile('cypress/downloads/' + annotationPCArchiveName, 'binary')
.then(Cypress.Blob.binaryStringToBlob)
.then((fileContent) => {
cy.contains('.cvat-menu-load-submenu-item', dumpTypePC.split(' ')[0])
.should('be.visible')
.within(() => {
cy.get('.cvat-menu-load-submenu-item-button').click().get('input[type=file]').attachFile({
fileName: annotationPCArchiveName,
fileContent: fileContent,
});
});
});
}
before(() => {
cy.openTask(taskName);
cy.openJob();
cy.wait(1000); // Waiting for the point cloud to display
cy.create3DCuboid(cuboidCreationParams);
cy.saveJob('PATCH', 200, 'saveJob');
});
describe(`Testing case "${caseId}"`, () => {
it('Save a job. Dump with "Point Cloud" format.', () => {
cy.saveJob('PATCH', 200, 'saveJob');
cy.intercept('GET', '/api/v1/tasks/**/annotations**').as('dumpAnnotations');
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').find('.cvat-modal-export-select').click();
cy.get('.ant-select-dropdown')
.not('.ant-select-dropdown-hidden')
.contains('.cvat-modal-export-option-item', dumpTypePC)
.click();
cy.get('.cvat-modal-export-select').should('contain.text', dumpTypePC);
cy.get('.cvat-modal-export-task').contains('button', 'OK').click();
cy.wait('@dumpAnnotations', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@dumpAnnotations').its('response.statusCode').should('equal', 201);
cy.removeAnnotations();
cy.saveJob('PUT');
cy.get('#cvat-objects-sidebar-state-item-1').should('not.exist');
cy.wait(2000); // Waiting for the full download.
cy.task('listFiles', 'cypress/downloads').each((fileName) => {
if (fileName.includes(dumpTypePC.toLowerCase())) {
it('Export with "Point Cloud" format.', () => {
const exportAnnotation = {
as: 'exportAnnotations',
type: 'annotations',
format: dumpTypePC,
};
cy.exportTask(exportAnnotation);
const regex = new RegExp(`^task_${taskName.toLowerCase()}-.*-${exportAnnotation.format.toLowerCase()}.*.zip$`);
cy.task('listFiles', 'cypress/fixtures').each((fileName) => {
if (fileName.match(regex)) {
cy.readFile(`cypress/fixtures/${fileName}`).should('exist');
annotationPCArchiveName = fileName;
}
});
});
it('Export with "Point Cloud" format. Renaming the archive', () => {
const exportAnnotationRenameArchive = {
as: 'exportAnnotationsRenameArchive',
type: 'annotations',
format: dumpTypePC,
archiveCustomeName: 'task_export_3d_annotation_custome_name_pc_format'
};
cy.exportTask(exportAnnotationRenameArchive);
const regex = new RegExp(`^${exportAnnotationRenameArchive.archiveCustomeName}.zip$`);
cy.task('listFiles', 'cypress/fixtures').each((fileName) => {
if (fileName.match(regex)) {
cy.readFile(`cypress/fixtures/${fileName}`).should('exist');
annotationPCArchiveCustomeName = fileName;
}
});
cy.removeAnnotations();
cy.saveJob('PUT');
cy.get('#cvat-objects-sidebar-state-item-1').should('not.exist');
});
it('Upload "Point Cloud" format annotation to job.', () => {
cy.interactMenu('Upload annotations');
cy.readFile('cypress/downloads/' + annotationPCArchiveName, 'binary')
cy.readFile('cypress/fixtures/' + annotationPCArchiveName, 'binary')
.then(Cypress.Blob.binaryStringToBlob)
.then((fileContent) => {
cy.contains('.cvat-menu-load-submenu-item', dumpTypePC.split(' ')[0])
@ -98,11 +90,28 @@ context('Canvas 3D functionality. Dump/upload annotation. "Point Cloud" format',
cy.get('#cvat-objects-sidebar-state-item-1').should('exist');
cy.removeAnnotations();
cy.get('button').contains('Save').click({ force: true });
cy.get('#cvat-objects-sidebar-state-item-1').should('not.exist');
});
it('Upload annotation to task.', () => {
it('Upload annotation from the archive with a custom name to task.', () => {
cy.goToTaskList();
uploadToTask(taskName);
cy.contains('.cvat-item-task-name', taskName)
.parents('.cvat-tasks-list-item')
.find('.cvat-menu-icon')
.trigger('mouseover');
cy.contains('Upload annotations').trigger('mouseover');
cy.readFile('cypress/fixtures/' + annotationPCArchiveCustomeName, 'binary')
.then(Cypress.Blob.binaryStringToBlob)
.then((fileContent) => {
cy.contains('.cvat-menu-load-submenu-item', dumpTypePC.split(' ')[0])
.should('be.visible')
.within(() => {
cy.get('.cvat-menu-load-submenu-item-button').click().get('input[type=file]').attachFile({
fileName: annotationPCArchiveCustomeName,
fileContent: fileContent,
});
});
});
confirmUpdate('.cvat-modal-content-load-task-annotation');
cy.contains('Annotations have been loaded').should('be.visible');
cy.get('[data-icon="close"]').click();

@ -13,6 +13,7 @@ context('Canvas 3D functionality. Dump/upload annotation. "Velodyne Points" form
};
const dumpTypeVC = 'Kitti Raw Format';
let annotationVCArchiveName = '';
let annotationVCArchiveNameCustomeName = '';
function confirmUpdate(modalWindowClassName) {
cy.get(modalWindowClassName).within(() => {
@ -20,62 +21,54 @@ context('Canvas 3D functionality. Dump/upload annotation. "Velodyne Points" form
});
}
function uploadToTask(toTaskName) {
cy.contains('.cvat-item-task-name', toTaskName)
.parents('.cvat-tasks-list-item')
.find('.cvat-menu-icon')
.trigger('mouseover');
cy.contains('Upload annotations').trigger('mouseover');
cy.readFile('cypress/downloads/' + annotationVCArchiveName, 'binary')
.then(Cypress.Blob.binaryStringToBlob)
.then((fileContent) => {
cy.contains('.cvat-menu-load-submenu-item', dumpTypeVC.split(' ')[0])
.should('be.visible')
.within(() => {
cy.get('.cvat-menu-load-submenu-item-button').click().get('input[type=file]').attachFile({
fileContent: fileContent,
fileName: annotationVCArchiveName,
});
});
});
}
before(() => {
cy.openTask(taskName);
cy.openJob();
cy.wait(1000); // Waiting for the point cloud to display
cy.create3DCuboid(cuboidCreationParams);
cy.saveJob('PATCH', 200, 'saveJob');
});
describe(`Testing case "${caseId}"`, () => {
it('Save a job. Dump with "Velodyne Points" format.', () => {
cy.saveJob('PATCH', 200, 'saveJob');
cy.intercept('GET', '/api/v1/tasks/**/annotations**').as('dumpAnnotations');
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').find('.cvat-modal-export-select').click();
cy.get('.ant-select-dropdown')
.not('.ant-select-dropdown-hidden')
.contains('.cvat-modal-export-option-item', dumpTypeVC)
.click();
cy.get('.cvat-modal-export-select').should('contain.text', dumpTypeVC);
cy.get('.cvat-modal-export-task').contains('button', 'OK').click();
cy.wait('@dumpAnnotations', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@dumpAnnotations').its('response.statusCode').should('equal', 201);
cy.removeAnnotations();
cy.saveJob('PUT');
cy.get('#cvat-objects-sidebar-state-item-1').should('not.exist');
cy.wait(2000); // Waiting for the full download.
cy.task('listFiles', 'cypress/downloads').each((fileName) => {
if (fileName.includes(dumpTypeVC.toLowerCase())) {
it('Export with "Velodyne Points" format.', () => {
const exportAnnotation = {
as: 'exportAnnotations',
type: 'annotations',
format: dumpTypeVC,
};
cy.exportTask(exportAnnotation);
const regex = new RegExp(`^task_${taskName.toLowerCase()}-.*-${exportAnnotation.format.toLowerCase()}.*.zip$`);
cy.task('listFiles', 'cypress/fixtures').each((fileName) => {
if (fileName.match(regex)) {
cy.readFile(`cypress/fixtures/${fileName}`).should('exist');
annotationVCArchiveName = fileName;
}
});
});
it('Export with "Point Cloud" format. Renaming the archive', () => {
const exportAnnotationRenameArchive = {
as: 'exportAnnotationsRenameArchive',
type: 'annotations',
format: dumpTypeVC,
archiveCustomeName: 'task_export_3d_annotation_custome_name_vc_format'
};
cy.exportTask(exportAnnotationRenameArchive);
const regex = new RegExp(`^${exportAnnotationRenameArchive.archiveCustomeName}.zip$`);
cy.task('listFiles', 'cypress/fixtures').each((fileName) => {
if (fileName.match(regex)) {
cy.readFile(`cypress/fixtures/${fileName}`).should('exist');
annotationVCArchiveNameCustomeName = fileName;
}
});
cy.removeAnnotations();
cy.saveJob('PUT');
cy.get('#cvat-objects-sidebar-state-item-1').should('not.exist');
});
it('Upload "Velodyne Points" format annotation to job.', () => {
cy.interactMenu('Upload annotations');
cy.readFile('cypress/downloads/' + annotationVCArchiveName, 'binary')
cy.readFile('cypress/fixtures/' + annotationVCArchiveName, 'binary')
.then(Cypress.Blob.binaryStringToBlob)
.then((fileContent) => {
cy.contains('.cvat-menu-load-submenu-item', dumpTypeVC.split(' ')[0])
@ -100,7 +93,23 @@ context('Canvas 3D functionality. Dump/upload annotation. "Velodyne Points" form
it('Upload annotation to task.', () => {
cy.goToTaskList();
uploadToTask(taskName);
cy.contains('.cvat-item-task-name', taskName)
.parents('.cvat-tasks-list-item')
.find('.cvat-menu-icon')
.trigger('mouseover');
cy.contains('Upload annotations').trigger('mouseover');
cy.readFile('cypress/fixtures/' + annotationVCArchiveNameCustomeName, 'binary')
.then(Cypress.Blob.binaryStringToBlob)
.then((fileContent) => {
cy.contains('.cvat-menu-load-submenu-item', dumpTypeVC.split(' ')[0])
.should('be.visible')
.within(() => {
cy.get('.cvat-menu-load-submenu-item-button').click().get('input[type=file]').attachFile({
fileName: annotationVCArchiveNameCustomeName,
fileContent: fileContent,
});
});
});
confirmUpdate('.cvat-modal-content-load-task-annotation');
cy.contains('Annotations have been loaded').should('be.visible');
cy.get('[data-icon="close"]').click();

@ -15,21 +15,6 @@ context('Canvas 3D functionality. Export as a dataset.', () => {
const dumpTypePC = 'Sly Point Cloud Format';
const dumpTypeVC = 'Kitti Raw Format';
function exportDataset (format, as) {
cy.intercept('GET', '/api/v1/tasks/**/dataset**').as(as);
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').find('.cvat-modal-export-select').click();
cy.get('.ant-select-dropdown')
.not('.ant-select-dropdown-hidden')
.contains('.cvat-modal-export-option-item', format)
.click();
cy.get('.cvat-modal-export-select').should('contain.text', format);
cy.get('.cvat-modal-export-task').find('[type="checkbox"]').should('not.be.checked').check();
cy.get('.cvat-modal-export-task').contains('button', 'OK').click();
cy.wait(`@${as}`, { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait(`@${as}`).its('response.statusCode').should('equal', 201);
}
before(() => {
cy.openTask(taskName);
cy.openJob();
@ -40,11 +25,49 @@ context('Canvas 3D functionality. Export as a dataset.', () => {
describe(`Testing case "${caseId}"`, () => {
it('Export as a dataset with "Point Cloud" format.', () => {
exportDataset(dumpTypePC, 'exportDatasetPC');
const exportDatasetPCFormat = {
as: 'exportDatasetPCFormat',
type: 'dataset',
format: dumpTypePC,
};
cy.exportTask(exportDatasetPCFormat);
const regex = new RegExp(`^task_${taskName.toLowerCase()}-.*-${exportDatasetPCFormat.format.toLowerCase()}.*.zip$`);
cy.task('listFiles', 'cypress/fixtures').each((fileName) => {
if (fileName.match(regex)) {
cy.fixture(fileName).should('exist');
}
});
});
it('Export as a dataset with "Velodyne Points" format.', () => {
exportDataset(dumpTypeVC, 'exportDatasetVC');
const exportDatasetVCFormat = {
as: 'exportDatasetVCFormat',
type: 'dataset',
format: dumpTypeVC,
};
cy.exportTask(exportDatasetVCFormat);
const regex = new RegExp(`^task_${taskName.toLowerCase()}-.*-${exportDatasetVCFormat.format.toLowerCase()}.*.zip$`);
cy.task('listFiles', 'cypress/fixtures').each((fileName) => {
if (fileName.match(regex)) {
cy.fixture(fileName).should('exist');
}
});
});
it('Export as a dataset with renaming the archive.', () => {
const exportDatasetVCFormatRenameArchive = {
as: 'exportDatasetVCFormatRenameArchive',
type: 'dataset',
format: dumpTypeVC,
archiveCustomeName: 'task_export_3d_dataset_custome_name_vc_format'
};
cy.exportTask(exportDatasetVCFormatRenameArchive);
const regex = new RegExp(`^${exportDatasetVCFormatRenameArchive.archiveCustomeName}.zip$`);
cy.task('listFiles', 'cypress/fixtures').each((fileName) => {
if (fileName.match(regex)) {
cy.fixture(fileName).should('exist');
}
});
cy.removeAnnotations();
cy.saveJob('PUT');
});

@ -17,7 +17,7 @@ context('Dump annotation if cuboid created.', () => {
secondX: 350,
secondY: 450,
};
const dumpType = 'Datumaro';
const exportFormat = 'Datumaro';
before(() => {
cy.openTaskJob(taskName);
@ -26,21 +26,16 @@ context('Dump annotation if cuboid created.', () => {
describe(`Testing issue "${issueId}"`, () => {
it('Create a cuboid.', () => {
cy.createCuboid(createCuboidShape2Points);
cy.saveJob('PATCH', 200, `dump${exportFormat}Format`);
});
it('Dump an annotation.', () => {
cy.saveJob('PATCH', 200, `dump${dumpType}Format`);
cy.intercept('GET', '/api/v1/tasks/**/annotations**').as('dumpAnnotations');
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').find('.cvat-modal-export-select').click();
cy.get('.ant-select-dropdown')
.not('.ant-select-dropdown-hidden')
.contains('.cvat-modal-export-option-item', dumpType)
.click();
cy.get('.cvat-modal-export-select').should('contain.text', dumpType);
cy.get('.cvat-modal-export-task').contains('button', 'OK').click();
cy.wait('@dumpAnnotations', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@dumpAnnotations').its('response.statusCode').should('equal', 201);
const exportAnnotation = {
as: 'exportAnnotations',
type: 'annotations',
format: exportFormat,
};
cy.exportTask(exportAnnotation);
});
it('Error notification is not exists.', () => {

@ -714,3 +714,23 @@ Cypress.Commands.add('closeModalUnsupportedPlatform', () => {
});
}
});
Cypress.Commands.add('exportTask', ({ as, type, format, archiveCustomeName }) => {
cy.interactMenu('Export task dataset');
cy.intercept('GET', `/api/v1/tasks/**/${type}**`).as(as);
cy.get('.cvat-modal-export-task').find('.cvat-modal-export-select').click();
cy.contains('.cvat-modal-export-option-item', format).click();
cy.get('.cvat-modal-export-task').find('.cvat-modal-export-select').should('contain.text', format);
if (type === 'dataset') {
cy.get('.cvat-modal-export-task').find('[type="checkbox"]').should('not.be.checked').check();
}
if (archiveCustomeName) {
cy.get('.cvat-modal-export-task').find('.cvat-modal-export-filename-input').type(archiveCustomeName);
}
cy.contains('button', 'OK').click();
cy.get('.cvat-notification-notice-export-task-start').should('be.visible');
cy.closeNotification('.cvat-notification-notice-export-task-start');
cy.wait(`@${as}`, { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait(`@${as}`).its('response.statusCode').should('equal', 201);
cy.wait(2000) // Waiting for a full file download
});

@ -4,6 +4,7 @@
"viewportWidth": 1300,
"viewportHeight": 960,
"defaultCommandTimeout": 25000,
"downloadsFolder": "cypress/fixtures",
"env": {
"user": "admin",
"email": "admin@localhost.company",

Loading…
Cancel
Save