✨ Allow user to share a flow publicly and make it duplicatable
Closes #360
This commit is contained in:
@@ -35,7 +35,7 @@ test('should work as expected', async ({ page }) => {
|
||||
'gm'
|
||||
)
|
||||
)
|
||||
await page.getByRole('button', { name: 'Preview', exact: true }).click()
|
||||
await page.getByRole('button', { name: 'Test', exact: true }).click()
|
||||
await expect(page.locator('audio')).toHaveAttribute(
|
||||
'src',
|
||||
RegExp(
|
||||
|
||||
@@ -44,7 +44,7 @@ test.describe.parallel('Embed bubble block', () => {
|
||||
])
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(page.locator('iframe#embed-bubble-content')).toHaveAttribute(
|
||||
'src',
|
||||
siteSrc
|
||||
|
||||
@@ -116,7 +116,7 @@ test.describe.parallel('Image bubble block', () => {
|
||||
])
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(page.locator('img')).toHaveAttribute('src', unsplashImageSrc)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -49,7 +49,7 @@ test.describe('Text bubble block', () => {
|
||||
await page.fill('[data-testid="variables-input"]', 'test')
|
||||
await page.getByRole('menuitem', { name: 'Create test' }).click()
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(page.locator('span.slate-bold >> nth=0')).toHaveText(
|
||||
'Bold text'
|
||||
)
|
||||
|
||||
@@ -51,7 +51,7 @@ test.describe.parallel('Video bubble block', () => {
|
||||
])
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(page.locator('video').nth(1)).toHaveAttribute(
|
||||
'src',
|
||||
videoSrc
|
||||
@@ -75,7 +75,7 @@ test.describe.parallel('Video bubble block', () => {
|
||||
])
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(page.locator('iframe').nth(1)).toHaveAttribute(
|
||||
'src',
|
||||
'https://www.youtube.com/embed/dQw4w9WgXcQ'
|
||||
@@ -99,7 +99,7 @@ test.describe.parallel('Video bubble block', () => {
|
||||
])
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(page.locator('iframe').nth(1)).toHaveAttribute(
|
||||
'src',
|
||||
'https://player.vimeo.com/video/649301125'
|
||||
|
||||
@@ -37,7 +37,7 @@ test.describe.parallel('Buttons input block', () => {
|
||||
await page.click('text=Delete')
|
||||
await expect(page.locator('text=Item 2')).toBeHidden()
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await page.getByRole('button', { name: 'Item 3' }).click()
|
||||
await expect(page.getByRole('button', { name: 'Item 3' })).toBeHidden()
|
||||
await expect(page.getByTestId('guest-bubble')).toHaveText('Item 3')
|
||||
@@ -57,7 +57,7 @@ test.describe.parallel('Buttons input block', () => {
|
||||
await page.fill('input[value="Click to edit"]', 'Item 2')
|
||||
await page.press('input[value="Item 2"]', 'Enter')
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
|
||||
await page.getByRole('checkbox', { name: 'Item 3' }).click()
|
||||
await page.getByRole('checkbox', { name: 'Item 1' }).click()
|
||||
@@ -77,7 +77,7 @@ test('Variable buttons should work', async ({ page }) => {
|
||||
)
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await page.getByRole('button', { name: 'Variable item' }).click()
|
||||
await expect(page.getByTestId('guest-bubble')).toHaveText('Variable item')
|
||||
await expect(page.locator('text=Ok great!')).toBeVisible()
|
||||
|
||||
@@ -18,7 +18,7 @@ test.describe('Date input block', () => {
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(page.locator('[data-testid="from-date"]')).toHaveAttribute(
|
||||
'type',
|
||||
'date'
|
||||
|
||||
@@ -19,7 +19,7 @@ test.describe('Email input block', () => {
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(
|
||||
page.locator(
|
||||
`input[placeholder="${defaultEmailInputOptions.labels.placeholder}"]`
|
||||
|
||||
@@ -21,7 +21,7 @@ test('options should work', async ({ page }) => {
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(page.locator(`text=Click to upload`)).toBeVisible()
|
||||
await expect(page.locator(`text="Skip"`)).toBeHidden()
|
||||
await page
|
||||
|
||||
@@ -19,7 +19,7 @@ test.describe('Number input block', () => {
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(
|
||||
page.locator(
|
||||
`input[placeholder="${defaultNumberInputOptions.labels.placeholder}"]`
|
||||
|
||||
@@ -43,7 +43,7 @@ test.describe('Payment input block', () => {
|
||||
await page.fill('[placeholder="john@gmail.com"]', 'test@typebot.io')
|
||||
await expect(page.locator('text="Phone number:"')).toBeVisible()
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await stripePaymentForm(page)
|
||||
.locator(`[placeholder="1234 1234 1234 1234"]`)
|
||||
.fill('4000000000000002')
|
||||
|
||||
@@ -19,7 +19,7 @@ test.describe('Phone input block', () => {
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(
|
||||
page.locator(
|
||||
`input[placeholder="${defaultPhoneInputOptions.labels.placeholder}"]`
|
||||
|
||||
@@ -54,7 +54,7 @@ test.describe.parallel('Picture choice input block', () => {
|
||||
await page.getByPlaceholder('Paste the image link...').fill(thirdImageSrc)
|
||||
await page.getByLabel('Title:').fill('Third image')
|
||||
await page.getByLabel('Description:').fill('Third description')
|
||||
await page.getByRole('button', { name: 'Preview' }).click()
|
||||
await page.getByRole('button', { name: 'Test' }).click()
|
||||
await expect(
|
||||
page.getByRole('button', {
|
||||
name: 'First image First image First description',
|
||||
|
||||
@@ -30,7 +30,7 @@ test('options should work', async ({ page }) => {
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(page.locator(`text=Send`)).toBeHidden()
|
||||
await page.getByRole('button', { name: '8' }).click()
|
||||
await page.locator(`text=Send`).click()
|
||||
|
||||
@@ -19,7 +19,7 @@ test.describe.parallel('Text input block', () => {
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(
|
||||
page.locator(
|
||||
`input[placeholder="${defaultTextInputOptions.labels.placeholder}"]`
|
||||
|
||||
@@ -19,7 +19,7 @@ test.describe('Url input block', () => {
|
||||
|
||||
await page.goto(`/typebots/${typebotId}/edit`)
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(
|
||||
page.locator(
|
||||
`input[placeholder="${defaultUrlInputOptions.labels.placeholder}"]`
|
||||
|
||||
@@ -34,7 +34,7 @@ test.describe('Chatwoot block', () => {
|
||||
await page.getByLabel('Email').fill('john@email.com')
|
||||
await page.getByLabel('Avatar URL').fill('https://domain.com/avatar.png')
|
||||
await page.getByLabel('Phone number').fill('+33654347543')
|
||||
await page.getByRole('button', { name: 'Preview', exact: true }).click()
|
||||
await page.getByRole('button', { name: 'Test', exact: true }).click()
|
||||
await expect(
|
||||
page.getByText('Chatwoot block is not supported in preview').nth(0)
|
||||
).toBeVisible()
|
||||
|
||||
@@ -31,7 +31,7 @@ test.describe.parallel('Google sheets integration', () => {
|
||||
'Georges'
|
||||
)
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await page
|
||||
.locator('typebot-standard')
|
||||
.locator('input[placeholder="Type your email..."]')
|
||||
@@ -76,7 +76,7 @@ test.describe.parallel('Google sheets integration', () => {
|
||||
'Last name'
|
||||
)
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await page
|
||||
.locator('typebot-standard')
|
||||
.locator('input[placeholder="Type your email..."]')
|
||||
@@ -132,7 +132,7 @@ test.describe.parallel('Google sheets integration', () => {
|
||||
await page.getByRole('menuitem', { name: 'Last name' }).click()
|
||||
await createNewVar(page, 'Last name')
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await page
|
||||
.locator('typebot-standard')
|
||||
.locator('input[placeholder="Type your email..."]')
|
||||
|
||||
@@ -28,7 +28,7 @@ test.describe('Pixel block', () => {
|
||||
await page.getByRole('button', { name: 'Select key' }).click()
|
||||
await page.getByRole('menuitem', { name: 'currency' }).click()
|
||||
await page.getByPlaceholder('Value').fill('USD')
|
||||
await page.getByRole('button', { name: 'Preview' }).click()
|
||||
await page.getByRole('button', { name: 'Test' }).click()
|
||||
await expect(
|
||||
page.getByText('Pixel is not enabled in Preview mode').nth(1)
|
||||
).toBeVisible()
|
||||
|
||||
@@ -59,7 +59,7 @@ test.describe('Send email block', () => {
|
||||
await page.click('text="Custom content?"')
|
||||
await page.locator('textarea').fill('Here is my email')
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await page.locator('typebot-standard').locator('text=Go').click()
|
||||
await expect(
|
||||
page.locator('text=Emails are not sent in preview mode >> nth=0')
|
||||
|
||||
@@ -11,7 +11,7 @@ export const getResultExample = authenticatedProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
method: 'GET',
|
||||
path: '/typebots/{typebotId}/webhookBlocks/{blockId}/getResultExample',
|
||||
path: '/v1/typebots/{typebotId}/webhookBlocks/{blockId}/getResultExample',
|
||||
protect: true,
|
||||
summary: 'Get result example',
|
||||
description:
|
||||
|
||||
@@ -12,7 +12,7 @@ export const listWebhookBlocks = authenticatedProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
method: 'GET',
|
||||
path: '/typebots/{typebotId}/webhookBlocks',
|
||||
path: '/v1/typebots/{typebotId}/webhookBlocks',
|
||||
protect: true,
|
||||
summary: 'List webhook blocks',
|
||||
description:
|
||||
|
||||
@@ -10,7 +10,7 @@ export const subscribeWebhook = authenticatedProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
method: 'POST',
|
||||
path: '/typebots/{typebotId}/webhookBlocks/{blockId}/subscribe',
|
||||
path: '/v1/typebots/{typebotId}/webhookBlocks/{blockId}/subscribe',
|
||||
protect: true,
|
||||
summary: 'Subscribe to webhook block',
|
||||
tags: ['Webhook'],
|
||||
|
||||
@@ -10,7 +10,7 @@ export const unsubscribeWebhook = authenticatedProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
method: 'POST',
|
||||
path: '/typebots/{typebotId}/webhookBlocks/{blockId}/unsubscribe',
|
||||
path: '/v1/typebots/{typebotId}/webhookBlocks/{blockId}/unsubscribe',
|
||||
protect: true,
|
||||
summary: 'Unsubscribe from webhook block',
|
||||
tags: ['Webhook'],
|
||||
|
||||
@@ -20,7 +20,7 @@ export const ProjectsDropdown = ({
|
||||
const { workspace } = useWorkspace()
|
||||
const { showToast } = useToast()
|
||||
|
||||
const { data } = trpc.zemanticAi.listProjects.useQuery(
|
||||
const { data } = trpc.zemanticAI.listProjects.useQuery(
|
||||
{
|
||||
credentialsId,
|
||||
workspaceId: workspace?.id as string,
|
||||
|
||||
@@ -16,7 +16,7 @@ test.describe('AB Test block', () => {
|
||||
await page.getByLabel('Percent of users to follow A:').fill('100')
|
||||
await expect(page.getByText('A 100%')).toBeVisible()
|
||||
await expect(page.getByText('B 0%')).toBeVisible()
|
||||
await page.getByRole('button', { name: 'Preview' }).click()
|
||||
await page.getByRole('button', { name: 'Test' }).click()
|
||||
await expect(
|
||||
page.locator('typebot-standard').getByText('How are you?')
|
||||
).toBeVisible()
|
||||
|
||||
@@ -49,7 +49,7 @@ test.describe('Condition block', () => {
|
||||
await page.click('button:has-text("Greater than")', { force: true })
|
||||
await page.fill('input[placeholder="Type a number..."]', '20')
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await page
|
||||
.locator('typebot-standard')
|
||||
.locator('input[placeholder="Type a number..."]')
|
||||
|
||||
@@ -16,7 +16,7 @@ test('should work as expected', async ({ page }) => {
|
||||
await page.getByRole('menuitem', { name: 'Group #1' }).click()
|
||||
await page.getByPlaceholder('Select a block').click()
|
||||
await page.getByRole('menuitem', { name: 'Block #2' }).click()
|
||||
await page.getByRole('button', { name: 'Preview' }).click()
|
||||
await page.getByRole('button', { name: 'Test' }).click()
|
||||
await page.getByPlaceholder('Type your answer...').fill('Hi there!')
|
||||
await page.getByRole('button', { name: 'Send' }).click()
|
||||
await expect(
|
||||
|
||||
@@ -18,7 +18,7 @@ test.describe('Redirect block', () => {
|
||||
await page.click('text=Configure...')
|
||||
await page.fill('input[placeholder="Type a URL..."]', 'google.com')
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await page.locator('typebot-standard').locator('text=Go to URL').click()
|
||||
await expect(page).toHaveURL('https://www.google.com')
|
||||
await page.goBack()
|
||||
@@ -26,7 +26,7 @@ test.describe('Redirect block', () => {
|
||||
await page.click('text=Redirect to google.com')
|
||||
await page.click('text=Open in new tab')
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
const [newPage] = await Promise.all([
|
||||
context.waitForEvent('page'),
|
||||
page.locator('typebot-standard').locator('text=Go to URL').click(),
|
||||
|
||||
@@ -18,7 +18,7 @@ test.describe('Script block', () => {
|
||||
'window.location.href = "https://www.google.com"'
|
||||
)
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await page.getByRole('button', { name: 'Trigger code' }).click()
|
||||
await expect(page).toHaveURL('https://www.google.com')
|
||||
})
|
||||
|
||||
@@ -49,7 +49,7 @@ test.describe('Set variable block', () => {
|
||||
.getByRole('textbox')
|
||||
.fill('1000 + {{Total}}')
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await page
|
||||
.locator('typebot-standard')
|
||||
.locator('input[placeholder="Type a number..."]')
|
||||
|
||||
@@ -32,7 +32,7 @@ export const getLinkedTypebots = authenticatedProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
method: 'GET',
|
||||
path: '/typebots/{typebotId}/linkedTypebots',
|
||||
path: '/v1/typebots/{typebotId}/linkedTypebots',
|
||||
protect: true,
|
||||
summary: 'Get linked typebots',
|
||||
tags: ['Typebot'],
|
||||
|
||||
@@ -35,7 +35,7 @@ test('should be configurable', async ({ page }) => {
|
||||
await page.click('input[placeholder="Select a group"]')
|
||||
await page.click('text=Group #2')
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(
|
||||
page.locator('typebot-standard').locator('text=Second block')
|
||||
).toBeVisible()
|
||||
@@ -45,7 +45,7 @@ test('should be configurable', async ({ page }) => {
|
||||
await page.getByTestId('selected-item-label').nth(1).click({ force: true })
|
||||
await page.click('button >> text=Start')
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await page.locator('typebot-standard').locator('input').fill('Hello there!')
|
||||
await page.locator('typebot-standard').locator('input').press('Enter')
|
||||
await expect(
|
||||
@@ -60,7 +60,7 @@ test('should be configurable', async ({ page }) => {
|
||||
await page.getByRole('textbox').nth(1).click()
|
||||
await page.click('button >> text=Hello')
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await expect(
|
||||
page.locator('typebot-standard').locator('text=Hello world')
|
||||
).toBeVisible()
|
||||
|
||||
@@ -15,7 +15,7 @@ test.describe('Wait block', () => {
|
||||
await page.click('text=Configure...')
|
||||
await page.getByRole('textbox', { name: 'Seconds to wait for:' }).fill('3')
|
||||
|
||||
await page.click('text=Preview')
|
||||
await page.click('text=Test')
|
||||
await page.getByRole('button', { name: 'Wait now' }).click()
|
||||
await page.waitForTimeout(1000)
|
||||
await expect(
|
||||
|
||||
Reference in New Issue
Block a user