summaryrefslogtreecommitdiff
path: root/js_tests/admin/DateTimeShortcuts.test.js
blob: 28d07fb918a321447c5a6c64bac81b4b93df39be (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
/* global QUnit, DateTimeShortcuts */
"use strict";

QUnit.module("admin.DateTimeShortcuts", {
    afterEach: function () {
        const $ = django.jQuery;
        $("body")
            .removeAttr("data-admin-server-timezone")
            .removeAttr("data-admin-utc-offset");
        $(".timezonewarning").remove();
    },
});

QUnit.test("init", function (assert) {
    const $ = django.jQuery;

    const dateField = $(
        '<input type="text" class="vDateField" value="2015-03-16"><br>',
    );
    $("#qunit-fixture").append(dateField);

    DateTimeShortcuts.init();

    const shortcuts = $(".datetimeshortcuts");
    assert.equal(shortcuts.length, 1);
    assert.equal(shortcuts.find("a:first").text(), "Today");
    assert.equal(shortcuts.find("a:last .date-icon").length, 1);

    // To prevent incorrect timezone warnings on date/time widgets, timezoneOffset
    // should be 0 when a timezone offset isn't set in the HTML body attribute.
    assert.equal(DateTimeShortcuts.timezoneOffset, 0);
});

QUnit.test("custom time shortcuts", function (assert) {
    const $ = django.jQuery;
    const timeField = $(
        '<input type="text" name="time_test" class="vTimeField">',
    );
    $("#qunit-fixture").append(timeField);
    DateTimeShortcuts.clockHours.time_test = [["3 a.m.", 3]];
    DateTimeShortcuts.init();
    assert.equal($(".clockbox").find("a").first().text(), "3 a.m.");
});

QUnit.test("time zone offset warning - single field", function (assert) {
    const $ = django.jQuery;
    const savedOffset = $("body").attr("data-admin-utc-offset");
    // Single date or time field.
    const timeField = $(
        '<input id="id_updated_at" type="text" name="updated_at" class="vTimeField">',
    );
    $("#qunit-fixture").append(timeField);
    $("body").attr(
        "data-admin-utc-offset",
        new Date().getTimezoneOffset() * -60 + 3600,
    );
    $("body").attr("data-admin-server-timezone", "America/Chicago");
    DateTimeShortcuts.init();
    $("body").attr("data-admin-utc-offset", savedOffset);
    assert.equal(
        $(".timezonewarning").text(),
        "Note: Enter times in the America/Chicago timezone. " +
            "(You are 1 hour behind.)",
    );
    assert.equal(
        $(".timezonewarning").attr("id"),
        "id_updated_at_timezone_warning_helptext",
    );
});

QUnit.test("time zone offset warning - date and time field", function (assert) {
    const $ = django.jQuery;
    const savedOffset = $("body").attr("data-admin-utc-offset");
    // DateTimeField with fieldset containing date and time inputs.
    const dateTimeField =
        '<p class="datetime">' +
        '<input id="id_updated_at_0" type="text" name="updated_at_0" class="vDateField">' +
        '<input id="id_updated_at_1" type="text" name="updated_at_1" class="vTimeField">' +
        "</p>";
    $("#qunit-fixture").append($(dateTimeField));
    $("body").attr(
        "data-admin-utc-offset",
        new Date().getTimezoneOffset() * -60 + 3600,
    );
    DateTimeShortcuts.init();
    $("body").attr("data-admin-utc-offset", savedOffset);
    assert.equal(
        $(".timezonewarning").text(),
        "Note: Enter times in the server timezone. (You are 1 hour behind.)",
    );
    assert.equal(
        $(".timezonewarning").attr("id"),
        "id_updated_at_timezone_warning_helptext",
    );
});