| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- import { LabelStudio, TimeSeries } from "@humansignal/frontend-test/helpers/LSF";
- import { multiChannelSampleData, multiChannwlCnfig } from "../../data/timeseries/multichannel";
- import { TWO_FRAMES_TIMEOUT } from "../utils/constants";
- describe("MultiChannel", () => {
- it("should render correctly", () => {
- cy.log("Initialize MultiChannel TimeSeries");
- LabelStudio.params().config(multiChannwlCnfig).data(multiChannelSampleData).withResult([]).init();
- LabelStudio.waitForObjectsReady();
- TimeSeries.waitForReady();
- cy.log("Verify MultiChannel TimeSeries rendered correctly");
- // Verify that there are some paths rendered
- TimeSeries.paths.should("have.length.greaterThan", 0);
- // Verify no positioning errors (NaN/Infinity) in SVG elements
- TimeSeries.verifyNoPositioningErrors();
- // Verify chart data is visible in viewport
- TimeSeries.verifyDataVisibleInViewport();
- // Verify that we have multiple channels rendered
- TimeSeries.multiChannelContainer.should("be.visible");
- // Verify legend is rendered for multiple channels
- TimeSeries.legend.should("be.visible");
- TimeSeries.legendItems.should("have.length.greaterThan", 1);
- // Verify overview is rendered and functional
- TimeSeries.overview.should("be.visible");
- TimeSeries.overviewSvg.should("be.visible");
- cy.log("MultiChannel TimeSeries rendered successfully with valid data");
- });
- it("should support legend hover interactions", () => {
- cy.log("Initialize MultiChannel TimeSeries");
- LabelStudio.params().config(multiChannwlCnfig).data(multiChannelSampleData).withResult([]).init();
- LabelStudio.waitForObjectsReady();
- TimeSeries.waitForReady();
- cy.log("Verify legend hover functionality works without errors");
- // Test hovering over legend items doesn't cause errors
- TimeSeries.hoverLegendItem(0);
- cy.wait(TWO_FRAMES_TIMEOUT); // Allow any transitions to complete
- // Verify paths are still visible
- TimeSeries.paths.should("be.visible");
- // Test hovering over different legend item
- TimeSeries.hoverLegendItem(1);
- cy.wait(TWO_FRAMES_TIMEOUT); // Allow any transitions to complete
- // Verify paths are still visible
- TimeSeries.paths.should("be.visible");
- // Test removing hover
- TimeSeries.unhoverLegend();
- cy.wait(TWO_FRAMES_TIMEOUT); // Allow any transitions to complete
- // Verify paths are still visible
- TimeSeries.paths.should("be.visible");
- cy.log("Legend hover functionality working correctly without errors");
- });
- it("should support channel visibility toggling via legend clicks", () => {
- cy.log("Initialize MultiChannel TimeSeries");
- LabelStudio.params().config(multiChannwlCnfig).data(multiChannelSampleData).withResult([]).init();
- LabelStudio.waitForObjectsReady();
- TimeSeries.waitForReady();
- cy.log("Test channel visibility toggling by clicking legend items");
- // Get initial state - count visible paths and legend items
- TimeSeries.paths.should("have.length.greaterThan", 0);
- TimeSeries.legendItems.should("have.length.greaterThan", 1);
- TimeSeries.paths.then(($initialPaths) => {
- const initialVisibleCount = $initialPaths.filter(":visible").length;
- cy.log(`Initial visible paths: ${initialVisibleCount}`);
- // Click first legend item to hide channel
- cy.log("Clicking first legend item to hide channel");
- TimeSeries.clickLegendItem(0);
- // Verify that some paths are now hidden (each channel can have 1-2 paths)
- TimeSeries.paths.then(($pathsAfterHide) => {
- const visibleAfterHide = $pathsAfterHide.filter(":visible").length;
- cy.log(`Visible paths after hiding: ${visibleAfterHide}`);
- // Should have fewer visible paths (1-2 paths hidden per channel)
- expect(visibleAfterHide).to.be.lessThan(initialVisibleCount);
- expect(visibleAfterHide).to.be.at.least(0);
- });
- // Click the same legend item again to show channel back
- cy.log("Clicking same legend item to show channel back");
- TimeSeries.clickLegendItem(0);
- // Verify paths are restored
- TimeSeries.paths.filter(":visible").should("have.length", initialVisibleCount);
- // Test hiding different channel
- cy.log("Testing hiding second channel");
- TimeSeries.clickLegendItem(1);
- TimeSeries.paths.then(($pathsAfterHide2) => {
- const visibleAfterHide2 = $pathsAfterHide2.filter(":visible").length;
- cy.log(`Visible paths after hiding second channel: ${visibleAfterHide2}`);
- // Should have fewer visible paths
- expect(visibleAfterHide2).to.be.lessThan(initialVisibleCount);
- expect(visibleAfterHide2).to.be.at.least(0);
- });
- // Restore second channel
- cy.log("Restoring second channel");
- TimeSeries.clickLegendItem(1);
- // Verify all paths are restored
- TimeSeries.paths.filter(":visible").should("have.length", initialVisibleCount);
- cy.log("Channel visibility toggling works correctly");
- });
- });
- });
|