+16









Carina Wollendorfer
GitHub
Alex van Andel
sajanlamsal
CarinaWolli
alannnc
Leo Giovanetti
Peer Richelsen
Hariom Balhara
Udit Takkar
Nitin Panghal
Omar López
Peer Richelsen
Shivam Kalra
Richard Poelderl
Crowdin Bot
Joe Au-Yeung
Nafees Nazik
Chiranjeev Vishnoi
Denzil Samuel
Syed Ali Shahbaz
nitinpanghal
Ahmad
Annlee Fores
Keith Williams
Vijay
68bd877c5b
Co-authored-by: Alex van Andel <me@alexvanandel.com> Co-authored-by: sajanlamsal <saznlamsal@gmail.com> Co-authored-by: CarinaWolli <wollencarina@gmail.com> Co-authored-by: alannnc <alannnc@gmail.com> Co-authored-by: Leo Giovanetti <hello@leog.me> Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: Hariom Balhara <hariombalhara@gmail.com> Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Co-authored-by: Nitin Panghal <nitin.panghal@unthinkable.co> Co-authored-by: Omar López <zomars@me.com> Co-authored-by: Peer Richelsen <peer@cal.com> Co-authored-by: zomars <zomars@me.com> Co-authored-by: Shivam Kalra <shivamkalra98@gmail.com> Co-authored-by: Richard Poelderl <richard.poelderl@gmail.com> Co-authored-by: Crowdin Bot <support+bot@crowdin.com> Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> Co-authored-by: Nafees Nazik <84864519+G3root@users.noreply.github.com> Co-authored-by: Chiranjeev Vishnoi <66114276+Chiranjeev-droid@users.noreply.github.com> Co-authored-by: Denzil Samuel <71846487+samueldenzil@users.noreply.github.com> Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com> Co-authored-by: nitinpanghal <43965732+nitinpanghal@users.noreply.github.com> Co-authored-by: Ahmad <57593864+Ahmadkashif@users.noreply.github.com> Co-authored-by: Annlee Fores <annleefores@gmail.com> Co-authored-by: Keith Williams <keithwillcode@gmail.com> Co-authored-by: Vijay <vijayraghav22@gmail.com>
125 lines
4.2 KiB
TypeScript
125 lines
4.2 KiB
TypeScript
import { expect } from "@playwright/test";
|
|
|
|
// eslint-disable-next-line no-restricted-imports
|
|
import { test } from "@calcom/web/playwright/lib/fixtures";
|
|
|
|
import "../../src/types";
|
|
|
|
test.describe("Embed Pages", () => {
|
|
test("Event Type Page: should not have margin top on embed page", async ({ page }) => {
|
|
await page.goto("http://localhost:3000/free/30min/embed");
|
|
// Checks the margin from top by checking the distance between the div inside main from the viewport
|
|
const marginFromTop = await page.evaluate(async () => {
|
|
return await new Promise((resolve) => {
|
|
(function tryGettingBoundingRect() {
|
|
const mainElement = document.querySelector(".main");
|
|
|
|
if (mainElement) {
|
|
// This returns the distance of the div element from the viewport
|
|
const mainElBoundingRect = mainElement.getBoundingClientRect();
|
|
resolve(mainElBoundingRect.top);
|
|
} else {
|
|
setTimeout(tryGettingBoundingRect, 500);
|
|
}
|
|
})();
|
|
});
|
|
});
|
|
|
|
expect(marginFromTop).toBe(0);
|
|
});
|
|
|
|
test("Event Type Page: should have margin top on non embed page", async ({ page }) => {
|
|
await page.goto("http://localhost:3000/free/30min");
|
|
|
|
// Checks the margin from top by checking the distance between the div inside main from the viewport
|
|
const marginFromTop = await page.evaluate(() => {
|
|
const mainElement = document.querySelector("main");
|
|
const divElement = mainElement?.querySelector("div");
|
|
|
|
if (mainElement && divElement) {
|
|
// This returns the distance of the div element from the viewport
|
|
const divRect = divElement.getBoundingClientRect();
|
|
return divRect.top;
|
|
}
|
|
|
|
return null;
|
|
});
|
|
|
|
expect(marginFromTop).not.toBe(0);
|
|
});
|
|
|
|
test.describe("isEmbed, getEmbedNamespace, getEmbedTheme testing", () => {
|
|
test("when `window.name` is set to 'cal-embed=' and `theme` is supplied as a query param", async ({
|
|
page,
|
|
}) => {
|
|
const queryParamTheme = "dark";
|
|
await page.evaluate(() => {
|
|
window.name = "cal-embed=";
|
|
});
|
|
|
|
await page.goto(`http://localhost:3000/free/30min?theme=${queryParamTheme}`);
|
|
|
|
const isEmbed = await page.evaluate(() => {
|
|
return window?.isEmbed?.();
|
|
});
|
|
|
|
const embedNamespace = await page.evaluate(() => {
|
|
return window?.getEmbedNamespace?.();
|
|
});
|
|
|
|
expect(embedNamespace).toBe("");
|
|
expect(isEmbed).toBe(true);
|
|
const embedTheme = await page.evaluate(() => {
|
|
return window?.getEmbedTheme?.();
|
|
});
|
|
expect(embedTheme).toBe(queryParamTheme);
|
|
const embedStoreTheme = await page.evaluate(() => {
|
|
return window.CalEmbed.embedStore.theme;
|
|
});
|
|
// Verify that the theme is set on embedStore.
|
|
expect(embedStoreTheme).toBe(queryParamTheme);
|
|
});
|
|
|
|
test("when `window.name` does not contain `cal-embed=`", async ({ page }) => {
|
|
await page.evaluate(() => {
|
|
window.name = "testing";
|
|
});
|
|
await page.goto(`http://localhost:3000/free/30min`);
|
|
const isEmbed = await page.evaluate(() => {
|
|
return window?.isEmbed?.();
|
|
});
|
|
const embedNamespace = await page.evaluate(() => {
|
|
return window?.getEmbedNamespace?.();
|
|
});
|
|
expect(isEmbed).toBe(false);
|
|
expect(embedNamespace).toBe(null);
|
|
});
|
|
|
|
test("`getEmbedTheme` should use `window.CalEmbed.embedStore.theme` instead of `theme` query param if set", async ({
|
|
page,
|
|
}) => {
|
|
const theme = "dark";
|
|
await page.evaluate(() => {
|
|
window.name = "cal-embed=";
|
|
});
|
|
await page.goto("http://localhost:3000/free/30min?theme=dark");
|
|
let embedTheme = await page.evaluate(() => {
|
|
return window?.getEmbedTheme?.();
|
|
});
|
|
expect(embedTheme).toBe(theme);
|
|
|
|
// Fake a scenario where theme query param is lost during navigation
|
|
await page.evaluate(() => {
|
|
history.pushState({}, "", "/free/30min");
|
|
});
|
|
|
|
embedTheme = await page.evaluate(() => {
|
|
return window?.getEmbedTheme?.();
|
|
});
|
|
|
|
// Theme should still remain same as it's read from `window.CalEmbed.embedStore.theme` which is updated by getEmbedTheme itself
|
|
expect(embedTheme).toBe(theme);
|
|
});
|
|
});
|
|
});
|