/* global QUnit, SelectFilter */
"use strict";
QUnit.module("admin.SelectFilter2");
QUnit.test("init", function (assert) {
const $ = django.jQuery;
$('
').appendTo("#qunit-fixture");
$('').appendTo("#test");
$('This is helpful.
').appendTo("#test");
$('').appendTo(
"#test",
);
SelectFilter.init("id", "things", 0);
assert.deepEqual(
Array.from($("#test")[0].children).map((child) => child.tagName),
["LABEL", "DIV", "DIV"],
);
assert.equal(
$(".helptext")[0].nextSibling.getAttribute("class"),
"selector",
);
assert.equal(
$(".selector-available label").text().trim(),
"Available things",
);
assert.equal($(".selector-available label").attr("id"), "id_from_label");
assert.equal($(".selector-chosen label").text().trim(), "Chosen things");
assert.equal($(".selector-chosen label").attr("id"), "id_to_label");
assert.equal($(".selector-chosen select")[0].getAttribute("multiple"), "");
assert.equal($(".selector-chooseall").text(), "Choose all things");
assert.equal($(".selector-chooseall").prop("tagName"), "BUTTON");
assert.equal($(".selector-add").text(), "Choose selected things");
assert.equal($(".selector-add").prop("tagName"), "BUTTON");
assert.equal($(".selector-remove").text(), "Remove selected things");
assert.equal($(".selector-remove").prop("tagName"), "BUTTON");
assert.equal($(".selector-clearall").text(), "Remove all things");
assert.equal($(".selector-clearall").prop("tagName"), "BUTTON");
assert.equal(
$(".selector-available .filtered").attr("aria-labelledby"),
"id_from_label",
);
assert.equal(
$(".selector-available .filtered").attr("aria-describedby"),
"id_helptext id_choose_helptext",
);
assert.equal(
$(".selector-available .selector-available-title label").text(),
"Available things ",
);
assert.equal(
$(".selector-available .selector-available-title .helptext").text(),
'Choose things by selecting them and then select the "Choose" arrow button.',
);
assert.equal(
$(".selector-chosen .filtered").attr("aria-labelledby"),
"id_to_label",
);
assert.equal(
$(".selector-chosen .filtered").attr("aria-describedby"),
"id_helptext id_remove_helptext",
);
assert.equal(
$(".selector-chosen .selector-chosen-title label").text(),
"Chosen things ",
);
assert.equal(
$(".selector-chosen .selector-chosen-title .helptext").text(),
'Remove things by selecting them and then select the "Remove" arrow button.',
);
assert.equal(
$(".selector-filter label .help-tooltip")[0].getAttribute("aria-label"),
"Type into this box to filter down the list of available things.",
);
assert.equal(
$(".selector-filter label .help-tooltip")[1].getAttribute("aria-label"),
"Type into this box to filter down the list of selected things.",
);
assert.equal($('#test button:not([type="button"])').length, 0);
});
QUnit.test("filtering available options", function (assert) {
const $ = django.jQuery;
$('').appendTo(
"#qunit-fixture",
);
$('').appendTo("#select");
$('').appendTo("#select");
$('').appendTo("#select");
SelectFilter.init("select", "items", 0);
assert.equal($("#select_from option").length, 3);
assert.equal($("#select_to option").length, 0);
const done = assert.async();
const search_term = "r";
const event = new KeyboardEvent("keyup", { key: search_term });
$("#select_input").val(search_term);
SelectFilter.filter_key_up(event, "select", "_from");
setTimeout(() => {
assert.equal($("#select_from option").length, 2);
assert.equal($("#select_to option").length, 0);
assert.equal($("#select_from option")[0].value, "1");
assert.equal($("#select_from option")[1].value, "3");
done();
});
});
QUnit.test("filtering selected options", function (assert) {
const $ = django.jQuery;
$('').appendTo(
"#qunit-fixture",
);
$('').appendTo(
"#select",
);
$('').appendTo(
"#select",
);
$('').appendTo(
"#select",
);
SelectFilter.init("select", "items", 0);
assert.equal($("#select_from option").length, 0);
assert.equal($("#select_to option").length, 3);
const done = assert.async();
const search_term = "r";
const event = new KeyboardEvent("keyup", { key: search_term });
$("#select_selected_input").val(search_term);
SelectFilter.filter_key_up(event, "select", "_to", "_selected_input");
setTimeout(() => {
assert.equal($("#select_from option").length, 0);
assert.equal($("#select_to option").length, 2);
assert.equal($("#select_to option")[0].value, "1");
assert.equal($("#select_to option")[1].value, "3");
done();
});
});
QUnit.test("filtering available options to nothing", function (assert) {
const $ = django.jQuery;
$('').appendTo(
"#qunit-fixture",
);
$('').appendTo("#select");
$('').appendTo("#select");
$('').appendTo("#select");
SelectFilter.init("select", "items", 0);
assert.equal($("#select_from option").length, 3);
assert.equal($("#select_to option").length, 0);
const done = assert.async();
const search_term = "x";
const event = new KeyboardEvent("keyup", { key: search_term });
$("#select_input").val(search_term);
SelectFilter.filter_key_up(event, "select", "_from");
setTimeout(() => {
assert.equal($("#select_from option").length, 0);
assert.equal($("#select_to option").length, 0);
done();
});
});
QUnit.test("filtering selected options to nothing", function (assert) {
const $ = django.jQuery;
$('').appendTo(
"#qunit-fixture",
);
$('').appendTo(
"#select",
);
$('').appendTo(
"#select",
);
$('').appendTo(
"#select",
);
SelectFilter.init("select", "items", 0);
assert.equal($("#select_from option").length, 0);
assert.equal($("#select_to option").length, 3);
const done = assert.async();
const search_term = "x";
const event = new KeyboardEvent("keyup", { key: search_term });
$("#select_selected_input").val(search_term);
SelectFilter.filter_key_up(event, "select", "_to", "_selected_input");
setTimeout(() => {
assert.equal($("#select_from option").length, 0);
assert.equal($("#select_to option").length, 0);
done();
});
});
QUnit.test("selecting option", function (assert) {
const $ = django.jQuery;
$('').appendTo(
"#qunit-fixture",
);
$('').appendTo("#select");
$('').appendTo("#select");
$('').appendTo("#select");
SelectFilter.init("select", "items", 0);
assert.equal($("#select_from option").length, 3);
assert.equal($("#select_to option").length, 0);
// move to the right
const done = assert.async();
$("#select_from")[0].selectedIndex = 0;
const event = new KeyboardEvent("keydown", { keyCode: 39, charCode: 39 });
SelectFilter.filter_key_down(event, "select", "_from", "_to");
setTimeout(() => {
assert.equal($("#select_from option").length, 2);
assert.equal($("#select_to option").length, 1);
assert.equal($("#select_to option")[0].value, "1");
done();
});
});
QUnit.test("deselecting option", function (assert) {
const $ = django.jQuery;
$('').appendTo(
"#qunit-fixture",
);
$('').appendTo(
"#select",
);
$('').appendTo("#select");
$('').appendTo("#select");
SelectFilter.init("select", "items", 0);
assert.equal($("#select_from option").length, 2);
assert.equal($("#select_to option").length, 1);
assert.equal($("#select_to option")[0].value, "1");
// move back to the left
const done_left = assert.async();
$("#select_to")[0].selectedIndex = 0;
const event_left = new KeyboardEvent("keydown", {
keyCode: 37,
charCode: 37,
});
SelectFilter.filter_key_down(event_left, "select", "_to", "_from");
setTimeout(() => {
assert.equal($("#select_from option").length, 3);
assert.equal($("#select_to option").length, 0);
done_left();
});
});