diff --git a/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js b/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js
index 74d17bfc3e..be37fda973 100644
--- a/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js
+++ b/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js
@@ -55,11 +55,11 @@
if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) {
elem.value += ',' + chosenId;
} else {
- document.getElementById(name).value = chosenId;
+ elem.value = chosenId;
}
- const index = relatedWindows.indexOf(win);
+ const index = window.relatedWindows.indexOf(win);
if (index > -1) {
- relatedWindows.splice(index, 1);
+ window.relatedWindows.splice(index, 1);
}
win.close();
}
diff --git a/js_tests/admin/RelatedObjectLookups.test.js b/js_tests/admin/RelatedObjectLookups.test.js
new file mode 100644
index 0000000000..64433cb623
--- /dev/null
+++ b/js_tests/admin/RelatedObjectLookups.test.js
@@ -0,0 +1,38 @@
+/* global QUnit, RelatedObjectLookups */
+'use strict';
+
+QUnit.module('admin.RelatedObjectLookups', {
+ beforeEach: function() {
+ const $ = django.jQuery;
+ $('#qunit-fixture').append(`
+
+
+ `);
+ window.relatedWindows = window.relatedWindows || [];
+ }
+});
+
+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');
+});
diff --git a/js_tests/tests.html b/js_tests/tests.html
index 011998e5a7..87e347cc0c 100644
--- a/js_tests/tests.html
+++ b/js_tests/tests.html
@@ -125,6 +125,7 @@
+