import { LabelStudio, TimeSeries } from "@humansignal/frontend-test/helpers/LSF"; import { multiChannelConfig, singleChannelConfig, heavyDatasetForDisplacement, } from "../../data/timeseries/charts-displaying"; import { TWO_FRAMES_TIMEOUT } from "../utils/constants"; describe("TimeSeries charts displaying - MultiChannel", () => { it("should not displace charts while navigating", () => { cy.log("Initialize MultiChannel TimeSeries for navigation testing"); LabelStudio.params().config(multiChannelConfig).data(heavyDatasetForDisplacement).withResult([]).init(); LabelStudio.waitForObjectsReady(); TimeSeries.waitForReady(); cy.log("Perform simple navigation sequence with boundary validation"); // Initial positioning check TimeSeries.verifyDataVisibleInViewport(); // Click at different positions on overview TimeSeries.clickOverviewAt(10); TimeSeries.verifyDataVisibleInViewport(); TimeSeries.clickOverviewAt(50); TimeSeries.verifyDataVisibleInViewport(); TimeSeries.clickOverviewAt(90); TimeSeries.verifyDataVisibleInViewport(); }); it("should not displace charts after window resize", () => { LabelStudio.params().config(multiChannelConfig).data(heavyDatasetForDisplacement).withResult([]).init(); LabelStudio.waitForObjectsReady(); TimeSeries.waitForReady(); const checkDifferentPositions = () => { // Click at different positions on overview and check visibility of data TimeSeries.clickOverviewAt(10); TimeSeries.verifyDataVisibleInViewport(); TimeSeries.clickOverviewAt(50); TimeSeries.verifyDataVisibleInViewport(); TimeSeries.clickOverviewAt(90); TimeSeries.verifyDataVisibleInViewport(); TimeSeries.clickOverviewAt(10); }; cy.log("Test multiple window sizes"); // Test window resize behavior for 800x600 cy.log("Testing window resize to 800x600"); cy.viewport(800, 600); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkDifferentPositions(); // Test window resize behavior for 1200x800 cy.log("Testing window resize to 1200x800"); cy.viewport(1200, 800); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkDifferentPositions(); // Test window resize behavior for 1400x900 cy.log("Testing window resize to 1400x900"); cy.viewport(1400, 900); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkDifferentPositions(); }); it("should not displace charts on X-axis after window resize at maximum zoom", () => { cy.log("Initialize MultiChannel TimeSeries for X-axis displacement testing"); LabelStudio.params().config(multiChannelConfig).data(heavyDatasetForDisplacement).withResult([]).init(); LabelStudio.waitForObjectsReady(); TimeSeries.waitForReady(); // Zoom to maximum level to make displacement more visible cy.log("Zooming to maximum level to test X-axis displacement"); TimeSeries.zoomToMaximum(); cy.wait(TWO_FRAMES_TIMEOUT); // Allow zoom to complete const checkChartsAlignment = () => { // Verify charts stay within plot area boundaries (especially X-axis) TimeSeries.verifyChartBoundingBoxAlignment(); // Also check data visibility for different positions TimeSeries.clickOverviewAt(10); TimeSeries.verifyChartBoundingBoxAlignment(); TimeSeries.clickOverviewAt(50); TimeSeries.verifyChartBoundingBoxAlignment(); TimeSeries.clickOverviewAt(90); TimeSeries.verifyChartBoundingBoxAlignment(); TimeSeries.clickOverviewAt(10); }; cy.log("Test multiple window sizes with X-axis displacement checks"); // Test window resize behavior for 800x600 cy.log("Testing window resize to 800x600 - checking for X-axis displacement"); cy.viewport(800, 600); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkChartsAlignment(); // Test window resize behavior for 1200x800 cy.log("Testing window resize to 1200x800 - checking for X-axis displacement"); cy.viewport(1200, 800); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkChartsAlignment(); // Test window resize behavior for 1400x900 cy.log("Testing window resize to 1400x900 - checking for X-axis displacement"); cy.viewport(1400, 900); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkChartsAlignment(); // Test extreme narrow window to stress-test X-axis alignment cy.log("Testing narrow window (600x800) - stress test for X-axis displacement"); cy.viewport(600, 800); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkChartsAlignment(); }); }); describe("TimeSeries charts displaying - Single Channel", () => { it("should not displace charts while navigating", () => { cy.log("Initialize Single Channel TimeSeries for navigation testing"); LabelStudio.params().config(singleChannelConfig).data(heavyDatasetForDisplacement).withResult([]).init(); LabelStudio.waitForObjectsReady(); TimeSeries.waitForReady(); cy.log("Perform simple navigation sequence with boundary validation"); // Initial positioning check TimeSeries.verifyDataVisibleInViewport(); // Click at different positions on overview TimeSeries.clickOverviewAt(10); TimeSeries.verifyDataVisibleInViewport(); TimeSeries.clickOverviewAt(50); TimeSeries.verifyDataVisibleInViewport(); TimeSeries.clickOverviewAt(90); TimeSeries.verifyDataVisibleInViewport(); }); it("should not displace charts after window resize", () => { LabelStudio.params().config(singleChannelConfig).data(heavyDatasetForDisplacement).withResult([]).init(); LabelStudio.waitForObjectsReady(); TimeSeries.waitForReady(); const checkDifferentPositions = () => { // Click at different positions on overview and check visibility of data TimeSeries.clickOverviewAt(10); TimeSeries.verifyDataVisibleInViewport(); TimeSeries.clickOverviewAt(50); TimeSeries.verifyDataVisibleInViewport(); TimeSeries.clickOverviewAt(90); TimeSeries.verifyDataVisibleInViewport(); TimeSeries.clickOverviewAt(10); }; cy.log("Test multiple window sizes"); // Test window resize behavior for 800x600 cy.log("Testing window resize to 800x600"); cy.viewport(800, 600); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkDifferentPositions(); // Test window resize behavior for 1200x800 cy.log("Testing window resize to 1200x800"); cy.viewport(1200, 800); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkDifferentPositions(); // Test window resize behavior for 1400x900 cy.log("Testing window resize to 1400x900"); cy.viewport(1400, 900); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkDifferentPositions(); }); it("should not displace charts on X-axis after window resize at maximum zoom", () => { cy.log("Initialize Single Channel TimeSeries for X-axis displacement testing"); LabelStudio.params().config(singleChannelConfig).data(heavyDatasetForDisplacement).withResult([]).init(); LabelStudio.waitForObjectsReady(); TimeSeries.waitForReady(); // Zoom to maximum level to make displacement more visible cy.log("Zooming to maximum level to test X-axis displacement"); TimeSeries.zoomToMaximum(); cy.wait(TWO_FRAMES_TIMEOUT); // Allow zoom to complete const checkChartsAlignment = () => { // Verify charts stay within plot area boundaries (especially X-axis) TimeSeries.verifyChartBoundingBoxAlignment(); // Also check data visibility for different positions TimeSeries.clickOverviewAt(10); TimeSeries.verifyChartBoundingBoxAlignment(); TimeSeries.clickOverviewAt(50); TimeSeries.verifyChartBoundingBoxAlignment(); TimeSeries.clickOverviewAt(90); TimeSeries.verifyChartBoundingBoxAlignment(); TimeSeries.clickOverviewAt(10); }; cy.log("Test multiple window sizes with X-axis displacement checks"); // Test window resize behavior for 800x600 cy.log("Testing window resize to 800x600 - checking for X-axis displacement"); cy.viewport(800, 600); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkChartsAlignment(); // Test window resize behavior for 1200x800 cy.log("Testing window resize to 1200x800 - checking for X-axis displacement"); cy.viewport(1200, 800); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkChartsAlignment(); // Test window resize behavior for 1400x900 cy.log("Testing window resize to 1400x900 - checking for X-axis displacement"); cy.viewport(1400, 900); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkChartsAlignment(); // Test extreme narrow window to stress-test X-axis alignment cy.log("Testing narrow window (600x800) - stress test for X-axis displacement"); cy.viewport(600, 800); cy.wait(TWO_FRAMES_TIMEOUT); // Allow resize handler to execute checkChartsAlignment(); }); });