const assert = require("assert");
// @TODO: Check why i do not see this `Feature` in tests in CI
Feature("Taxonomy");
Before(({ LabelStudio }) => {
LabelStudio.setFeatureFlags({
fflag_feat_front_lsdv_5451_async_taxonomy_110823_short: false,
ff_front_dev_1536_taxonomy_user_labels_150222_long: true,
});
});
Scenario("Lines overlap", async ({ I, LabelStudio, AtTaxonomy }) => {
async function checkOverlapAndGap(text1, text2) {
// Wait for elements to be present in the DOM before grabbing their bounding rects
const locator1 = AtTaxonomy.locate(AtTaxonomy.item).find("label").withText(text1);
const locator2 = AtTaxonomy.locate(AtTaxonomy.item).find("label").withText(text2);
await I.waitForElement(locator1, 5);
await I.waitForElement(locator2, 5);
const bbox1 = await I.grabElementBoundingRect(locator1);
const bbox2 = await I.grabElementBoundingRect(locator2);
// Add null checks with better error messages
if (!bbox1) {
assert.fail(`Element with text "${text1}" not found or has no bounding rect`);
}
if (!bbox2) {
assert.fail(`Element with text "${text2}" not found or has no bounding rect`);
}
bbox1.y2 = bbox1.y + bbox1.height;
bbox2.y2 = bbox2.y + bbox2.height;
if ((bbox1.y < bbox2.y && bbox2.y < bbox1.y2) || (bbox1.y < bbox2.y2 && bbox2.y2 < bbox1.y2)) {
assert.fail("Overlap has been detected");
}
const gap = Math.min(Math.abs(bbox1.y - bbox2.y2), Math.abs(bbox2.y - bbox1.y2));
if (gap > 0) {
assert.fail(`Detected Lines gap ${gap}`);
}
}
I.amOnPage("/");
LabelStudio.init({
config: `
`,
data: {
text: "Annotation 1",
},
});
LabelStudio.waitForObjectsReady();
AtTaxonomy.clickTaxonomy();
AtTaxonomy.toggleGroupWithText("target group");
await checkOverlapAndGap("long long long", "not so long");
I.amOnPage("/");
LabelStudio.init({
config: `
`,
data: {
text: "Annotation 2",
},
});
LabelStudio.waitForObjectsReady();
AtTaxonomy.clickTaxonomy();
AtTaxonomy.fillSearch("long");
await checkOverlapAndGap("long long long", "not so long");
I.amOnPage("/");
LabelStudio.init({
config: `
`,
data: {
text: "Annotation 3",
},
});
LabelStudio.waitForObjectsReady();
AtTaxonomy.clickTaxonomy();
AtTaxonomy.fillSearch("long");
await checkOverlapAndGap("super long line", "enough long line");
await checkOverlapAndGap("enough long line", "not long line");
}).retry(3);
Scenario("Add custom items", async ({ I, LabelStudio, AtTaxonomy }) => {
const params = {
config: `
`,
data: {
text: "Simple text",
},
};
I.amOnPage("/");
LabelStudio.init(params);
LabelStudio.waitForObjectsReady();
I.say("Add item to the root");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.addNewItem("c");
AtTaxonomy.seeItemByText("c");
I.say("Add item to the leaf");
AtTaxonomy.toggleGroupWithText("b");
AtTaxonomy.addItemInside("baa", AtTaxonomy.locateItemByText("ba"));
AtTaxonomy.seeItemByText("baa");
I.say("Select couple of items");
AtTaxonomy.clickItemByText("a");
AtTaxonomy.clickItemByText("baa");
AtTaxonomy.clickItemByText("c");
I.say("Check that items become checked");
AtTaxonomy.seeCheckedItemByText("a");
AtTaxonomy.seeCheckedItemByText("baa");
AtTaxonomy.seeCheckedItemByText("c");
I.say("Check that they are displayed as selected elements in the list");
AtTaxonomy.seeSelectedValues(["a", "baa", "c"]);
I.say("Get custom items");
const userLabels = await LabelStudio.grabUserLabels();
I.say("Check significant content of the custom items");
assert.strictEqual(userLabels.taxonomy.length, 2);
assert.deepStrictEqual(userLabels.taxonomy[0], ["c"]);
assert.deepStrictEqual(userLabels.taxonomy[1], ["b", "ba", "baa"]);
I.say("Serialize and check the result");
const result = await LabelStudio.serialize();
assert.deepStrictEqual(result[0].value.taxonomy, [["a"], ["b", "ba", "baa"], ["c"]]);
await session("Deserialization", async () => {
I.amOnPage("/");
LabelStudio.init({
...params,
annotations: [
{
id: "test",
result,
},
],
});
LabelStudio.waitForObjectsReady();
I.say("Restore user labels");
LabelStudio.initUserLabels(userLabels);
I.say("Be sure that custom items are in the tree");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.seeItemByText("c");
AtTaxonomy.toggleGroupWithText("b");
AtTaxonomy.toggleGroupWithText("ba");
AtTaxonomy.seeItemByText("baa");
I.say("Check that selected items are displayed as selected elements in the list");
AtTaxonomy.seeSelectedValues(["a", "baa", "c"]);
I.say("Check that items in the tree become checked");
AtTaxonomy.seeCheckedItemByText("a");
AtTaxonomy.seeCheckedItemByText("baa");
AtTaxonomy.seeCheckedItemByText("c");
const result2 = await LabelStudio.serialize();
assert.deepStrictEqual(result, result2);
});
I.say("Check that a custom items can be deleted");
AtTaxonomy.deleteItem(AtTaxonomy.locateItemByText("c"));
AtTaxonomy.deleteItem(AtTaxonomy.locateItemByText("baa"));
I.say("Check that deleting works");
AtTaxonomy.dontSeeCheckedItemByText("c");
AtTaxonomy.dontSeeCheckedItemByText("baa");
AtTaxonomy.dontSeeItemByText("c");
AtTaxonomy.dontSeeItemByText("baa");
const userLabels2 = await LabelStudio.grabUserLabels();
assert.strictEqual(userLabels2.taxonomy.length, 0);
// todo: That may be another problem (see: DEV-1967)
// I.say('Try to make duplicates');
// AtTaxonomy.addNewItem('d');
// AtTaxonomy.addNewItem('d');
// AtTaxonomy.addNewItem('a');
// AtTaxonomy.addItemInside('ba', AtTaxonomy.locateItemByText('b'));
// I.dontSeeElement(AtTaxonomy.locateItemByText('d').at(2));
// I.dontSeeElement(AtTaxonomy.locateItemByText('a').at(2));
// I.dontSeeElement(AtTaxonomy.locateItemByText('ba').at(2));
});
Scenario("Non unique values filtering", async ({ I, LabelStudio, AtTaxonomy }) => {
I.amOnPage("/");
LabelStudio.init({
config: `
`,
data: {
text: "Text",
},
});
LabelStudio.waitForObjectsReady();
AtTaxonomy.clickTaxonomy();
I.seeElement(AtTaxonomy.locateItemByText("a").at(1));
I.dontSeeElement(AtTaxonomy.locateItemByText("a").at(2));
AtTaxonomy.toggleGroupWithText("a");
I.seeElement(AtTaxonomy.locateItemByText("a1").at(1));
I.dontSeeElement(AtTaxonomy.locateItemByText("a2").at(2));
});
/**
* @TODO: Investigate the way readonly should appear in current state of AnnotationHistory functionality
* as it seems that test uses some outdated knowledge.
*/
Scenario.skip("Taxonomy read only in history", async ({ I, LabelStudio, AtTaxonomy }) => {
const annotationHistory = [
{
id: 19,
annotation_id: 2,
created_by: 1,
action_type: "submitted",
created_at: new Date().toISOString(),
accepted: true,
annotation: 24,
fixed_annotation_history: 35,
previous_annotation_history: 34,
result: [
{
value: {
taxonomy: [["a", "ab"], ["c"]],
},
id: "text_id_1",
from_name: "taxonomy",
to_name: "text",
type: "taxonomy",
origin: "manual",
},
],
},
];
I.amOnPage("/");
LabelStudio.init({
config: `
`,
data: {
text: "Text",
},
params: {
history: annotationHistory,
},
annotations: [{ id: 2, result: [] }],
});
LabelStudio.waitForObjectsReady();
I.click(".lsf-history-item");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.seeSelectedValues(["ab", "c"]);
AtTaxonomy.toggleGroupWithText("a");
AtTaxonomy.seeCheckedItemByText("ab");
AtTaxonomy.seeCheckedItemByText("c");
I.say("Check delete button in selected list");
I.dontSeeElement(AtTaxonomy.locateSelectedByText("ab").withDescendant("input"));
I.say("Try to uncheck items in the tree");
AtTaxonomy.clickItemByText("ab");
AtTaxonomy.clickItemByText("c");
I.say("Check that item was not unchecked");
AtTaxonomy.seeSelectedValues(["ab", "c"]);
AtTaxonomy.seeCheckedItemByText("ab");
AtTaxonomy.seeCheckedItemByText("c");
});
Scenario("Taxonomy readonly result", async ({ I, LabelStudio, AtTaxonomy }) => {
I.amOnPage("/");
LabelStudio.init({
config: `
`,
data: {
text: "Text",
},
annotations: [
{
id: 19,
result: [
{
value: {
taxonomy: [["a", "ab"], ["c"]],
},
id: "text_id_1",
from_name: "taxonomy",
to_name: "text",
type: "taxonomy",
origin: "manual",
readonly: true,
},
],
},
],
});
LabelStudio.waitForObjectsReady();
AtTaxonomy.clickTaxonomy();
AtTaxonomy.seeSelectedValues(["ab", "c"]);
AtTaxonomy.toggleGroupWithText("a");
AtTaxonomy.seeCheckedItemByText("ab");
AtTaxonomy.seeCheckedItemByText("c");
I.say("Check delete button in selected list");
I.dontSeeElement(AtTaxonomy.locateSelectedByText("ab").withDescendant("input"));
I.say("Try to uncheck items in the tree");
AtTaxonomy.clickItemByText("ab");
AtTaxonomy.clickItemByText("c");
I.say("Check that item was not unchecked");
AtTaxonomy.seeSelectedValues(["ab", "c"]);
AtTaxonomy.seeCheckedItemByText("ab");
AtTaxonomy.seeCheckedItemByText("c");
});
Scenario("Taxonomy per region", async ({ I, LabelStudio, AtTaxonomy, AtOutliner }) => {
const config = `
`;
const data = {
text: "Some text etc.",
};
I.amOnPage("/");
LabelStudio.init({
config,
data,
annotations: [
{
id: "test",
result: [
{
value: {
start: 0,
end: 4,
text: "Some",
labels: ["Label1"],
},
id: "test_id_1",
from_name: "label",
to_name: "text",
type: "labels",
origin: "manual",
},
{
value: {
start: 5,
end: 9,
text: "text",
labels: ["Label2"],
},
id: "test_id_2",
from_name: "label",
to_name: "text",
type: "labels",
origin: "manual",
},
{
value: {
start: 10,
end: 14,
text: "text",
labels: ["Label2"],
},
id: "test_id_3",
from_name: "label",
to_name: "text",
type: "labels",
origin: "manual",
},
],
},
],
});
LabelStudio.waitForObjectsReady();
I.say("Should not see perrigion taxonomy without selected region");
AtTaxonomy.dontSeeTaxonomy();
I.say("Should not see perrigion taxonomy without selected region that was set in whenLabelValue");
AtOutliner.clickRegion(1);
AtTaxonomy.dontSeeTaxonomy();
I.say("Should not see perrigion taxonomy when correct region is selected");
AtOutliner.clickRegion(2);
AtTaxonomy.seeTaxonomy();
I.say("Select some values");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.toggleGroupWithText("a");
AtTaxonomy.clickItemByText("ab");
AtTaxonomy.clickItemByText("c");
AtTaxonomy.seeSelectedValues(["ab", "c"]);
I.say("For the other correct region there should not be selected items");
AtOutliner.clickRegion(3);
AtTaxonomy.clickTaxonomy();
AtTaxonomy.dontSeeSelectedValues(["a", "ab", "b", "c"]);
AtTaxonomy.dontSeeCheckedItemByText("ab");
AtTaxonomy.dontSeeCheckedItemByText("c");
const result = await LabelStudio.serialize();
await session("Deserialization", async () => {
I.amOnPage("/");
LabelStudio.init({
config,
data,
annotations: [
{
id: "test",
result,
},
],
});
LabelStudio.waitForObjectsReady();
I.say("Should not see perrigion taxonomy without selected region");
AtTaxonomy.dontSeeTaxonomy();
I.say("Should not see perrigion taxonomy without selected region that was set in whenLabelValue");
AtOutliner.clickRegion(1);
AtTaxonomy.dontSeeTaxonomy();
I.say("For the last correct region there should not be selected items");
AtOutliner.clickRegion(3);
AtTaxonomy.clickTaxonomy();
AtTaxonomy.toggleGroupWithText("a");
AtTaxonomy.dontSeeSelectedValues(["a", "ab", "b", "c"]);
AtTaxonomy.dontSeeCheckedItemByText("ab");
AtTaxonomy.dontSeeCheckedItemByText("c");
I.say("Should see perrigion taxonomy with previously selected items when correct region is selected");
AtOutliner.clickRegion(2);
AtTaxonomy.seeTaxonomy();
AtTaxonomy.clickTaxonomy();
AtTaxonomy.seeSelectedValues(["ab", "c"]);
AtTaxonomy.seeCheckedItemByText("ab");
AtTaxonomy.seeCheckedItemByText("c");
});
});
Scenario("Aliases in Taxonomy", async ({ I, LabelStudio, AtTaxonomy }) => {
const createConfig = ({ showFullPath = false } = {}) => `
`;
I.amOnPage("/");
LabelStudio.init({
config: createConfig(),
data: {
text: "A text",
},
});
LabelStudio.waitForObjectsReady();
I.say("Should see values of choices and work with them");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.toggleGroupWithText("One to three");
AtTaxonomy.toggleGroupWithText("Four to seven");
AtTaxonomy.seeItemByText("Two");
AtTaxonomy.seeItemByText("Five");
AtTaxonomy.clickItemByText("Three");
AtTaxonomy.clickItemByText("Seven");
AtTaxonomy.seeSelectedValues(["Three", "Seven"]);
I.say("Should get aliases as results");
const result = await LabelStudio.serialize();
assert.deepStrictEqual(result[0].value.taxonomy, [
["1-3", "3"],
["4-7", "7"],
]);
await session("Deserialization", async () => {
I.amOnPage("/");
LabelStudio.init({
config: createConfig(),
data: {
text: "A text",
},
annotations: [
{
id: "test",
result,
},
],
});
LabelStudio.waitForObjectsReady();
I.say("Should see the same result");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.toggleGroupWithText("One to three");
AtTaxonomy.toggleGroupWithText("Four to seven");
AtTaxonomy.seeCheckedItemByText("Three");
AtTaxonomy.seeCheckedItemByText("Seven");
AtTaxonomy.seeSelectedValues(["Three", "Seven"]);
});
await session("ShowFullPath", async () => {
//showFullPath
I.amOnPage("/");
LabelStudio.init({
config: createConfig({ showFullPath: true }),
data: {
text: "A text",
},
annotations: [
{
id: "test",
result,
},
],
});
LabelStudio.waitForObjectsReady();
I.say("Should see the full paths");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.seeSelectedValues(["One to three / Three", "Four to seven / Seven"]);
});
});
Scenario("Taxonomy dynamic items", async ({ I, LabelStudio, AtTaxonomy }) => {
const data = {
text: "A text",
options: [
{
value: "Items",
children: [
{
value: "Item 1",
},
{
value: "Item 2",
},
],
},
{
value: "Options",
children: [
{
value: "Option 1",
},
{
value: "Option 2",
},
{
value: "Option 3",
},
],
},
],
};
I.amOnPage("/");
LabelStudio.init({
config: `
`,
data,
});
LabelStudio.waitForObjectsReady();
I.say("Should see items");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.toggleGroupWithText("Items");
AtTaxonomy.toggleGroupWithText("Options");
AtTaxonomy.seeItemByText("Item 2");
AtTaxonomy.seeItemByText("Option 2");
I.say("Select some dynamic options");
AtTaxonomy.clickItemByText("Item 1");
AtTaxonomy.clickItemByText("Option 3");
I.say("Check result");
AtTaxonomy.seeCheckedItemByText("Item 1");
AtTaxonomy.seeCheckedItemByText("Option 3");
AtTaxonomy.seeSelectedValues(["Item 1", "Option 3"]);
const result = await LabelStudio.serialize();
assert.deepStrictEqual(result[0].value.taxonomy, [
["Items", "Item 1"],
["Options", "Option 3"],
]);
await session("Deserialization", async () => {
I.amOnPage("/");
LabelStudio.init({
config: `
`,
data,
annotations: [
{
id: "test",
result,
},
],
});
LabelStudio.waitForObjectsReady();
I.say("Should see same items");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.toggleGroupWithText("Items");
AtTaxonomy.toggleGroupWithText("Options");
AtTaxonomy.seeItemByText("Item 2");
AtTaxonomy.seeItemByText("Option 2");
AtTaxonomy.seeCheckedItemByText("Item 1");
AtTaxonomy.seeCheckedItemByText("Option 3");
AtTaxonomy.seeSelectedValues(["Item 1", "Option 3"]);
I.say("And the static one");
AtTaxonomy.seeItemByText("Static element");
});
});
Scenario("Taxonomy maxUsages", async ({ I, LabelStudio, AtTaxonomy }) => {
const config = `
`;
I.amOnPage("/");
LabelStudio.init({
config,
data: {
text: "A text",
},
});
LabelStudio.waitForObjectsReady();
AtTaxonomy.clickTaxonomy();
AtTaxonomy.toggleGroupWithText("1");
AtTaxonomy.toggleGroupWithText("2");
I.say("Try to select a couple of items");
AtTaxonomy.clickItemByText("One");
AtTaxonomy.clickItemByText("Two");
AtTaxonomy.clickItemByText("a");
AtTaxonomy.clickItemByText("b");
I.say("There should be only one item selected");
AtTaxonomy.seeCheckedItemByText("One");
AtTaxonomy.seeSelectedValues("One");
AtTaxonomy.dontSeeCheckedItemByText("Two");
AtTaxonomy.dontSeeCheckedItemByText("a");
AtTaxonomy.dontSeeCheckedItemByText("b");
AtTaxonomy.dontSeeSelectedValues(["Two", "a", "b"]);
I.say("Check that we can change our decision");
AtTaxonomy.clickItemByText("One");
AtTaxonomy.clickItemByText("Two");
AtTaxonomy.seeCheckedItemByText("Two");
AtTaxonomy.seeSelectedValues("Two");
AtTaxonomy.dontSeeCheckedItemByText("One");
AtTaxonomy.dontSeeSelectedValues("One");
});
Scenario("Taxonomy visibleWhen", async ({ I, LabelStudio, AtTaxonomy }) => {
const createConfig = ({ showFullPath = false, visibleWhen = "choice-selected", whenChoiceValue = "Four" } = {}) => `
`;
I.amOnPage("/");
LabelStudio.init({
config: createConfig(),
data: {
text: "A text",
},
});
LabelStudio.waitForObjectsReady();
I.say("Should see values of choices and work with them");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.toggleGroupWithText("One to three");
AtTaxonomy.toggleGroupWithText("Four to seven");
AtTaxonomy.seeItemByText("Two");
AtTaxonomy.seeItemByText("Five");
AtTaxonomy.clickItemByText("Three");
AtTaxonomy.clickItemByText("Four");
AtTaxonomy.seeSelectedValues(["Three", "Four"]);
AtTaxonomy.clickTaxonomy();
I.click("Eight"); // click on the choice
I.seeElement(".ant-checkbox-checked [name='Eight']");
I.say("Should get results for taxonomy and choices");
let result = await LabelStudio.serialize();
assert.deepStrictEqual(result[0].value.taxonomy, [
["One to three", "Three"],
["Four to seven", "Four"],
]);
assert.deepStrictEqual(result[1].value.choices, ["Eight"]);
I.say("Should get results for only taxonomy when visibleWhen is not met");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.clickItemByText("Four");
AtTaxonomy.clickTaxonomy();
I.dontSeeElement(".ant-checkbox-checked [name='Eight']");
result = await LabelStudio.serialize();
assert.deepStrictEqual(result[0].value.taxonomy, [["One to three", "Three"]]);
assert.deepStrictEqual(result?.[1]?.value?.choices, undefined);
I.say("Should get results for taxonomy and choices when visibleWhen is met");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.clickItemByText("Four");
AtTaxonomy.clickTaxonomy();
I.seeElement(".ant-checkbox-checked [name='Eight']");
result = await LabelStudio.serialize();
assert.deepStrictEqual(result[0].value.taxonomy, [
["One to three", "Three"],
["Four to seven", "Four"],
]);
assert.deepStrictEqual(result[1].value.choices, ["Eight"]);
await session("Deserialization", async () => {
I.amOnPage("/");
LabelStudio.init({
config: createConfig(),
data: {
text: "A text",
},
annotations: [
{
id: "test",
result,
},
],
});
LabelStudio.waitForObjectsReady();
I.say("Should see the same result");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.toggleGroupWithText("One to three");
AtTaxonomy.toggleGroupWithText("Four to seven");
AtTaxonomy.seeCheckedItemByText("Three");
AtTaxonomy.seeCheckedItemByText("Four");
AtTaxonomy.seeSelectedValues(["Three", "Four"]);
I.seeElement(".ant-checkbox-checked [name='Eight']");
});
await session("ShowFullPath", async () => {
//showFullPath
I.amOnPage("/");
LabelStudio.init({
config: createConfig({ showFullPath: true }),
data: {
text: "A text",
},
annotations: [
{
id: "test",
result,
},
],
});
LabelStudio.waitForObjectsReady();
I.say("Should see the full paths");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.seeSelectedValues(["One to three / Three", "Four to seven / Four"]);
I.seeElement(".ant-checkbox-checked [name='Eight']");
});
});
Scenario("Taxonomy visibleWhen with aliases", async ({ I, LabelStudio, AtTaxonomy }) => {
const createConfig = ({ showFullPath = false, visibleWhen = "choice-selected", whenChoiceValue = "Four" } = {}) => `
`;
I.amOnPage("/");
LabelStudio.init({
config: createConfig(),
data: {
text: "A text",
},
});
LabelStudio.waitForObjectsReady();
I.say("Should see values of choices and work with them");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.toggleGroupWithText("One to three");
AtTaxonomy.toggleGroupWithText("Four to seven");
AtTaxonomy.seeItemByText("Two");
AtTaxonomy.seeItemByText("Five");
AtTaxonomy.clickItemByText("Three");
AtTaxonomy.clickItemByText("Four");
AtTaxonomy.seeSelectedValues(["Three", "Four"]);
AtTaxonomy.clickTaxonomy();
I.click("Eight"); // click on the choice
I.seeElement(".ant-checkbox-checked [name='Eight']");
I.say("Should get aliases as results");
let result = await LabelStudio.serialize();
assert.deepStrictEqual(result[0].value.taxonomy, [
["1-3", "3"],
["4-7", "4"],
]);
assert.deepStrictEqual(result[1].value.choices, ["8"]);
I.say("Should get alias results for only taxonomy when visibleWhen is not met");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.clickItemByText("Four");
AtTaxonomy.clickTaxonomy();
I.dontSeeElement(".ant-checkbox-checked [name='Eight']");
result = await LabelStudio.serialize();
assert.deepStrictEqual(result[0].value.taxonomy, [["1-3", "3"]]);
assert.deepStrictEqual(result?.[1]?.value?.choices, undefined);
I.say("Should get alias results for taxonomy and choices when visibleWhen is met");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.clickItemByText("Four");
AtTaxonomy.clickTaxonomy();
I.seeElement(".ant-checkbox-checked [name='Eight']");
result = await LabelStudio.serialize();
assert.deepStrictEqual(result[0].value.taxonomy, [
["1-3", "3"],
["4-7", "4"],
]);
assert.deepStrictEqual(result[1].value.choices, ["8"]);
await session("Deserialization", async () => {
I.amOnPage("/");
LabelStudio.init({
config: createConfig(),
data: {
text: "A text",
},
annotations: [
{
id: "test",
result,
},
],
});
LabelStudio.waitForObjectsReady();
I.say("Should see the same result");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.toggleGroupWithText("One to three");
AtTaxonomy.toggleGroupWithText("Four to seven");
AtTaxonomy.seeCheckedItemByText("Three");
AtTaxonomy.seeCheckedItemByText("Four");
AtTaxonomy.seeSelectedValues(["Three", "Four"]);
I.seeElement(".ant-checkbox-checked [name='Eight']");
});
await session("ShowFullPath", async () => {
//showFullPath
I.amOnPage("/");
LabelStudio.init({
config: createConfig({ showFullPath: true }),
data: {
text: "A text",
},
annotations: [
{
id: "test",
result,
},
],
});
LabelStudio.waitForObjectsReady();
I.say("Should see the full paths");
AtTaxonomy.clickTaxonomy();
AtTaxonomy.seeSelectedValues(["One to three / Three", "Four to seven / Four"]);
I.seeElement(".ant-checkbox-checked [name='Eight']");
});
});