plugins.spec.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { expect } from '@playwright/test'
  2. import { test } from './fixtures'
  3. import { callPageAPI } from './utils'
  4. /**
  5. * load local tests plugin
  6. */
  7. export async function loadLocalE2eTestsPlugin(page) {
  8. const pid = 'a-logseq-plugin-for-e2e-tests'
  9. const hasLoaded = await page.evaluate(async ([pid]) => {
  10. // @ts-ignore
  11. const p = window.LSPluginCore.registeredPlugins.get(pid)
  12. // @ts-ignore
  13. await window.LSPluginCore.enable(pid)
  14. return p != null
  15. }, [pid])
  16. if (hasLoaded) return true
  17. await callPageAPI(page, 'set_state_from_store',
  18. 'ui/developer-mode?', true)
  19. await page.keyboard.press('t+p')
  20. await page.locator('text=Load unpacked plugin')
  21. await callPageAPI(page, 'set_state_from_store',
  22. 'plugin/selected-unpacked-pkg', `${__dirname}/plugin`)
  23. await page.keyboard.press('Escape')
  24. await page.keyboard.press('Escape')
  25. }
  26. test.skip('enabled plugin system default', async ({ page }) => {
  27. const callAPI = callPageAPI.bind(null, page)
  28. const pluginEnabled = await callAPI('get_state_from_store', 'plugin/enabled')
  29. await expect(pluginEnabled).toBe(true)
  30. expect(await page.evaluate(`typeof logseq.api.get_current_graph`))
  31. .toBe('function')
  32. const currentGraph = await callAPI('get_current_graph')
  33. expect(Object.keys(currentGraph)).toEqual(['url', 'name', 'path'])
  34. })
  35. test.skip('play a plugin<logseq-journals-calendar> from the Marketplace', async ({ page }) => {
  36. await page.keyboard.press('t+p')
  37. const searchInput = page.locator('.search-ctls .form-input')
  38. await searchInput.type('journals')
  39. const pluginCards = page.locator('.cp__plugins-item-card')
  40. if (await pluginCards.count()) {
  41. await pluginCards.locator('.ctl .ls-icon-settings').hover()
  42. await page.locator('text=Uninstall').click()
  43. const confirmYes = page.locator('button').locator('text=Yes')
  44. await confirmYes.click()
  45. }
  46. // install a plugin from Marketplace
  47. await page.locator('button').locator('text=Marketplace').click()
  48. await page.locator('text=Journals calendar')
  49. await page.locator('.cp__plugins-item-card').first().locator('text=Install').click()
  50. // wait for the plugin installed
  51. await page.locator('.cp__plugins-item-card').first().locator('text=Installed')
  52. await page.locator('a.ui__modal-close').click()
  53. // toolbar plugins manager
  54. const pluginFlag = page.locator('.toolbar-plugins-manager-trigger')
  55. await expect(pluginFlag).toBeVisible()
  56. await pluginFlag.click()
  57. await expect(pluginFlag.locator('text=Plugins')).toBeVisible()
  58. await expect(pluginFlag.locator('text=Settings')).toBeVisible()
  59. await page.locator('text=goto-today').click()
  60. await page.locator('body').click()
  61. const goToToday = page.locator('#logseq-journals-calendar--goto-today').locator('a.button')
  62. await expect(goToToday).toBeVisible()
  63. await goToToday.click()
  64. // TODO: debug
  65. await expect(page.locator('body[data-page="page"]')).toBeVisible()
  66. })
  67. test(`play a plugin from local`, async ({ page }) => {
  68. const callAPI = callPageAPI.bind(null, page)
  69. const _pLoaded = await loadLocalE2eTestsPlugin(page)
  70. const loc = page.locator('#a-plugin-for-e2e-tests')
  71. await loc.waitFor({ state: 'visible' })
  72. await callAPI(`push_state`, 'page', {name: 'contents'})
  73. const b = await callAPI(`append_block_in_page`, 'Contents', 'target e2e block')
  74. expect(typeof b?.uuid).toBe('string')
  75. await expect(page.locator('text=[DB] hook: changed')).toBeVisible()
  76. // 65a0beee-7e01-4e72-8d38-089d923a63de
  77. await callAPI(`insert_block`, b.uuid,
  78. 'new custom uuid block', { customUUID: '65a0beee-7e01-4e72-8d38-089d923a63de' })
  79. await expect(page.locator('text=[DB] hook: block changed')).toBeVisible()
  80. // await page.waitForSelector('#test-pause')
  81. })