test: add apple calendar testing (#10137)
Co-authored-by: Shivam Kalra <shivamkalra98@gmail.com> Co-authored-by: Omar López <zomars@me.com>
This commit is contained in:
parent
3552bbc6cf
commit
5eb3af54b3
|
@ -215,3 +215,8 @@ PROJECT_ID_VERCEL=
|
||||||
TEAM_ID_VERCEL=
|
TEAM_ID_VERCEL=
|
||||||
# Get it from: https://vercel.com/account/tokens
|
# Get it from: https://vercel.com/account/tokens
|
||||||
AUTH_BEARER_TOKEN_VERCEL=
|
AUTH_BEARER_TOKEN_VERCEL=
|
||||||
|
|
||||||
|
# - APPLE CALENDAR
|
||||||
|
# Used for E2E tests on Apple Calendar
|
||||||
|
E2E_TEST_APPLE_CALENDAR_EMAIL=""
|
||||||
|
E2E_TEST_APPLE_CALENDAR_PASSWORD=""
|
||||||
|
|
|
@ -41,6 +41,8 @@ jobs:
|
||||||
CALENDSO_ENCRYPTION_KEY: ${{ secrets.CI_CALENDSO_ENCRYPTION_KEY }}
|
CALENDSO_ENCRYPTION_KEY: ${{ secrets.CI_CALENDSO_ENCRYPTION_KEY }}
|
||||||
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
|
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
|
||||||
DEPLOYSENTINEL_API_KEY: ${{ secrets.DEPLOYSENTINEL_API_KEY }}
|
DEPLOYSENTINEL_API_KEY: ${{ secrets.DEPLOYSENTINEL_API_KEY }}
|
||||||
|
E2E_TEST_APPLE_CALENDAR_EMAIL: ${{ secrets.E2E_TEST_APPLE_CALENDAR_EMAIL }}
|
||||||
|
E2E_TEST_APPLE_CALENDAR_PASSWORD: ${{ secrets.E2E_TEST_APPLE_CALENDAR_PASSWORD }}
|
||||||
GOOGLE_API_CREDENTIALS: ${{ secrets.CI_GOOGLE_API_CREDENTIALS }}
|
GOOGLE_API_CREDENTIALS: ${{ secrets.CI_GOOGLE_API_CREDENTIALS }}
|
||||||
GOOGLE_LOGIN_ENABLED: ${{ vars.CI_GOOGLE_LOGIN_ENABLED }}
|
GOOGLE_LOGIN_ENABLED: ${{ vars.CI_GOOGLE_LOGIN_ENABLED }}
|
||||||
NEXTAUTH_SECRET: ${{ secrets.CI_NEXTAUTH_SECRET }}
|
NEXTAUTH_SECRET: ${{ secrets.CI_NEXTAUTH_SECRET }}
|
||||||
|
|
|
@ -38,6 +38,8 @@ jobs:
|
||||||
CALENDSO_ENCRYPTION_KEY: ${{ secrets.CI_CALENDSO_ENCRYPTION_KEY }}
|
CALENDSO_ENCRYPTION_KEY: ${{ secrets.CI_CALENDSO_ENCRYPTION_KEY }}
|
||||||
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
|
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
|
||||||
DEPLOYSENTINEL_API_KEY: ${{ secrets.DEPLOYSENTINEL_API_KEY }}
|
DEPLOYSENTINEL_API_KEY: ${{ secrets.DEPLOYSENTINEL_API_KEY }}
|
||||||
|
E2E_TEST_APPLE_CALENDAR_EMAIL: ${{ secrets.E2E_TEST_APPLE_CALENDAR_EMAIL }}
|
||||||
|
E2E_TEST_APPLE_CALENDAR_PASSWORD: ${{ secrets.E2E_TEST_APPLE_CALENDAR_PASSWORD }}
|
||||||
GOOGLE_API_CREDENTIALS: ${{ secrets.CI_GOOGLE_API_CREDENTIALS }}
|
GOOGLE_API_CREDENTIALS: ${{ secrets.CI_GOOGLE_API_CREDENTIALS }}
|
||||||
GOOGLE_LOGIN_ENABLED: ${{ vars.CI_GOOGLE_LOGIN_ENABLED }}
|
GOOGLE_LOGIN_ENABLED: ${{ vars.CI_GOOGLE_LOGIN_ENABLED }}
|
||||||
NEXTAUTH_SECRET: ${{ secrets.CI_NEXTAUTH_SECRET }}
|
NEXTAUTH_SECRET: ${{ secrets.CI_NEXTAUTH_SECRET }}
|
||||||
|
|
|
@ -41,6 +41,8 @@ jobs:
|
||||||
CALENDSO_ENCRYPTION_KEY: ${{ secrets.CI_CALENDSO_ENCRYPTION_KEY }}
|
CALENDSO_ENCRYPTION_KEY: ${{ secrets.CI_CALENDSO_ENCRYPTION_KEY }}
|
||||||
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
|
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
|
||||||
DEPLOYSENTINEL_API_KEY: ${{ secrets.DEPLOYSENTINEL_API_KEY }}
|
DEPLOYSENTINEL_API_KEY: ${{ secrets.DEPLOYSENTINEL_API_KEY }}
|
||||||
|
E2E_TEST_APPLE_CALENDAR_EMAIL: ${{ secrets.E2E_TEST_APPLE_CALENDAR_EMAIL }}
|
||||||
|
E2E_TEST_APPLE_CALENDAR_PASSWORD: ${{ secrets.E2E_TEST_APPLE_CALENDAR_PASSWORD }}
|
||||||
GOOGLE_API_CREDENTIALS: ${{ secrets.CI_GOOGLE_API_CREDENTIALS }}
|
GOOGLE_API_CREDENTIALS: ${{ secrets.CI_GOOGLE_API_CREDENTIALS }}
|
||||||
GOOGLE_LOGIN_ENABLED: ${{ vars.CI_GOOGLE_LOGIN_ENABLED }}
|
GOOGLE_LOGIN_ENABLED: ${{ vars.CI_GOOGLE_LOGIN_ENABLED }}
|
||||||
NEXTAUTH_SECRET: ${{ secrets.CI_NEXTAUTH_SECRET }}
|
NEXTAUTH_SECRET: ${{ secrets.CI_NEXTAUTH_SECRET }}
|
||||||
|
|
|
@ -40,6 +40,8 @@ jobs:
|
||||||
CALENDSO_ENCRYPTION_KEY: ${{ secrets.CI_CALENDSO_ENCRYPTION_KEY }}
|
CALENDSO_ENCRYPTION_KEY: ${{ secrets.CI_CALENDSO_ENCRYPTION_KEY }}
|
||||||
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
|
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
|
||||||
DEPLOYSENTINEL_API_KEY: ${{ secrets.DEPLOYSENTINEL_API_KEY }}
|
DEPLOYSENTINEL_API_KEY: ${{ secrets.DEPLOYSENTINEL_API_KEY }}
|
||||||
|
E2E_TEST_APPLE_CALENDAR_EMAIL: ${{ secrets.E2E_TEST_APPLE_CALENDAR_EMAIL }}
|
||||||
|
E2E_TEST_APPLE_CALENDAR_PASSWORD: ${{ secrets.E2E_TEST_APPLE_CALENDAR_PASSWORD }}
|
||||||
GOOGLE_API_CREDENTIALS: ${{ secrets.CI_GOOGLE_API_CREDENTIALS }}
|
GOOGLE_API_CREDENTIALS: ${{ secrets.CI_GOOGLE_API_CREDENTIALS }}
|
||||||
EMAIL_SERVER_HOST: ${{ secrets.CI_EMAIL_SERVER_HOST }}
|
EMAIL_SERVER_HOST: ${{ secrets.CI_EMAIL_SERVER_HOST }}
|
||||||
EMAIL_SERVER_PORT: ${{ secrets.CI_EMAIL_SERVER_PORT }}
|
EMAIL_SERVER_PORT: ${{ secrets.CI_EMAIL_SERVER_PORT }}
|
||||||
|
|
|
@ -7,6 +7,8 @@ env:
|
||||||
ALLOWED_HOSTNAMES: ${{ vars.CI_ALLOWED_HOSTNAMES }}
|
ALLOWED_HOSTNAMES: ${{ vars.CI_ALLOWED_HOSTNAMES }}
|
||||||
CALENDSO_ENCRYPTION_KEY: ${{ secrets.CI_CALENDSO_ENCRYPTION_KEY }}
|
CALENDSO_ENCRYPTION_KEY: ${{ secrets.CI_CALENDSO_ENCRYPTION_KEY }}
|
||||||
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
|
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
|
||||||
|
E2E_TEST_APPLE_CALENDAR_EMAIL: ${{ secrets.E2E_TEST_APPLE_CALENDAR_EMAIL }}
|
||||||
|
E2E_TEST_APPLE_CALENDAR_PASSWORD: ${{ secrets.E2E_TEST_APPLE_CALENDAR_PASSWORD }}
|
||||||
GOOGLE_API_CREDENTIALS: ${{ secrets.CI_GOOGLE_API_CREDENTIALS }}
|
GOOGLE_API_CREDENTIALS: ${{ secrets.CI_GOOGLE_API_CREDENTIALS }}
|
||||||
GOOGLE_LOGIN_ENABLED: ${{ vars.CI_GOOGLE_LOGIN_ENABLED }}
|
GOOGLE_LOGIN_ENABLED: ${{ vars.CI_GOOGLE_LOGIN_ENABLED }}
|
||||||
NEXTAUTH_SECRET: ${{ secrets.CI_NEXTAUTH_SECRET }}
|
NEXTAUTH_SECRET: ${{ secrets.CI_NEXTAUTH_SECRET }}
|
||||||
|
|
|
@ -7,6 +7,8 @@ env:
|
||||||
ALLOWED_HOSTNAMES: ${{ vars.CI_ALLOWED_HOSTNAMES }}
|
ALLOWED_HOSTNAMES: ${{ vars.CI_ALLOWED_HOSTNAMES }}
|
||||||
CALENDSO_ENCRYPTION_KEY: ${{ secrets.CI_CALENDSO_ENCRYPTION_KEY }}
|
CALENDSO_ENCRYPTION_KEY: ${{ secrets.CI_CALENDSO_ENCRYPTION_KEY }}
|
||||||
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
|
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
|
||||||
|
E2E_TEST_APPLE_CALENDAR_EMAIL: ${{ secrets.E2E_TEST_APPLE_CALENDAR_EMAIL }}
|
||||||
|
E2E_TEST_APPLE_CALENDAR_PASSWORD: ${{ secrets.E2E_TEST_APPLE_CALENDAR_PASSWORD }}
|
||||||
GOOGLE_API_CREDENTIALS: ${{ secrets.CI_GOOGLE_API_CREDENTIALS }}
|
GOOGLE_API_CREDENTIALS: ${{ secrets.CI_GOOGLE_API_CREDENTIALS }}
|
||||||
GOOGLE_LOGIN_ENABLED: ${{ vars.CI_GOOGLE_LOGIN_ENABLED }}
|
GOOGLE_LOGIN_ENABLED: ${{ vars.CI_GOOGLE_LOGIN_ENABLED }}
|
||||||
NEXTAUTH_SECRET: ${{ secrets.CI_NEXTAUTH_SECRET }}
|
NEXTAUTH_SECRET: ${{ secrets.CI_NEXTAUTH_SECRET }}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { expect } from "@playwright/test";
|
import { expect } from "@playwright/test";
|
||||||
|
|
||||||
import { test } from "./lib/fixtures";
|
import { test } from "./lib/fixtures";
|
||||||
|
import { installAppleCalendar } from "./lib/testUtils";
|
||||||
|
|
||||||
test.describe.configure({ mode: "parallel" });
|
test.describe.configure({ mode: "parallel" });
|
||||||
|
|
||||||
|
@ -10,10 +11,9 @@ test.describe("App Store - Authed", () => {
|
||||||
test("Browse apple-calendar and try to install", async ({ page, users }) => {
|
test("Browse apple-calendar and try to install", async ({ page, users }) => {
|
||||||
const pro = await users.create();
|
const pro = await users.create();
|
||||||
await pro.apiLogin();
|
await pro.apiLogin();
|
||||||
await page.goto("/apps/categories/calendar");
|
|
||||||
await page.click('[data-testid="app-store-app-card-apple-calendar"]');
|
await installAppleCalendar(page);
|
||||||
await page.waitForURL("/apps/apple-calendar");
|
|
||||||
await page.click('[data-testid="install-app-button"]');
|
|
||||||
await expect(page.locator(`text=Connect to Apple Server`)).toBeVisible();
|
await expect(page.locator(`text=Connect to Apple Server`)).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -31,9 +31,8 @@ test.describe("App Store - Authed", () => {
|
||||||
|
|
||||||
test.describe("App Store - Unauthed", () => {
|
test.describe("App Store - Unauthed", () => {
|
||||||
test("Browse apple-calendar and try to install", async ({ page }) => {
|
test("Browse apple-calendar and try to install", async ({ page }) => {
|
||||||
await page.goto("/apps/categories/calendar");
|
await installAppleCalendar(page);
|
||||||
await page.click('[data-testid="app-store-app-card-apple-calendar"]');
|
|
||||||
await page.click('[data-testid="install-app-button"]');
|
|
||||||
await expect(page.locator(`[data-testid="login-form"]`)).toBeVisible();
|
await expect(page.locator(`[data-testid="login-form"]`)).toBeVisible();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
||||||
|
import { expect } from "@playwright/test";
|
||||||
|
|
||||||
|
import { test } from "./lib/fixtures";
|
||||||
|
import { installAppleCalendar } from "./lib/testUtils";
|
||||||
|
|
||||||
|
test.describe.configure({ mode: "parallel" });
|
||||||
|
|
||||||
|
test.afterEach(({ users }) => users.deleteAll());
|
||||||
|
|
||||||
|
const APPLE_CALENDAR_EMAIL = process.env.E2E_TEST_APPLE_CALENDAR_EMAIL!;
|
||||||
|
const APPLE_CALENDAR_PASSWORD = process.env.E2E_TEST_APPLE_CALENDAR_PASSWORD!;
|
||||||
|
|
||||||
|
const SHOULD_SKIP_TESTS = !APPLE_CALENDAR_EMAIL || !APPLE_CALENDAR_PASSWORD;
|
||||||
|
|
||||||
|
test.describe("Apple Calendar", () => {
|
||||||
|
// eslint-disable-next-line playwright/no-skipped-test
|
||||||
|
test.skip(SHOULD_SKIP_TESTS, "Skipping due to missing the testing credentials");
|
||||||
|
|
||||||
|
test("Should be able to install and login on Apple Calendar", async ({ page, users }) => {
|
||||||
|
const user = await users.create();
|
||||||
|
await user.apiLogin();
|
||||||
|
|
||||||
|
await installAppleCalendar(page);
|
||||||
|
|
||||||
|
await expect(page.locator('[data-testid="apple-calendar-form"]')).toBeVisible();
|
||||||
|
|
||||||
|
await page.fill('[data-testid="apple-calendar-email"]', APPLE_CALENDAR_EMAIL);
|
||||||
|
await page.fill('[data-testid="apple-calendar-password"]', APPLE_CALENDAR_PASSWORD);
|
||||||
|
await page.click('[data-testid="apple-calendar-login-button"]');
|
||||||
|
|
||||||
|
await expect(page.getByText("Apple Calendar")).toBeVisible();
|
||||||
|
await expect(page.getByText(APPLE_CALENDAR_EMAIL)).toBeVisible();
|
||||||
|
});
|
||||||
|
});
|
|
@ -183,3 +183,10 @@ export async function gotoRoutingLink({
|
||||||
// HACK: There seems to be some issue with the inputs to the form getting reset if we don't wait.
|
// HACK: There seems to be some issue with the inputs to the form getting reset if we don't wait.
|
||||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function installAppleCalendar(page: Page) {
|
||||||
|
await page.goto("/apps/categories/calendar");
|
||||||
|
await page.click('[data-testid="app-store-app-card-apple-calendar"]');
|
||||||
|
await page.waitForURL("/apps/apple-calendar");
|
||||||
|
await page.click('[data-testid="install-app-button"]');
|
||||||
|
}
|
||||||
|
|
|
@ -64,13 +64,17 @@ export default function AppleCalendarSetup() {
|
||||||
router.push(json.url);
|
router.push(json.url);
|
||||||
}
|
}
|
||||||
}}>
|
}}>
|
||||||
<fieldset className="space-y-2" disabled={form.formState.isSubmitting}>
|
<fieldset
|
||||||
|
className="space-y-2"
|
||||||
|
disabled={form.formState.isSubmitting}
|
||||||
|
data-testid="apple-calendar-form">
|
||||||
<TextField
|
<TextField
|
||||||
required
|
required
|
||||||
type="text"
|
type="text"
|
||||||
{...form.register("username")}
|
{...form.register("username")}
|
||||||
label="Apple ID"
|
label="Apple ID"
|
||||||
placeholder="appleid@domain.com"
|
placeholder="appleid@domain.com"
|
||||||
|
data-testid="apple-calendar-email"
|
||||||
/>
|
/>
|
||||||
<TextField
|
<TextField
|
||||||
required
|
required
|
||||||
|
@ -79,6 +83,7 @@ export default function AppleCalendarSetup() {
|
||||||
label={t("password")}
|
label={t("password")}
|
||||||
placeholder="•••••••••••••"
|
placeholder="•••••••••••••"
|
||||||
autoComplete="password"
|
autoComplete="password"
|
||||||
|
data-testid="apple-calendar-password"
|
||||||
/>
|
/>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
|
@ -87,7 +92,10 @@ export default function AppleCalendarSetup() {
|
||||||
<Button type="button" color="secondary" onClick={() => router.back()}>
|
<Button type="button" color="secondary" onClick={() => router.back()}>
|
||||||
{t("cancel")}
|
{t("cancel")}
|
||||||
</Button>
|
</Button>
|
||||||
<Button type="submit" loading={form.formState.isSubmitting}>
|
<Button
|
||||||
|
type="submit"
|
||||||
|
loading={form.formState.isSubmitting}
|
||||||
|
data-testid="apple-calendar-login-button">
|
||||||
{t("save")}
|
{t("save")}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -153,3 +153,10 @@ export async function rescheduleEvent(username: string, frame: Frame, page: Page
|
||||||
await expect(frame.locator("[data-testid=success-page]")).toBeVisible();
|
await expect(frame.locator("[data-testid=success-page]")).toBeVisible();
|
||||||
return booking;
|
return booking;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function installAppleCalendar(page: Page) {
|
||||||
|
await page.goto("/apps/categories/calendar");
|
||||||
|
await page.click('[data-testid="app-store-app-card-apple-calendar"]');
|
||||||
|
await page.waitForURL("/apps/apple-calendar");
|
||||||
|
await page.click('[data-testid="install-app-button"]');
|
||||||
|
}
|
||||||
|
|
|
@ -193,6 +193,8 @@
|
||||||
"DAILY_API_KEY",
|
"DAILY_API_KEY",
|
||||||
"DAILY_SCALE_PLAN",
|
"DAILY_SCALE_PLAN",
|
||||||
"DEBUG",
|
"DEBUG",
|
||||||
|
"E2E_TEST_APPLE_CALENDAR_EMAIL",
|
||||||
|
"E2E_TEST_APPLE_CALENDAR_PASSWORD",
|
||||||
"EMAIL_FROM",
|
"EMAIL_FROM",
|
||||||
"EMAIL_SERVER_HOST",
|
"EMAIL_SERVER_HOST",
|
||||||
"EMAIL_SERVER_PASSWORD",
|
"EMAIL_SERVER_PASSWORD",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user