whiteboards.spec.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import { expect } from '@playwright/test'
  2. import { test } from './fixtures'
  3. import { IsMac } from './utils'
  4. test('enable whiteboards', async ({ page }) => {
  5. await page.evaluate(() => {
  6. window.localStorage.removeItem('ls-onboarding-whiteboard?')
  7. })
  8. await expect(page.locator('.nav-header .whiteboard')).toBeHidden()
  9. await page.click('#head .toolbar-dots-btn')
  10. await page.click('#head .dropdown-wrapper >> text=Settings')
  11. await page.click('.settings-modal a[data-id=features]')
  12. await page.click('text=Whiteboards >> .. >> .ui__toggle')
  13. await page.keyboard.press('Escape')
  14. await expect(page.locator('.nav-header .whiteboard')).toBeVisible()
  15. })
  16. test('create new whiteboard', async ({ page }) => {
  17. await page.click('.nav-header .whiteboard')
  18. await page.click('#tl-create-whiteboard')
  19. await expect(page.locator('.logseq-tldraw')).toBeVisible()
  20. })
  21. test('check if the page contains the onboarding whiteboard', async ({
  22. page,
  23. }) => {
  24. await expect(
  25. page.locator('.tl-text-shape-wrapper >> text=Welcome to')
  26. ).toHaveCount(1)
  27. })
  28. test('cleanup the shapes', async ({ page }) => {
  29. if (IsMac) {
  30. await page.keyboard.press('Meta+a')
  31. } else {
  32. await page.keyboard.press('Control+a')
  33. }
  34. await page.keyboard.press('Delete')
  35. await expect(page.locator('[data-type=Shape]')).toHaveCount(0)
  36. })
  37. test('can right click title to show context menu', async ({ page }) => {
  38. await page.click('.whiteboard-page-title', {
  39. button: 'right',
  40. })
  41. await expect(page.locator('#custom-context-menu')).toBeVisible()
  42. await page.keyboard.press('Escape')
  43. await expect(page.locator('#custom-context-menu')).toHaveCount(0)
  44. })
  45. test('set whiteboard title', async ({ page }) => {
  46. const title = 'my-whiteboard'
  47. // Newly created whiteboard should have a default title
  48. await expect(page.locator('.whiteboard-page-title .title')).toContainText(
  49. 'Untitled'
  50. )
  51. await page.click('.whiteboard-page-title')
  52. await page.fill('.whiteboard-page-title input', title)
  53. await page.keyboard.press('Enter')
  54. await expect(page.locator('.whiteboard-page-title .title')).toContainText(
  55. title
  56. )
  57. await page.click('.whiteboard-page-title')
  58. await page.fill('.whiteboard-page-title input', title + '-2')
  59. await page.keyboard.press('Enter')
  60. // Updating non-default title should pop up a confirmation dialog
  61. await expect(page.locator('.ui__confirm-modal >> .headline')).toContainText(
  62. `Do you really want to change the page name to “${title}-2”?`
  63. )
  64. await page.click('.ui__confirm-modal button')
  65. await expect(page.locator('.whiteboard-page-title .title')).toContainText(
  66. title + '-2'
  67. )
  68. })
  69. test('draw a rectangle', async ({ page }) => {
  70. const canvas = await page.waitForSelector('.logseq-tldraw')
  71. const bounds = (await canvas.boundingBox())!
  72. await page.keyboard.press('r')
  73. await page.mouse.move(bounds.x + 5, bounds.y + 5)
  74. await page.mouse.down()
  75. await page.mouse.move(
  76. bounds.x + bounds.width / 2,
  77. bounds.y + bounds.height / 2
  78. )
  79. await page.mouse.up()
  80. await expect(
  81. page.locator('.logseq-tldraw .tl-positioned-svg rect')
  82. ).not.toHaveCount(0)
  83. })
  84. test('zoom in', async ({ page }) => {
  85. await page.click('#tl-zoom-in')
  86. await expect(page.locator('#tl-zoom')).toContainText('125%')
  87. })
  88. test('zoom out', async ({ page }) => {
  89. await page.click('#tl-zoom-out')
  90. await expect(page.locator('#tl-zoom')).toContainText('100%')
  91. })
  92. test('open context menu', async ({ page }) => {
  93. await page.locator('.logseq-tldraw').click({ button: 'right' })
  94. await expect(page.locator('.tl-context-menu')).toBeVisible()
  95. })
  96. test('close context menu on esc', async ({ page }) => {
  97. await page.keyboard.press('Escape')
  98. await expect(page.locator('.tl-context-menu')).toBeHidden()
  99. })
  100. test('quick add another whiteboard', async ({ page }) => {
  101. // create a new board first
  102. await page.click('.nav-header .whiteboard')
  103. await page.click('#tl-create-whiteboard')
  104. await page.click('.whiteboard-page-title')
  105. await page.fill('.whiteboard-page-title input', 'my-whiteboard-3')
  106. await page.keyboard.press('Enter')
  107. const canvas = await page.waitForSelector('.logseq-tldraw')
  108. await canvas.dblclick({
  109. position: {
  110. x: 100,
  111. y: 100,
  112. },
  113. })
  114. const quickAdd$ = page.locator('.tl-quick-search')
  115. await expect(quickAdd$).toBeVisible()
  116. await page.fill('.tl-quick-search input', 'my-whiteboard')
  117. await quickAdd$
  118. .locator('.tl-quick-search-option >> text=my-whiteboard-2')
  119. .first()
  120. .click()
  121. await expect(quickAdd$).toBeHidden()
  122. await expect(
  123. page.locator('.tl-logseq-portal-container >> text=my-whiteboard-2')
  124. ).toBeVisible()
  125. })
  126. test('go to another board and check reference', async ({ page }) => {
  127. await page
  128. .locator('.tl-logseq-portal-container >> text=my-whiteboard-2')
  129. .click()
  130. await expect(page.locator('.whiteboard-page-title .title')).toContainText(
  131. 'my-whiteboard-2'
  132. )
  133. const pageRefCount$ = page.locator('.whiteboard-page-refs-count')
  134. await expect(pageRefCount$.locator('.open-page-ref-link')).toContainText('1')
  135. await pageRefCount$.click()
  136. await expect(page.locator('.references-blocks')).toBeVisible()
  137. await expect(
  138. page.locator('.references-blocks >> .page-ref >> text=my-whiteboard-3')
  139. ).toBeVisible()
  140. })