2022-05-13 15:22:44 -07:00
|
|
|
import test, { expect } from '@playwright/test'
|
|
|
|
import cuid from 'cuid'
|
2022-06-11 07:27:38 +02:00
|
|
|
import { defaultTextInputOptions, InputBlockType } from 'models'
|
2022-10-06 08:33:46 +02:00
|
|
|
import { createTypebots } from 'utils/playwright/databaseActions'
|
2022-05-13 15:22:44 -07:00
|
|
|
import {
|
2022-09-17 16:37:33 +02:00
|
|
|
proWorkspaceId,
|
|
|
|
starterWorkspaceId,
|
2022-10-06 08:33:46 +02:00
|
|
|
} from 'utils/playwright/databaseSetup'
|
|
|
|
import { parseDefaultGroupWithBlock } from 'utils/playwright/databaseHelpers'
|
|
|
|
import { mockSessionResponsesToOtherUser } from 'utils/playwright/testHelpers'
|
2022-05-13 15:22:44 -07:00
|
|
|
|
|
|
|
const proTypebotId = cuid()
|
2022-09-17 16:37:33 +02:00
|
|
|
const starterTypebotId = cuid()
|
2022-08-08 08:21:36 +02:00
|
|
|
|
2022-05-13 15:22:44 -07:00
|
|
|
test.beforeAll(async () => {
|
|
|
|
await createTypebots([
|
|
|
|
{
|
2022-09-17 16:37:33 +02:00
|
|
|
id: proTypebotId,
|
|
|
|
name: 'Pro typebot',
|
|
|
|
workspaceId: proWorkspaceId,
|
|
|
|
},
|
|
|
|
])
|
|
|
|
await createTypebots([
|
|
|
|
{
|
|
|
|
id: starterTypebotId,
|
|
|
|
name: 'Starter typebot',
|
|
|
|
workspaceId: starterWorkspaceId,
|
2022-06-11 07:27:38 +02:00
|
|
|
...parseDefaultGroupWithBlock({
|
|
|
|
type: InputBlockType.TEXT,
|
2022-05-13 15:22:44 -07:00
|
|
|
options: {
|
|
|
|
...defaultTextInputOptions,
|
|
|
|
labels: {
|
|
|
|
...defaultTextInputOptions.labels,
|
|
|
|
placeholder: 'Hey there',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
])
|
|
|
|
})
|
|
|
|
|
|
|
|
test('can switch between workspaces and access typebot', async ({ page }) => {
|
|
|
|
await page.goto('/typebots')
|
|
|
|
await expect(page.locator('text="Pro typebot"')).toBeVisible()
|
2022-09-17 16:37:33 +02:00
|
|
|
await page.click('text=Pro workspace')
|
|
|
|
await page.click('text="Starter workspace"')
|
2022-05-13 15:22:44 -07:00
|
|
|
await expect(page.locator('text="Pro typebot"')).toBeHidden()
|
2022-09-17 16:37:33 +02:00
|
|
|
await page.click('text="Starter typebot"')
|
2022-05-13 15:22:44 -07:00
|
|
|
await expect(page.locator('text="Hey there"')).toBeVisible()
|
|
|
|
})
|
|
|
|
|
2022-05-17 08:59:02 -07:00
|
|
|
test('can create and delete a new workspace', async ({ page }) => {
|
2022-05-13 15:22:44 -07:00
|
|
|
await page.goto('/typebots')
|
2022-09-17 16:37:33 +02:00
|
|
|
await page.click('text=Pro workspace')
|
|
|
|
await expect(page.locator('text="Pro workspace" >> nth=1')).toBeHidden()
|
2022-05-13 15:22:44 -07:00
|
|
|
await page.click('text=New workspace')
|
|
|
|
await expect(page.locator('text="Pro typebot"')).toBeHidden()
|
2022-09-17 16:37:33 +02:00
|
|
|
await page.click("text=John Doe's workspace")
|
|
|
|
await expect(page.locator('text="Pro workspace"')).toBeVisible()
|
2022-05-17 08:59:02 -07:00
|
|
|
await page.click('text=Settings & Members')
|
|
|
|
await page.click('text="Settings"')
|
|
|
|
await page.click('text="Delete workspace"')
|
|
|
|
await expect(
|
|
|
|
page.locator(
|
2022-09-17 16:37:33 +02:00
|
|
|
"text=Are you sure you want to delete John Doe's workspace workspace?"
|
2022-05-17 08:59:02 -07:00
|
|
|
)
|
|
|
|
).toBeVisible()
|
|
|
|
await page.click('text="Delete"')
|
2022-09-17 16:37:33 +02:00
|
|
|
await expect(page.locator('text=Free workspace')).toBeVisible()
|
|
|
|
await page.click('text=Free workspace')
|
2022-05-17 08:59:02 -07:00
|
|
|
await expect(
|
2022-09-17 16:37:33 +02:00
|
|
|
page.locator('text="John Doe\'s workspace" >> nth=1')
|
2022-05-17 08:59:02 -07:00
|
|
|
).toBeHidden()
|
2022-05-13 15:22:44 -07:00
|
|
|
})
|
|
|
|
|
|
|
|
test('can update workspace info', async ({ page }) => {
|
|
|
|
await page.goto('/typebots')
|
|
|
|
await page.click('text=Settings & Members')
|
|
|
|
await page.click('text="Settings"')
|
|
|
|
await page.click('[data-testid="editable-icon"]')
|
|
|
|
await page.fill('input[placeholder="Search..."]', 'building')
|
|
|
|
await page.click('text="🏦"')
|
2022-11-09 15:08:42 +01:00
|
|
|
await page.waitForTimeout(500)
|
2022-09-17 16:37:33 +02:00
|
|
|
await page.fill('input[value="Pro workspace"]', 'My awesome workspace')
|
2022-10-10 08:28:11 +02:00
|
|
|
await page.getByTestId('typebot-logo').click({ force: true })
|
|
|
|
await expect(
|
|
|
|
page.getByRole('button', { name: '🏦 My awesome workspace Pro' })
|
|
|
|
).toBeVisible()
|
2022-05-13 15:22:44 -07:00
|
|
|
})
|
|
|
|
|
|
|
|
test('can manage members', async ({ page }) => {
|
|
|
|
await page.goto('/typebots')
|
|
|
|
await page.click('text=Settings & Members')
|
|
|
|
await page.click('text="Members"')
|
2022-11-02 19:45:46 +01:00
|
|
|
await expect(page.locator('text="user@email.com"').nth(1)).toBeVisible()
|
2022-05-13 15:22:44 -07:00
|
|
|
await expect(page.locator('button >> text="Invite"')).toBeEnabled()
|
|
|
|
await page.fill(
|
|
|
|
'input[placeholder="colleague@company.com"]',
|
|
|
|
'guest@email.com'
|
|
|
|
)
|
|
|
|
await page.click('button >> text="Invite"')
|
|
|
|
await expect(page.locator('button >> text="Invite"')).toBeEnabled()
|
|
|
|
await expect(
|
|
|
|
page.locator('input[placeholder="colleague@company.com"]')
|
|
|
|
).toHaveAttribute('value', '')
|
|
|
|
await expect(page.locator('text="guest@email.com"')).toBeVisible()
|
|
|
|
await expect(page.locator('text="Pending"')).toBeVisible()
|
2022-10-27 11:32:21 +02:00
|
|
|
await expect(
|
|
|
|
page.getByRole('heading', { name: 'Members (2/5)' })
|
|
|
|
).toBeVisible()
|
2022-05-13 15:22:44 -07:00
|
|
|
await page.fill(
|
|
|
|
'input[placeholder="colleague@company.com"]',
|
2022-09-17 16:37:33 +02:00
|
|
|
'other-user@email.com'
|
2022-05-13 15:22:44 -07:00
|
|
|
)
|
|
|
|
await page.click('text="Member" >> nth=0')
|
|
|
|
await page.click('text="Admin"')
|
|
|
|
await page.click('button >> text="Invite"')
|
|
|
|
await expect(
|
|
|
|
page.locator('input[placeholder="colleague@company.com"]')
|
|
|
|
).toHaveAttribute('value', '')
|
2022-09-17 16:37:33 +02:00
|
|
|
await expect(page.locator('text="other-user@email.com"')).toBeVisible()
|
|
|
|
await expect(page.locator('text="James Doe"')).toBeVisible()
|
2022-10-27 11:32:21 +02:00
|
|
|
await expect(
|
|
|
|
page.getByRole('heading', { name: 'Members (3/5)' })
|
|
|
|
).toBeVisible()
|
2022-05-13 15:22:44 -07:00
|
|
|
|
2022-09-17 16:37:33 +02:00
|
|
|
await page.click('text="other-user@email.com"')
|
2022-05-13 15:22:44 -07:00
|
|
|
await page.click('button >> text="Member"')
|
|
|
|
await expect(page.locator('[data-testid="tag"] >> text="Admin"')).toHaveCount(
|
|
|
|
1
|
|
|
|
)
|
2022-09-17 16:37:33 +02:00
|
|
|
await page.click('text="other-user@email.com"')
|
2022-05-13 15:22:44 -07:00
|
|
|
|
|
|
|
await page.click('text="guest@email.com"')
|
|
|
|
await page.click('text="Admin" >> nth=-1')
|
|
|
|
await expect(page.locator('[data-testid="tag"] >> text="Admin"')).toHaveCount(
|
|
|
|
2
|
|
|
|
)
|
|
|
|
await page.click('text="guest@email.com"')
|
|
|
|
await page.click('button >> text="Remove"')
|
|
|
|
await expect(page.locator('text="guest@email.com"')).toBeHidden()
|
|
|
|
|
2022-09-24 08:58:23 +02:00
|
|
|
await mockSessionResponsesToOtherUser(page)
|
2022-05-13 15:22:44 -07:00
|
|
|
await page.goto('/typebots')
|
|
|
|
await page.click('text=Settings & Members')
|
|
|
|
await expect(page.locator('text="Settings"')).toBeHidden()
|
|
|
|
await page.click('text="Members"')
|
2022-09-17 16:37:33 +02:00
|
|
|
await expect(page.locator('text="other-user@email.com"')).toBeVisible()
|
2022-05-13 15:22:44 -07:00
|
|
|
await expect(
|
|
|
|
page.locator('input[placeholder="colleague@company.com"]')
|
|
|
|
).toBeHidden()
|
2022-09-17 16:37:33 +02:00
|
|
|
await page.click('text="other-user@email.com"')
|
2022-05-13 15:22:44 -07:00
|
|
|
await expect(page.locator('button >> text="Remove"')).toBeHidden()
|
|
|
|
})
|
2022-09-17 16:37:33 +02:00
|
|
|
|
|
|
|
test("can't add new members when limit is reached", async ({ page }) => {
|
|
|
|
await page.goto('/typebots')
|
2022-10-01 08:36:49 +02:00
|
|
|
await page.click('text="My awesome workspace"')
|
2022-09-17 16:37:33 +02:00
|
|
|
await page.click('text="Free workspace"')
|
|
|
|
await page.click('text=Settings & Members')
|
|
|
|
await page.click('text="Members"')
|
|
|
|
await expect(page.locator('button >> text="Invite"')).toBeDisabled()
|
|
|
|
await expect(
|
|
|
|
page.locator(
|
|
|
|
'text="Upgrade your plan to work with more team members, and unlock awesome power features 🚀"'
|
|
|
|
)
|
|
|
|
).toBeVisible()
|
|
|
|
await page.click('text="Free workspace"', { force: true })
|
|
|
|
await page.click('text="Free workspace"')
|
|
|
|
await page.click('text="Starter workspace"')
|
|
|
|
await page.click('text=Settings & Members')
|
|
|
|
await page.click('text="Members"')
|
|
|
|
await page.fill(
|
|
|
|
'input[placeholder="colleague@company.com"]',
|
|
|
|
'guest@email.com'
|
|
|
|
)
|
|
|
|
await page.click('button >> text="Invite"')
|
|
|
|
await expect(
|
|
|
|
page.locator(
|
|
|
|
'text="Upgrade your plan to work with more team members, and unlock awesome power features 🚀"'
|
|
|
|
)
|
|
|
|
).toBeVisible()
|
|
|
|
await expect(page.locator('button >> text="Invite"')).toBeDisabled()
|
|
|
|
})
|