/* global QUnit, RelatedObjectLookups */
"use strict";
QUnit.module("admin.RelatedObjectLookups", {
beforeEach: function () {
const $ = django.jQuery;
$("#qunit-fixture").append(`
`);
},
});
QUnit.test("dismissRelatedLookupPopup closes popup window", function (assert) {
const testId = "test_id";
let windowClosed = false;
const mockWin = {
name: testId,
close: function () {
windowClosed = true;
},
};
window.dismissRelatedLookupPopup(mockWin, "123");
assert.true(windowClosed, "Popup window should be closed");
});
QUnit.test(
"dismissRelatedLookupPopup removes window from relatedWindows array",
function (assert) {
const testId = "test_id";
const mockWin = {
name: testId,
close: function () {},
};
window.relatedWindows.push(mockWin);
assert.equal(
window.relatedWindows.indexOf(mockWin),
0,
"Window should be in relatedWindows array",
);
window.dismissRelatedLookupPopup(mockWin, "123");
assert.equal(
window.relatedWindows.indexOf(mockWin),
-1,
"Window should be removed from relatedWindows array",
);
},
);
QUnit.test(
"dismissRelatedLookupPopup triggers change event for single value field",
function (assert) {
assert.timeout(1000);
const done = assert.async();
const $ = django.jQuery;
const testId = "test_id";
const newValue = "123";
const mockWin = {
name: testId,
close: function () {},
};
let changeTriggered = false;
$("#test_id").on("change", function () {
changeTriggered = true;
assert.equal(this.value, newValue, "Value should be updated");
done();
});
window.dismissRelatedLookupPopup(mockWin, newValue);
assert.true(changeTriggered, "Change event should be triggered");
},
);
QUnit.test(
"dismissRelatedLookupPopup triggers change event for many-to-many field",
function (assert) {
assert.timeout(1000);
const $ = django.jQuery;
const testId = "many_test_id";
const existingValue = "1,2";
const newValue = "3";
$("#many_test_id").val(existingValue);
const mockWin = {
name: testId,
close: function () {},
};
let changeTriggered = false;
$("#many_test_id").on("change", function () {
changeTriggered = true;
assert.equal(
this.value,
existingValue + "," + newValue,
"Value should be appended for many-to-many fields",
);
});
window.dismissRelatedLookupPopup(mockWin, newValue);
assert.true(changeTriggered, "Change event should be triggered");
},
);