summaryrefslogtreecommitdiff
path: root/js_tests/admin/RelatedObjectLookups.test.js
blob: b7df8f181ffba88d3018255e4c2491293fad3bcc (plain)
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");
    },
);