}
ui.getClassifiers = function () {
- const server = common.getServer();
-
if (!common.read_only) {
- const hadOptions = $("#classifier").children().length > 0; // remember pre-state
-
- const sel = $("#classifier").empty().append($("<option>", {value: "", text: "All classifiers"}));
+ const server = common.getServer();
+ const sel = $("#classifier");
+ const hadOptions = sel.children().length > 0; // remember pre-state
// Skip request only if we already had options populated for this config/server
if (shouldSkipRequest(server, "classifiers") && hadOptions) return;
+ sel.empty().append($("<option>", {value: "", text: "All classifiers"}));
+
common.query("bayes/classifiers", {
success: function (data) {
data[0].data.forEach((c) => sel.append($("<option>", {value: c, text: c})));
const optionCount = await classifier.locator("option").count();
expect(optionCount).toBeGreaterThan(1);
+ // Verify that a subsequent getClassifiers call under the same config is skipped
+ let reqCount = 0;
+ function reqListener(r) {
+ if (r.url().includes("/bayes/classifiers")) {
+ reqCount += 1;
+ }
+ }
+ page2.on("request", reqListener);
+
+ await page2.evaluate(() => new Promise((resolve) => {
+ // AMD require is available in the UI
+ // eslint-disable-next-line no-undef
+ require(["app/upload"], (u) => {
+ u.getClassifiers();
+ resolve();
+ });
+ }));
+
+ await page2.waitForTimeout(250);
+ page2.off("request", reqListener);
+ expect(reqCount).toBe(0);
+
+ // Options must remain populated (not reset to just default)
+ const finalCount = await classifier.locator("option").count();
+ expect(finalCount).toBeGreaterThan(1);
+
await page2.close();
await context.close();
});