+15









Carina Wollendorfer
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);
|
|
});
|
|
});
|
|
});
|