logseq-api.spec.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import { test } from './fixtures'
  2. import { expect } from '@playwright/test'
  3. import { callPageAPI } from './utils'
  4. import { Page } from 'playwright'
  5. async function createDBGraph(page: Page) {
  6. await page.locator(`a.cp__repos-select-trigger`).click()
  7. await page.click('text="Create db graph"')
  8. await page.waitForSelector('.new-graph')
  9. const name = `e2e-db-${Date.now()}`
  10. await page.keyboard.type(name)
  11. await page.locator('.new-graph > .ui__button').click()
  12. return name
  13. }
  14. test.skip('test db graph', async ({ page }) => {
  15. const name = await createDBGraph(page)
  16. await page.waitForSelector(`a[title="logseq_db_${name}"]`)
  17. await page.pause()
  18. })
  19. test('block related apis',
  20. async ({ page }) => {
  21. const name = await createDBGraph(page)
  22. await page.waitForSelector(`a[title="logseq_db_${name}"]`)
  23. const callAPI = callPageAPI.bind(null, page)
  24. const bPageName = 'block-test-page'
  25. await callAPI('create_page', bPageName, null, { createFirstBlock: false })
  26. await callAPI('create_page', bPageName, null, { createFirstBlock: false })
  27. await page.waitForSelector(`body[data-page="${bPageName}"]`)
  28. let p = await callAPI('get_current_page')
  29. const bp = await callAPI('append_block_in_page', bPageName, 'tests')
  30. expect(p.name).toBe(bPageName)
  31. p = await callAPI('get_page', bPageName)
  32. expect(p.name).toBe(bPageName)
  33. await callAPI('edit_block', bp.uuid)
  34. const b = (await callAPI('get_current_block'))
  35. expect(Object.keys(b)).toContain('uuid')
  36. await page.waitForSelector('.block-editor > textarea')
  37. await page.locator('.block-editor > textarea').fill('')
  38. const content = 'test api'
  39. await page.type('.block-editor > textarea', content)
  40. const editingContent = await callAPI('get_editing_block_content')
  41. expect(editingContent).toBe(content)
  42. // create
  43. let b1 = await callAPI('insert_block', b.uuid, content)
  44. b1 = await callAPI('get_block', b1.uuid)
  45. expect(b1.parent.id).toBe(b.id)
  46. // update
  47. const content1 = content + '+ update!'
  48. await callAPI('update_block', b1.uuid, content1)
  49. b1 = await callAPI('get_block', b1.uuid)
  50. expect(b1.content).toBe(content1)
  51. // remove
  52. await callAPI('remove_block', b1.uuid)
  53. b1 = await callAPI('get_block', b1.uuid)
  54. expect(b1).toBeNull()
  55. // traverse
  56. b1 = await callAPI('insert_block', b.uuid, content1, { sibling: true })
  57. const nb = await callAPI('get_next_sibling_block', b.uuid)
  58. const pb = await callAPI('get_previous_sibling_block', b1.uuid)
  59. expect(nb.uuid).toBe(b1.uuid)
  60. expect(pb.uuid).toBe(b.uuid)
  61. // move
  62. await callAPI('move_block', b.uuid, b1.uuid)
  63. const mb = await callAPI('get_next_sibling_block', b1.uuid)
  64. expect(mb.uuid).toBe(b.uuid)
  65. // properties
  66. await callAPI('upsert_block_property', b1.uuid, 'a', 1)
  67. let prop1 = await callAPI('get_block_property', b1.uuid, 'a')
  68. expect(prop1).toBe(1)
  69. await callAPI('upsert_block_property', b1.uuid, 'a', 2)
  70. prop1 = await callAPI('get_block_property', b1.uuid, 'a')
  71. expect(prop1).toBe(2)
  72. await callAPI('remove_block_property', b1.uuid, 'a')
  73. prop1 = await callAPI('get_block_property', b1.uuid, 'a')
  74. expect(prop1).toBeNull()
  75. await callAPI('upsert_block_property', b1.uuid, 'a', 1)
  76. await callAPI('upsert_block_property', b1.uuid, 'b', 1)
  77. prop1 = await callAPI('get_block_properties', b1.uuid)
  78. expect(prop1).toEqual({ a: 1, b: 1 })
  79. // await page.pause()
  80. })
  81. /**
  82. * load local tests plugin
  83. */
  84. export async function loadLocalE2eTestsPlugin(page) {
  85. const pid = 'a-logseq-plugin-for-e2e-tests'
  86. const hasLoaded = await page.evaluate(async ([pid]) => {
  87. // @ts-ignore
  88. const p = window.LSPluginCore.registeredPlugins.get(pid)
  89. // @ts-ignore
  90. await window.LSPluginCore.enable(pid)
  91. return p != null
  92. }, [pid])
  93. if (hasLoaded) return true
  94. await callPageAPI(page, 'set_state_from_store',
  95. 'ui/developer-mode?', true)
  96. await page.keyboard.press('t+p')
  97. await page.locator('text=Load unpacked plugin')
  98. await callPageAPI(page, 'set_state_from_store',
  99. 'plugin/selected-unpacked-pkg', `${__dirname}/plugin`)
  100. await page.keyboard.press('Escape')
  101. await page.keyboard.press('Escape')
  102. }