David Taylor 837bd5a6e5
FIX: Fix local-dates in non-post contexts, and in long topics (#14565)
- Stop looking up the topic title from the DOM. On long topics, the topic title may not be present. Instead, we can store the topic title in a data-title attribute during decorateCookedElement, and then access it later. This approach would also allow us to add customize titles per-local-date in future. If there is no topic title available (e.g. when local dates are used elsewhere in the UI), we use the site name to build a sensible default

- Don't require a postId for creating calendar events. We don't have postIds in non-post contexts. At the moment, the 'download ICS' function will fail without a valid postId, so that will need to be fixed in a future commit.
2021-10-08 20:22:52 +01:00

69 lines
2.2 KiB
JavaScript

import {
acceptance,
exists,
query,
} from "discourse/tests/helpers/qunit-helpers";
import { click, visit } from "@ember/test-helpers";
import I18n from "I18n";
import { test } from "qunit";
import { fixturesByUrl } from "discourse/tests/helpers/create-pretender";
import sinon from "sinon";
acceptance(
"Local Dates - Download calendar without default calendar option set",
function (needs) {
needs.user({ default_calendar: "none_selected" });
needs.settings({ discourse_local_dates_enabled: true });
needs.pretender((server, helper) => {
const response = { ...fixturesByUrl["/t/281.json"] };
server.get("/t/281.json", () => helper.response(response));
});
test("Display pick calendar modal", async function (assert) {
await visit("/t/local-dates/281");
await click(".discourse-local-date");
await click(document.querySelector(".download-calendar"));
assert.equal(
query("#discourse-modal-title").textContent.trim(),
I18n.t("download_calendar.title"),
"it should display modal to select calendar"
);
});
}
);
acceptance(
"Local Dates - Download calendar with default calendar option set",
function (needs) {
needs.user({ default_calendar: "google" });
needs.settings({ discourse_local_dates_enabled: true });
needs.pretender((server, helper) => {
const response = { ...fixturesByUrl["/t/281.json"] };
server.get("/t/281.json", () => helper.response(response));
});
needs.hooks.beforeEach(function () {
let win = { focus: function () {} };
sinon.stub(window, "open").returns(win);
sinon.stub(win, "focus");
});
test("saves into default calendar", async function (assert) {
await visit("/t/local-dates/281");
await click(".discourse-local-date");
await click(document.querySelector(".download-calendar"));
assert.ok(!exists(document.querySelector("#discourse-modal-title")));
assert.ok(
window.open.calledWith(
"https://www.google.com/calendar/event?action=TEMPLATE&text=Local%20dates&dates=20210930T110000Z/20210930T120000Z",
"_blank",
"noopener",
"noreferrer"
)
);
});
}
);