const assert = require("assert");
Feature("Nested choices");
Scenario("Switching states at nested choices", async ({ I, LabelStudio }) => {
const params = {
config: `
`,
data: {
text: "Some text",
},
annotations: [
{
id: "test",
result: [],
},
],
};
I.amOnPage("/");
LabelStudio.init(params);
{
// Select one choice
I.click("Option 1.1");
const result = await LabelStudio.serialize();
// Should be checked only one item
assert.deepStrictEqual(result[0].value.choices.length, 1);
assert.deepStrictEqual(result[0].value.choices, [["Header 1", "Option 1.1"]]);
// There might be checkbox with indeterminate state
I.seeElement(".ant-checkbox-indeterminate [name='Header 1']");
}
{
// Select a couple of choices by selecting the parent choice
I.click("Header 1");
const result = await LabelStudio.serialize();
// Should be checked three items
assert.deepStrictEqual(result[0].value.choices.length, 3);
assert.deepStrictEqual(result[0].value.choices, [
["Header 1"],
["Header 1", "Option 1.1"],
["Header 1", "Option 1.2"],
]);
I.dontSeeElement(".ant-checkbox-indeterminate [name='Header 1']");
}
{
// Unselect a couple of choices by unselecting the parent choice
I.click("Header 1");
const result = await LabelStudio.serialize();
// Should be checked three items
assert.deepStrictEqual(result.length, 0);
}
});
Scenario("Nested choices states from the annotation", async ({ I, LabelStudio }) => {
const params = {
config: `
`,
data: {
text: "Some text",
},
};
I.amOnPage("/");
// Load annotation with each type of selection for branches (fully checked, fully unchecked, partly checked)
LabelStudio.init({
...params,
annotations: [
{
id: "test",
result: [
{
id: "choices_test",
from_name: "choices",
to_name: "text",
type: "choices",
value: {
choices: [
["Header 1"],
["Header 1", "Option 1.1"],
["Header 1", "Option 1.2"],
["Header 3", "Option 3.1"],
],
},
},
],
},
],
});
// Check loaded results:
// Fully checked branch of choices
I.dontSeeElement(".ant-checkbox-indeterminate [name='Header 1']");
I.seeElement(".ant-checkbox-checked [name='Header 1']");
I.seeElement(".ant-checkbox-checked [name='Option 1.1']");
I.seeElement(".ant-checkbox-checked [name='Option 1.2']");
// Fully unchecked branch of choices
I.dontSeeElement(".ant-checkbox-indeterminate [name='Header 2']");
I.dontSeeElement(".ant-checkbox-checked [name='Header 2']");
I.dontSeeElement(".ant-checkbox-checked [name='Option 2.1']");
I.dontSeeElement(".ant-checkbox-checked [name='Option 2.2']");
// Partly checked branch of choices
I.seeElement(".ant-checkbox-indeterminate [name='Header 3']");
I.dontSeeElement(".ant-checkbox-checked [name='Header 3']");
I.seeElement(".ant-checkbox-checked [name='Option 3.1']");
I.dontSeeElement(".ant-checkbox-checked [name='Option 3.2']");
const result = await LabelStudio.serialize();
// Should be checked only one item
assert.deepStrictEqual(result[0].value.choices.length, 4);
assert.deepStrictEqual(result[0].value.choices, [
["Header 1"],
["Header 1", "Option 1.1"],
["Header 1", "Option 1.2"],
["Header 3", "Option 3.1"],
]);
});