1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
/* global QUnit, RelatedObjectLookups */
"use strict";
QUnit.module("admin.RelatedObjectLookups", {
beforeEach: function () {
const $ = django.jQuery;
$("#qunit-fixture").append(`
<input type="text" id="test_id" name="test" />
<input type="text" id="many_test_id" name="many_test" class="vManyToManyRawIdAdminField" />
`);
},
});
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");
},
);
|