page-refs.spec.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { expect } from '@playwright/test'
  2. import { test } from './fixtures'
  3. import { IsMac, createRandomPage, newBlock, newInnerBlock, randomString, lastInnerBlock } from './utils'
  4. /***
  5. * Test alias features
  6. * Test search refering features
  7. * Consider diacritics
  8. ***/
  9. async function alias_test (page, page_name: string, search_kws: string[]){
  10. let hotkeyOpenLink = 'Control+o'
  11. let hotkeyBack = 'Control+['
  12. if (IsMac) {
  13. hotkeyOpenLink = 'Meta+o'
  14. hotkeyBack = 'Meta+['
  15. }
  16. const rand = randomString(10)
  17. let target_name = page_name + ' target ' + rand
  18. let alias_name = page_name + ' alias ' + rand
  19. let alias_test_content_1 = randomString(20)
  20. let alias_test_content_2 = randomString(20)
  21. let alias_test_content_3 = randomString(20)
  22. // shortcut opening test
  23. let parent_title = await createRandomPage(page)
  24. await page.fill(':nth-match(textarea, 1)', '[[' + target_name + ']]')
  25. await page.keyboard.press(hotkeyOpenLink)
  26. // build target Page with alias
  27. await page.type(':nth-match(textarea, 1)', 'alias:: [[' + alias_name + ']]')
  28. await page.press(':nth-match(textarea, 1)', 'Enter') // double Enter for exit property editing
  29. await page.press(':nth-match(textarea, 1)', 'Enter')
  30. await page.type(':nth-match(textarea, 1)', alias_test_content_1)
  31. await page.keyboard.press(hotkeyBack)
  32. // create alias ref in origin Page
  33. await newBlock(page)
  34. await page.type(':nth-match(textarea, 1)', '[[' + alias_name + ']]')
  35. await page.keyboard.press(hotkeyOpenLink)
  36. // shortcut opening test
  37. await lastInnerBlock(page)
  38. expect(await page.inputValue(':nth-match(textarea, 1)')).toBe(alias_test_content_1)
  39. await newInnerBlock(page)
  40. await page.type(':nth-match(textarea, 1)', alias_test_content_2)
  41. await page.keyboard.press(hotkeyBack)
  42. // pressing enter opening test
  43. await lastInnerBlock(page)
  44. await page.press(':nth-match(textarea, 1)', 'ArrowLeft')
  45. await page.press(':nth-match(textarea, 1)', 'ArrowLeft')
  46. await page.press(':nth-match(textarea, 1)', 'ArrowLeft')
  47. await page.press(':nth-match(textarea, 1)', 'Enter')
  48. await lastInnerBlock(page)
  49. expect(await page.inputValue(':nth-match(textarea, 1)')).toBe(alias_test_content_2)
  50. await newInnerBlock(page)
  51. await page.type(':nth-match(textarea, 1)', alias_test_content_3)
  52. await page.keyboard.press(hotkeyBack)
  53. // clicking opening test
  54. await page.waitForSelector('.page-blocks-inner .ls-block .page-ref >> nth=-1')
  55. await page.click('.page-blocks-inner .ls-block .page-ref >> nth=-1')
  56. await lastInnerBlock(page)
  57. expect(await page.inputValue(':nth-match(textarea, 1)')).toBe(alias_test_content_3)
  58. // TODO: test alias from graph clicking
  59. // test alias from search
  60. for (let kw of search_kws){
  61. let kw_name = kw + ' alias ' + rand
  62. await page.click('#search-button')
  63. await page.waitForSelector('[placeholder="Search or create page"]')
  64. await page.fill('[placeholder="Search or create page"]', kw_name)
  65. await page.waitForTimeout(500)
  66. const results = await page.$$('#ui__ac-inner .block')
  67. expect(results.length).toEqual(3) // page + block + alias property
  68. // test search results
  69. expect(await results[0].innerText()).toContain("Alias -> " + target_name)
  70. expect(await results[0].innerText()).toContain(alias_name)
  71. expect(await results[1].innerText()).toContain(parent_title)
  72. expect(await results[1].innerText()).toContain("[[" + alias_name + "]]")
  73. expect(await results[2].innerText()).toContain(target_name)
  74. expect(await results[2].innerText()).toContain("alias:: [[" + alias_name + "]]")
  75. // test search entering (page)
  76. page.keyboard.press("Enter")
  77. await page.waitForNavigation()
  78. await page.waitForTimeout(100)
  79. await lastInnerBlock(page)
  80. expect(await page.inputValue(':nth-match(textarea, 1)')).toBe(alias_test_content_3)
  81. // test search clicking (block)
  82. await page.click('#search-button')
  83. await page.waitForSelector('[placeholder="Search or create page"]')
  84. await page.fill('[placeholder="Search or create page"]', kw_name)
  85. await page.waitForTimeout(500)
  86. page.click(":nth-match(.menu-link, 2)")
  87. await page.waitForNavigation()
  88. await page.waitForTimeout(500)
  89. await lastInnerBlock(page)
  90. expect(await page.inputValue(':nth-match(textarea, 1)')).toBe("[[" + alias_name + "]]")
  91. await page.keyboard.press(hotkeyBack)}
  92. // TODO: search clicking (alias property)
  93. }
  94. // test('page alias', async ({ page }) => {
  95. // await alias_test(page, "p")
  96. // })
  97. test('page diacritic alias', async ({ page }) => {
  98. await alias_test(page, "ü", ["ü", "ü", "Ü"])
  99. })