From e268638786310cd0ade6967825ea3dd212a5f78f Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Fri, 13 May 2022 06:47:39 -0700 Subject: [PATCH] =?UTF-8?q?ci:=20=E2=9C=85=20Fix=20e2e=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/shared/Graph/Edges/Edges.tsx | 2 +- .../TypebotContext/TypebotContext.tsx | 2 +- .../playwright/tests/bubbles/image.spec.ts | 2 +- apps/builder/services/utils/useUndo.ts | 38 +++++++++++++------ apps/viewer/pages/api/mock/fail.ts | 15 ++++++++ apps/viewer/pages/api/mock/success.ts | 15 ++++++++ apps/viewer/playwright/tests/webhook.spec.ts | 9 +++-- 7 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 apps/viewer/pages/api/mock/fail.ts create mode 100644 apps/viewer/pages/api/mock/success.ts diff --git a/apps/builder/components/shared/Graph/Edges/Edges.tsx b/apps/builder/components/shared/Graph/Edges/Edges.tsx index a8806d9ab..495bcb44f 100644 --- a/apps/builder/components/shared/Graph/Edges/Edges.tsx +++ b/apps/builder/components/shared/Graph/Edges/Edges.tsx @@ -26,7 +26,7 @@ export const Edges = ({ left="0" top="0" pointerEvents="none" - shape-rendering="geometricPrecision" + shapeRendering="geometricPrecision" > {edges.map((edge) => ( diff --git a/apps/builder/contexts/TypebotContext/TypebotContext.tsx b/apps/builder/contexts/TypebotContext/TypebotContext.tsx index ec5c8f902..970a53860 100644 --- a/apps/builder/contexts/TypebotContext/TypebotContext.tsx +++ b/apps/builder/contexts/TypebotContext/TypebotContext.tsx @@ -162,7 +162,7 @@ export const TypebotContext = ({ useEffect(() => { if (!typebot || !currentTypebotRef.current) return if (typebotId !== currentTypebotRef.current.id) { - setLocalTypebot({ ...typebot }) + setLocalTypebot({ ...typebot }, { updateDate: false }) flush() } else if ( new Date(typebot.updatedAt) > diff --git a/apps/builder/playwright/tests/bubbles/image.spec.ts b/apps/builder/playwright/tests/bubbles/image.spec.ts index f90b164e7..6f5412593 100644 --- a/apps/builder/playwright/tests/bubbles/image.spec.ts +++ b/apps/builder/playwright/tests/bubbles/image.spec.ts @@ -84,7 +84,7 @@ test.describe.parallel('Image bubble step', () => { force: true, position: { x: 0, y: 0 }, }) - await expect(page.locator('img[alt="Step image"]')).toHaveAttribute( + await expect(page.locator('img[alt="Block image"]')).toHaveAttribute( 'src', new RegExp('giphy.com/media', 'gm') ) diff --git a/apps/builder/services/utils/useUndo.ts b/apps/builder/services/utils/useUndo.ts index f56b74de6..e4964d8fa 100644 --- a/apps/builder/services/utils/useUndo.ts +++ b/apps/builder/services/utils/useUndo.ts @@ -12,7 +12,10 @@ enum ActionType { } export interface Actions { - set: (newPresent: T | ((current: T) => T)) => void + set: ( + newPresent: T | ((current: T) => T), + options?: { updateDate: boolean } + ) => void undo: () => void redo: () => void flush: () => void @@ -24,6 +27,7 @@ export interface Actions { interface Action { type: ActionType newPresent?: T + updateDate?: boolean } export interface State { @@ -72,7 +76,7 @@ const reducer = (state: State, action: Action) => { } case ActionType.Set: { - const { newPresent } = action + const { newPresent, updateDate } = action if ( isNotDefined(newPresent) || (present && @@ -92,7 +96,12 @@ const reducer = (state: State, action: Action) => { // ) return { past: [...past, present].filter(isDefined), - present: { ...newPresent, updatedAt: new Date() }, + present: { + ...newPresent, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + //@ts-ignore + updatedAt: updateDate ? new Date() : newPresent.updatedAt, + }, future: [], } } @@ -124,14 +133,21 @@ const useUndo = (initialPresent: T): [State, Actions] => { } }, [canRedo]) - const set = useCallback((newPresent: T | ((current: T) => T)) => { - const updatedTypebot = - 'id' in newPresent - ? newPresent - : (newPresent as (current: T) => T)(presentRef.current) - presentRef.current = updatedTypebot - dispatch({ type: ActionType.Set, newPresent: updatedTypebot }) - }, []) + const set = useCallback( + (newPresent: T | ((current: T) => T), options = { updateDate: true }) => { + const updatedTypebot = + 'id' in newPresent + ? newPresent + : (newPresent as (current: T) => T)(presentRef.current) + presentRef.current = updatedTypebot + dispatch({ + type: ActionType.Set, + newPresent: updatedTypebot, + updateDate: options.updateDate, + }) + }, + [] + ) const flush = useCallback(() => { dispatch({ type: ActionType.Flush }) diff --git a/apps/viewer/pages/api/mock/fail.ts b/apps/viewer/pages/api/mock/fail.ts new file mode 100644 index 000000000..70b453873 --- /dev/null +++ b/apps/viewer/pages/api/mock/fail.ts @@ -0,0 +1,15 @@ +import { withSentry } from '@sentry/nextjs' +import { NextApiRequest, NextApiResponse } from 'next' +import { methodNotAllowed } from 'utils' + +const handler = (req: NextApiRequest, res: NextApiResponse) => { + if (req.method === 'POST') { + return res.status(500).json({ + statusCode: 500, + statusMessage: 'Fail', + }) + } + methodNotAllowed(res) +} + +export default withSentry(handler) diff --git a/apps/viewer/pages/api/mock/success.ts b/apps/viewer/pages/api/mock/success.ts new file mode 100644 index 000000000..ffcebc311 --- /dev/null +++ b/apps/viewer/pages/api/mock/success.ts @@ -0,0 +1,15 @@ +import { withSentry } from '@sentry/nextjs' +import { NextApiRequest, NextApiResponse } from 'next' +import { methodNotAllowed } from 'utils' + +const handler = (req: NextApiRequest, res: NextApiResponse) => { + if (req.method === 'POST') { + return res.status(200).json({ + statusCode: 200, + statusMessage: 'OK', + }) + } + methodNotAllowed(res) +} + +export default withSentry(handler) diff --git a/apps/viewer/playwright/tests/webhook.spec.ts b/apps/viewer/playwright/tests/webhook.spec.ts index 7c339dca7..53672ea61 100644 --- a/apps/viewer/playwright/tests/webhook.spec.ts +++ b/apps/viewer/playwright/tests/webhook.spec.ts @@ -13,21 +13,22 @@ test('should execute webhooks properly', async ({ page }) => { ) await createWebhook(typebotId, { id: 'success-webhook', - url: 'https://webhook.site/912bafb0-b92f-4be8-ae6a-186b5879a17a', + url: 'http://localhost:3001/api/mock/success', method: HttpMethod.POST, }) await createWebhook(typebotId, { id: 'failed-webhook', - url: 'https://webhook.site/8be94c01-141e-4792-b3c6-cf45137481d6', + url: 'http://localhost:3001/api/mock/fail', method: HttpMethod.POST, }) await page.goto(`/${typebotId}-public`) await typebotViewer(page).locator('text=Send success webhook').click() await page.waitForResponse( - (resp) => + async (resp) => resp.request().url().includes(`/api/typebots/${typebotId}/blocks`) && - resp.status() === 200 + resp.status() === 200 && + (await resp.json()).statusCode === 200 ) await typebotViewer(page).locator('text=Send failed webhook').click() await page.waitForResponse(