From 13f72f5ff7dab08671542c5a644c0d77dc908c9d Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Wed, 12 Jan 2022 09:57:00 +0100 Subject: [PATCH] =?UTF-8?q?chore(inputs):=20=E2=9C=85=20Add=20Button=20tar?= =?UTF-8?q?gets=20e2e=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/builder/components/board/Board.tsx | 2 +- .../fixtures/typebots/singleChoiceTarget.json | 130 ++++++++++++++++++ apps/builder/cypress/plugins/data.ts | 1 + apps/builder/cypress/plugins/database.ts | 14 +- apps/builder/cypress/plugins/index.ts | 3 +- apps/builder/cypress/support/commands.ts | 6 + apps/builder/cypress/support/index.ts | 1 + apps/builder/cypress/tests/account.ts | 6 +- apps/builder/cypress/tests/bubbles.ts | 3 +- apps/builder/cypress/tests/inputs.ts | 15 +- 10 files changed, 168 insertions(+), 13 deletions(-) create mode 100644 apps/builder/cypress/fixtures/typebots/singleChoiceTarget.json create mode 100644 apps/builder/cypress/plugins/data.ts diff --git a/apps/builder/components/board/Board.tsx b/apps/builder/components/board/Board.tsx index 4e286e6e2f..c5ba41159c 100644 --- a/apps/builder/components/board/Board.tsx +++ b/apps/builder/components/board/Board.tsx @@ -16,8 +16,8 @@ export const Board = () => { - {rightPanel === RightPanel.PREVIEW && } + {rightPanel === RightPanel.PREVIEW && } diff --git a/apps/builder/cypress/fixtures/typebots/singleChoiceTarget.json b/apps/builder/cypress/fixtures/typebots/singleChoiceTarget.json new file mode 100644 index 0000000000..a1652f9baf --- /dev/null +++ b/apps/builder/cypress/fixtures/typebots/singleChoiceTarget.json @@ -0,0 +1,130 @@ +{ + "id": "typebot4", + "createdAt": "2022-01-12T08:20:11.572Z", + "updatedAt": "2022-01-12T08:20:11.572Z", + "name": "My typebot", + "ownerId": "ckyb9vs110792li1az8bve32o", + "publishedTypebotId": null, + "folderId": null, + "blocks": { + "byId": { + "iE81k3ViAne3mfPEWeZJcq": { + "id": "iE81k3ViAne3mfPEWeZJcq", + "title": "Start", + "stepIds": ["fLNNAAtRkrw7GG5iqCCdYx"], + "graphCoordinates": { "x": 0, "y": 0 } + }, + "bcs6TWbHd9inLRDyGZaX7SD": { + "id": "bcs6TWbHd9inLRDyGZaX7SD", + "title": "Block #2", + "graphCoordinates": { "x": 362, "y": 202 }, + "stepIds": ["sdExhY2LZ6VZ69s2WFmBcZg"] + }, + "bgjJd4KTrHSy2GD7AfCPECR": { + "id": "bgjJd4KTrHSy2GD7AfCPECR", + "title": "Block #3", + "graphCoordinates": { "x": 846, "y": 186 }, + "stepIds": ["sgwvBXuNbZ16vvJK7rAA8Gw"] + }, + "bkLYB73fk4GePgqDLnUHy1t": { + "id": "bkLYB73fk4GePgqDLnUHy1t", + "title": "Block #4", + "graphCoordinates": { "x": 851, "y": 498 }, + "stepIds": ["sbE2QKjYNXwrBexFgYrkMcn"] + } + }, + "allIds": [ + "iE81k3ViAne3mfPEWeZJcq", + "bcs6TWbHd9inLRDyGZaX7SD", + "bgjJd4KTrHSy2GD7AfCPECR", + "bkLYB73fk4GePgqDLnUHy1t" + ] + }, + "steps": { + "byId": { + "fLNNAAtRkrw7GG5iqCCdYx": { + "id": "fLNNAAtRkrw7GG5iqCCdYx", + "type": "start", + "label": "Start", + "blockId": "iE81k3ViAne3mfPEWeZJcq", + "target": { "blockId": "bcs6TWbHd9inLRDyGZaX7SD" } + }, + "sdExhY2LZ6VZ69s2WFmBcZg": { + "id": "sdExhY2LZ6VZ69s2WFmBcZg", + "blockId": "bcs6TWbHd9inLRDyGZaX7SD", + "type": "choice input", + "options": { + "itemIds": [ + "rFcixXR7vVXDeUuWajc7gR", + "1Ksnvcvtpn358jX5rtEfKa", + "8PLMwgYdaEzG6FAvCo46L8" + ] + }, + "target": { "blockId": "bkLYB73fk4GePgqDLnUHy1t" } + }, + "sgwvBXuNbZ16vvJK7rAA8Gw": { + "id": "sgwvBXuNbZ16vvJK7rAA8Gw", + "blockId": "bgjJd4KTrHSy2GD7AfCPECR", + "type": "text", + "content": { + "html": "
I love burgers!
", + "richText": [ + { "type": "p", "children": [{ "text": "I love burgers!" }] } + ], + "plainText": "I love burgers!" + } + }, + "sbE2QKjYNXwrBexFgYrkMcn": { + "id": "sbE2QKjYNXwrBexFgYrkMcn", + "blockId": "bkLYB73fk4GePgqDLnUHy1t", + "type": "text", + "content": { + "html": "
Cool!
", + "richText": [{ "type": "p", "children": [{ "text": "Cool!" }] }], + "plainText": "Cool!" + } + } + }, + "allIds": [ + "fLNNAAtRkrw7GG5iqCCdYx", + "sdExhY2LZ6VZ69s2WFmBcZg", + "sgwvBXuNbZ16vvJK7rAA8Gw", + "sbE2QKjYNXwrBexFgYrkMcn" + ] + }, + "choiceItems": { + "byId": { + "rFcixXR7vVXDeUuWajc7gR": { + "id": "rFcixXR7vVXDeUuWajc7gR", + "stepId": "sdExhY2LZ6VZ69s2WFmBcZg", + "content": "Burgers", + "target": { "blockId": "bgjJd4KTrHSy2GD7AfCPECR" } + }, + "1Ksnvcvtpn358jX5rtEfKa": { + "id": "1Ksnvcvtpn358jX5rtEfKa", + "stepId": "sdExhY2LZ6VZ69s2WFmBcZg", + "content": "Hot dogs" + }, + "8PLMwgYdaEzG6FAvCo46L8": { + "id": "8PLMwgYdaEzG6FAvCo46L8", + "stepId": "sdExhY2LZ6VZ69s2WFmBcZg", + "content": "Carpaccio" + } + }, + "allIds": [ + "rFcixXR7vVXDeUuWajc7gR", + "1Ksnvcvtpn358jX5rtEfKa", + "8PLMwgYdaEzG6FAvCo46L8" + ] + }, + "theme": { + "general": { + "font": "Open Sans", + "background": { "type": "None", "content": "#ffffff" } + } + }, + "settings": { + "typingEmulation": { "speed": 300, "enabled": true, "maxDelay": 1.5 } + }, + "publicId": null +} diff --git a/apps/builder/cypress/plugins/data.ts b/apps/builder/cypress/plugins/data.ts new file mode 100644 index 0000000000..294874a49d --- /dev/null +++ b/apps/builder/cypress/plugins/data.ts @@ -0,0 +1 @@ +export const userIds = ['user1', 'user2'] diff --git a/apps/builder/cypress/plugins/database.ts b/apps/builder/cypress/plugins/database.ts index dd37048764..6982e7a54b 100644 --- a/apps/builder/cypress/plugins/database.ts +++ b/apps/builder/cypress/plugins/database.ts @@ -1,6 +1,7 @@ import { InputStepType, PublicTypebot, Typebot } from 'models' import { Plan, PrismaClient } from 'db' import { parseTestTypebot } from './utils' +import { userIds } from './data' const prisma = new PrismaClient() @@ -21,9 +22,9 @@ export const createTypebot = (typebot: Typebot) => const createUsers = () => prisma.user.createMany({ data: [ - { id: 'test1', email: 'test1@gmail.com', emailVerified: new Date() }, + { id: userIds[0], email: 'test1@gmail.com', emailVerified: new Date() }, { - id: 'test2', + id: userIds[1], email: 'test2@gmail.com', emailVerified: new Date(), plan: Plan.PRO, @@ -34,7 +35,7 @@ const createUsers = () => const createFolders = () => prisma.dashboardFolder.createMany({ - data: [{ ownerId: 'test2', name: 'Folder #1', id: 'folder1' }], + data: [{ ownerId: userIds[1], name: 'Folder #1', id: 'folder1' }], }) const createTypebots = async () => { @@ -42,7 +43,7 @@ const createTypebots = async () => { ...parseTestTypebot({ id: 'typebot2', name: 'Typebot #2', - ownerId: 'test2', + ownerId: userIds[1], blocks: { byId: { block1: { @@ -72,7 +73,7 @@ const createTypebots = async () => { ...parseTestTypebot({ id: 'typebot1', name: 'Typebot #1', - ownerId: 'test2', + ownerId: userIds[1], blocks: { byId: {}, allIds: [] }, steps: { byId: {}, allIds: [] }, }), @@ -129,3 +130,6 @@ const parseTypebotToPublicTypebot = ( publicId: typebot.publicId, choiceItems: typebot.choiceItems, }) + +export const loadRawTypebotInDatabase = (typebot: Typebot) => + prisma.typebot.create({ data: { ...typebot, ownerId: userIds[1] } as any }) diff --git a/apps/builder/cypress/plugins/index.ts b/apps/builder/cypress/plugins/index.ts index 60b90b6338..f22dc2796b 100644 --- a/apps/builder/cypress/plugins/index.ts +++ b/apps/builder/cypress/plugins/index.ts @@ -3,7 +3,7 @@ import { FacebookSocialLogin, GoogleSocialLogin, } from 'cypress-social-logins/src/Plugins' -import { createTypebot, seedDb } from './database' +import { createTypebot, loadRawTypebotInDatabase, seedDb } from './database' /// /** @@ -17,6 +17,7 @@ const handler = (on: any) => { GitHubSocialLogin: GitHubSocialLogin, seed: seedDb, createTypebot, + loadRawTypebotInDatabase, }) } diff --git a/apps/builder/cypress/support/commands.ts b/apps/builder/cypress/support/commands.ts index c1b1a848e4..6e9d8d40c7 100644 --- a/apps/builder/cypress/support/commands.ts +++ b/apps/builder/cypress/support/commands.ts @@ -12,6 +12,12 @@ Cypress.Commands.add('signIn', (email: string) => { }) }) +Cypress.Commands.add('loadTypebotFixtureInDatabase', (path: string) => { + return cy.fixture(path).then((typebot) => { + cy.task('loadRawTypebotInDatabase', typebot) + }) +}) + Cypress.Commands.add( 'mouseMoveBy', { diff --git a/apps/builder/cypress/support/index.ts b/apps/builder/cypress/support/index.ts index 9511e98ab0..f0e40ccc59 100644 --- a/apps/builder/cypress/support/index.ts +++ b/apps/builder/cypress/support/index.ts @@ -20,6 +20,7 @@ declare global { interface Chainable { signOut(): Chainable signIn(email: string): Chainable + loadTypebotFixtureInDatabase(path: string): Chainable mouseMoveBy( x: number, y: number, diff --git a/apps/builder/cypress/tests/account.ts b/apps/builder/cypress/tests/account.ts index fd459db636..60c3d29185 100644 --- a/apps/builder/cypress/tests/account.ts +++ b/apps/builder/cypress/tests/account.ts @@ -1,3 +1,5 @@ +import { userIds } from 'cypress/plugins/data' + describe('Dashboard page', () => { before(() => { cy.intercept({ @@ -33,7 +35,7 @@ describe('Dashboard page', () => { .should('have.attr', 'src') .should( 'include', - 'https://s3.eu-west-3.amazonaws.com/typebot/test1/avatar' + `https://s3.eu-west-3.amazonaws.com/typebot/${userIds[0]}/avatar` ) cy.findByRole('button', { name: 'Save' }).should('exist').click() cy.wait('@getUpdatedSession') @@ -43,7 +45,7 @@ describe('Dashboard page', () => { .should('have.attr', 'src') .should( 'include', - 'https://s3.eu-west-3.amazonaws.com/typebot/test1/avatar' + `https://s3.eu-west-3.amazonaws.com/typebot/${userIds[0]}/avatar` ) cy.findByRole('button', { name: 'Save' }).should('not.exist') }) diff --git a/apps/builder/cypress/tests/bubbles.ts b/apps/builder/cypress/tests/bubbles.ts index 88f9dcbc40..5d4c64bb86 100644 --- a/apps/builder/cypress/tests/bubbles.ts +++ b/apps/builder/cypress/tests/bubbles.ts @@ -1,3 +1,4 @@ +import { userIds } from 'cypress/plugins/data' import { parseTestTypebot, preventUserFromRefreshing, @@ -12,7 +13,7 @@ describe('Text bubbles', () => { parseTestTypebot({ id: 'typebot3', name: 'Typebot #3', - ownerId: 'test2', + ownerId: userIds[1], steps: { byId: { step1: { diff --git a/apps/builder/cypress/tests/inputs.ts b/apps/builder/cypress/tests/inputs.ts index 176608fd26..978dc87c77 100644 --- a/apps/builder/cypress/tests/inputs.ts +++ b/apps/builder/cypress/tests/inputs.ts @@ -1,3 +1,4 @@ +import { userIds } from 'cypress/plugins/data' import { parseTestTypebot, preventUserFromRefreshing, @@ -213,7 +214,7 @@ describe('Button input', () => { cy.signOut() }) - it('Can edit choice items', () => { + it.only('Can edit choice items', () => { cy.signIn('test2@gmail.com') cy.visit('/typebots/typebot3/edit') cy.findByDisplayValue('Click to edit').type('Item 1{enter}') @@ -249,7 +250,15 @@ describe('Button input', () => { }) it('Single choice targets should work', () => { - //TO-DO + cy.loadTypebotFixtureInDatabase('typebots/singleChoiceTarget.json') + cy.signIn('test2@gmail.com') + cy.visit('/typebots/typebot4/edit') + cy.findByRole('button', { name: 'Preview' }).click() + getIframeBody().findByRole('button', { name: 'Burgers' }).click() + getIframeBody().findByText('I love burgers!').should('exist') + cy.findByRole('button', { name: 'Restart' }).click() + getIframeBody().findByRole('button', { name: 'Carpaccio' }).click() + getIframeBody().findByText('Cool!').should('exist') }) }) @@ -259,7 +268,7 @@ const createTypebotWithStep = (step: Omit) => { parseTestTypebot({ id: 'typebot3', name: 'Typebot #3', - ownerId: 'test2', + ownerId: userIds[1], steps: { byId: { step1: {