cvat/tests/cypress/e2e/issues_prs2/issue_8952_interpolation_im...

153 lines
5.2 KiB
JavaScript

// Copyright (C) CVAT.ai Corporation
//
// SPDX-License-Identifier: MIT
/// <reference types="cypress" />
import { translatePoints } from '../../support/utils';
const taskName = '5frames';
const labelName = 'label';
const attrName = 'attr1';
const textDefaultValue = 'Some text';
const issueId = '8952';
const imagesCount = 5;
const width = 400;
const height = 400;
const posX = 50;
const posY = 50;
const color = 'white';
const imageFileName = `image_${issueId}`;
const archiveName = `${imageFileName}.zip`;
const archivePath = `cypress/fixtures/${archiveName}`;
const imagesFolder = `cypress/fixtures/${imageFileName}`;
const rect = [
30,
30,
30 + 34,
30 + 23,
];
context('Create any track, check if track works correctly after deleting some frames', () => {
function readShapeCoords() {
return cy.get('.cvat_canvas_shape').then(($shape) => ({
x: +$shape.attr('x'),
y: +$shape.attr('y'),
}));
}
function validateShapeCoords({ x, y }) {
const precision = 0.01; // db server precision is 2 digits
cy.get('.cvat_canvas_shape').then(($shape) => {
const [xVal, yVal] = [
+$shape.attr('x'),
+$shape.attr('y'),
];
expect(xVal).to.be.closeTo(x, precision);
expect(yVal).to.be.closeTo(y, precision);
});
}
describe('Description: user error, Could not receive frame 43 No one left position or right position was found. Interpolation impossible', () => {
let jobID = null;
const delta = 300;
before(() => {
cy.visit('/auth/login');
cy.login();
// Create assets for task using nodeJS
cy.imageGenerator(imagesFolder, imageFileName, width, height, color, posX, posY, labelName, imagesCount);
cy.createZipArchive(imagesFolder, archivePath);
cy.createAnnotationTask(taskName, labelName, attrName, textDefaultValue, archiveName);
cy.goToTaskList();
cy.openTaskJob(taskName);
cy.url().should('contain', 'jobs').then((url) => {
const last = url.lastIndexOf('/');
jobID = parseInt(url.slice(last + 1), 10);
}).then(() => {
// Remove all annotations and draw a track rect
const points0 = rect;
const points1 = translatePoints(points0, delta, 'x');
const points2 = translatePoints(points1, delta, 'y');
const track = {
shapes: [
{
frame: 0,
type: 'rectangle',
points: points0,
},
{
frame: 2,
type: 'rectangle',
points: points1,
},
{
frame: 4,
type: 'rectangle',
points: points2,
},
],
frame: 0,
labelName,
objectType: 'track',
};
cy.headlessCreateObjects([track], jobID);
});
});
beforeEach(() => {
cy.headlessRestoreAllFrames(jobID);
// Get job meta updates from the server and reload page to bring changes to UI
cy.reload();
cy.saveJob();
cy.get('.cvat-player-first-button').click();
});
it('Delete interpolated frames 0, 2, 4. Error should not appear', () => {
// Delete frames 0, 2, 4. Watch out for errors
cy.get('.cvat-player-first-button').click();
cy.checkFrameNum(0);
cy.clickDeleteFrameAnnotationView();
cy.checkFrameNum(1);
cy.goToNextFrame(2);
cy.clickDeleteFrameAnnotationView();
cy.checkFrameNum(3);
cy.goToNextFrame(4);
cy.clickDeleteFrameAnnotationView();
// There should be no objects on the deleted frame
cy.get('.cvat_canvas_shape').should('not.exist');
cy.clickSaveAnnotationView();
// Reopening a task with bad metadata might throw an exception that we can catch
cy.goToTaskList();
cy.openTaskJob(taskName);
});
it('Change track positions on frames 2 and 4. Delete frame. Confirm same shape positions', () => {
cy.goCheckFrameNumber(2);
cy.clickDeleteFrameAnnotationView();
cy.checkFrameNum(3);
cy.clickSaveAnnotationView();
let pos3 = null;
readShapeCoords().then((posOnFrame3) => {
pos3 = posOnFrame3;
cy.goToPreviousFrame(1);
});
let pos1 = null;
readShapeCoords().then((posOnFrame1) => {
pos1 = posOnFrame1;
});
cy.reload().then(() => {
cy.goToNextFrame(1).then(() => validateShapeCoords(pos1));
cy.goToNextFrame(3).then(() => validateShapeCoords(pos3));
});
});
});
});