import { acceptance } 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"; import { cloneJSON } from "discourse-common/lib/object"; acceptance( "Local Dates - Download calendar without default calendar option set", function (needs) { needs.user({ "user_option.default_calendar": "none_selected" }); needs.settings({ discourse_local_dates_enabled: true }); needs.pretender((server, helper) => { const response = cloneJSON(fixturesByUrl["/t/281.json"]); const startDate = moment .tz("America/Lima") .add(1, "days") .format("YYYY-MM-DD"); response.post_stream.posts[0].cooked = `

${startDate}T18:00:00Z

`; 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(".download-calendar"); assert .dom("#discourse-modal-title") .hasText( I18n.t("download_calendar.title"), "it should display modal to select calendar" ); }); } ); acceptance( "Local Dates - Download calendar is not available for dates in the past", function (needs) { needs.user({ "user_option.default_calendar": "none_selected" }); needs.settings({ discourse_local_dates_enabled: true }); needs.pretender((server, helper) => { const response = cloneJSON(fixturesByUrl["/t/281.json"]); const startDate = moment .tz("America/Lima") .subtract(1, "days") .format("YYYY-MM-DD"); response.post_stream.posts[0].cooked = `

${startDate}T18:00:00Z

`; server.get("/t/281.json", () => helper.response(response)); }); test("Does not show add to calendar button", async function (assert) { await visit("/t/local-dates/281"); await click(".discourse-local-date"); assert.dom(".download-calendar").doesNotExist(); }); } ); acceptance( "Local Dates - Download calendar with default calendar option set", function (needs) { needs.user({ "user_option.default_calendar": "google" }); needs.settings({ discourse_local_dates_enabled: true }); needs.pretender((server, helper) => { const response = cloneJSON(fixturesByUrl["/t/281.json"]); const startDate = moment .tz("America/Lima") .add(1, "days") .format("YYYY-MM-DD"); response.post_stream.posts[0].cooked = `

${startDate}T18:00:00Z

`; response.title = " title to trim "; server.get("/t/281.json", () => helper.response(response)); }); test("saves into default calendar", async function (assert) { const startDate = moment .tz("America/Lima") .add(1, "days") .format("YYYYMMDD"); await visit("/t/local-dates/281"); sinon.stub(window, "open").callsFake(function () { assert.deepEqual( [...arguments], [ `https://www.google.com/calendar/event?action=TEMPLATE&text=title%20to%20trim&dates=${startDate}T180000Z/${startDate}T190000Z`, "_blank", "noopener", "noreferrer", ] ); return { focus() {} }; }); await click(".discourse-local-date"); await click(".download-calendar"); assert.dom("#discourse-modal-title").doesNotExist(); }); } );