| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- const { serialize } = require("./helpers");
- const Utils = require("../examples/utils");
- const examples = [
- require("../examples/audio-regions"),
- require("../examples/audio-paragraphs"),
- require("../examples/image-bboxes"),
- require("../examples/image-ellipses"),
- require("../examples/image-keypoints"),
- require("../examples/image-polygons"),
- require("../examples/ner-url"),
- require("../examples/nested"),
- require("../examples/text-html"),
- require("../examples/text-paragraphs"),
- require("../examples/timeseries-url-indexed"),
- ];
- const assert = require("assert");
- function roundFloats(struct) {
- return JSON.parse(
- JSON.stringify(struct, (key, value) => {
- if (typeof value === "number") {
- return value.toFixed(1);
- }
- return value;
- }),
- );
- }
- function assertWithTolerance(actual, expected) {
- assert.deepEqual(roundFloats(actual), roundFloats(expected));
- }
- Feature("Smoke test through all the examples");
- // old audio is broken, so skipping it
- examples.slice(1).forEach((example) =>
- Scenario(
- example.title || "Noname smoke test",
- async ({ I, LabelStudio, AtOutliner, AtTopbar, AtDetails, AtAudioView }) => {
- LabelStudio.setFeatureFlags({
- ff_front_dev_2715_audio_3_280722_short: true,
- });
- // @todo optional predictions in example
- const { annotations, config, data, result = annotations[0].result } = example;
- const params = { annotations: [{ id: "test", result }], config, data };
- const configTree = Utils.parseXml(config);
- const ids = [];
- // add all unique ids from non-classification results
- // @todo some classifications will be reflected in Results list soon
- result.forEach((r) => !ids.includes(r.id) && Object.keys(r.value).length > 1 && ids.push(r.id));
- const count = ids.length;
- await I.amOnPage("/");
- LabelStudio.init(params);
- AtOutliner.seeRegions(count);
- let restored;
- LabelStudio.waitForObjectsReady();
- if (Utils.xmlFindBy(configTree, (node) => node["#name"] === "Audio")) {
- await AtAudioView.waitForAudio();
- }
- if (Utils.xmlFindBy(configTree, (node) => ["text", "hypertext"].includes(node["#name"].toLowerCase()))) {
- I.waitForVisible(".lsf-htx-richtext", 5);
- }
- I.dontSeeElement(locate(".lsf-errors"));
- restored = await I.executeScript(serialize);
- assertWithTolerance(restored, result);
- if (count) {
- AtOutliner.clickRegion(1);
- // I.click('Delete Entity') - it founds something by tooltip, but not a button
- // so click the bin button in entity's info block
- AtDetails.clickDeleteRegion();
- AtOutliner.seeRegions(count - 1);
- AtTopbar.clickAria("Reset");
- AtOutliner.seeRegions(count);
- // Reset is undoable
- AtTopbar.clickAria("Undo");
- // so after all these manipulations first region should be deleted
- restored = await I.executeScript(serialize);
- assertWithTolerance(
- restored,
- result.filter((r) => r.id !== ids[0]),
- );
- }
- // Click on annotation copy button
- AtTopbar.clickAria("Copy Annotation");
- // Check if new annotation exists
- AtTopbar.seeAnnotationAt(2);
- // Check for regions count
- AtOutliner.seeRegions(count);
- await I.executeScript(async () => {
- // await window.LabelStudio.destroyAll();
- // return true;
- });
- },
- ),
- );
|