discourse/plugins/discourse-local-dates/test/javascripts/acceptance/local-dates-composer-test.js
Renato Atilio 85691a7f31
DEV: refactor composer-editor/d-editor, a little more (#29973)
Adds setupEditor to ComposerEditor so it can setup/destroy events when the underlying editorComponent is switched.

Moves putCursorAtEnd uses (which implementation is textarea-specific) to TextareaTextManipulation.

Moves insertCurrentTime and a corresponding test, which is discourse-local-dates specific, to the plugin.

Moves applyList and formatCode from DEditor to the TextareaTextManipulation.

Moves DEditor._applySurround to TextareaTextManipulation.applySurroundSelection

Avoids resetting the textarea value on applyList and formatCode, keeping the undo history.
2024-12-02 18:24:14 -03:00

155 lines
5.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { click, fillIn, triggerKeyEvent, visit } from "@ember/test-helpers";
import { test } from "qunit";
import {
acceptance,
metaModifier,
} from "discourse/tests/helpers/qunit-helpers";
import selectKit from "discourse/tests/helpers/select-kit-helper";
acceptance("Local Dates - composer", function (needs) {
needs.user();
needs.settings({
discourse_local_dates_enabled: true,
discourse_local_dates_default_formats: "LLL|LTS|LL|LLLL",
});
test("composer bbcode", async function (assert) {
await visit("/");
await click("#create-topic");
const categoryChooser = selectKit(".category-chooser");
await categoryChooser.expand();
await categoryChooser.selectRowByValue(2);
await fillIn(
".d-editor-input",
'[date=2017-10-23 time=01:30:00 displayedTimezone="America/Chicago" format="LLLL" calendar="off" recurring="1.weeks" timezone=" Asia/Calcutta" timezones="Europe/Paris|America/Los_Angeles"]'
);
assert
.dom(".d-editor-preview .discourse-local-date.cooked-date")
.hasAttribute("data-date", "2017-10-23", "has the correct date");
assert
.dom(".d-editor-preview .discourse-local-date.cooked-date")
.hasAttribute("data-time", "01:30:00", "has the correct time");
assert
.dom(".d-editor-preview .discourse-local-date.cooked-date")
.hasAttribute(
"data-displayed-timezone",
"America/Chicago",
"has the correct displayed timezone"
);
assert
.dom(".d-editor-preview .discourse-local-date.cooked-date")
.hasAttribute("data-format", "LLLL", "has the correct format");
assert
.dom(".d-editor-preview .discourse-local-date.cooked-date")
.hasAttribute(
"data-timezones",
"Europe/Paris|America/Los_Angeles",
"has the correct timezones"
);
assert
.dom(".d-editor-preview .discourse-local-date.cooked-date")
.hasAttribute("data-recurring", "1.weeks", "has the correct recurring");
assert
.dom(".d-editor-preview .discourse-local-date.cooked-date")
.hasAttribute(
"data-timezone",
"Asia/Calcutta",
"has the correct timezone"
);
await fillIn(
".d-editor-input",
'[date=2017-10-24 format="LL" timezone="Asia/Calcutta" timezones="Europe/Paris|America/Los_Angeles"]'
);
assert
.dom(".d-editor-preview .discourse-local-date.cooked-date")
.hasAttribute("data-date", "2017-10-24", "has the correct date");
assert
.dom(".d-editor-preview .discourse-local-date.cooked-date")
.doesNotHaveAttribute("data-time", "doesnt have time");
});
test("date modal", async function (assert) {
await visit("/");
await click("#create-topic");
const categoryChooser = selectKit(".category-chooser");
await categoryChooser.expand();
await categoryChooser.selectRowByValue(2);
await click(".d-editor-button-bar .local-dates");
const timezoneChooser = selectKit(".timezone-input");
await timezoneChooser.expand();
await timezoneChooser.selectRowByValue("Asia/Macau");
assert
.dom(".preview .discourse-local-date")
.includesText("Macau", "outputs a preview date in selected timezone");
});
test("date modal - controls", async function (assert) {
await visit("/");
await click("#create-topic");
const categoryChooser = selectKit(".category-chooser");
await categoryChooser.expand();
await categoryChooser.selectRowByValue(2);
await click(".d-editor-button-bar .local-dates");
await click('.pika-table td[data-day="5"] > .pika-button');
assert
.dom("#from-date-time")
.includesText("5,", "selected FROM date works");
await click(".date-time-control.to .date-time");
assert
.dom(".pika-table .is-disabled")
.exists({ count: 4 }, "date just before selected FROM date is disabled");
await click('.pika-table td[data-day="10"] > .pika-button');
assert
.dom(".date-time-control.to button")
.includesText("10,", "selected TO date works");
assert
.dom(".pika-table .is-selected")
.hasText("10", "selected date is the 10th");
await click(".delete-to-date");
assert
.dom(".date-time-control.to.is-selected")
.doesNotExist("deleting selected TO date works");
await click(".advanced-mode-btn");
assert.dom("input.format-input").hasValue("");
await click("ul.formats a.moment-format");
assert.dom("input.format-input").hasValue("LLL");
});
test("composer insert current time shortcut", async function (assert) {
await visit("/t/internationalization-localization/280");
await click("#topic-footer-buttons .btn.create");
await fillIn(".d-editor-input", "and the time now is: ");
await triggerKeyEvent(".d-editor-input", "keydown", ".", {
...metaModifier,
shiftKey: true,
});
const date = moment().format("YYYY-MM-DD");
assert
.dom("#reply-control .d-editor-input")
.hasValue(
new RegExp(`and the time now is: \\[date=${date}`),
"it adds the current date"
);
});
});