navigate.spec.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. import { beEqualTo, beVisible, haveAttribute, haveFocus, haveText, html, notBeVisible, test } from '../../utils'
  2. // Test persistent piece of layout
  3. // Handle non-origin links and such
  4. // Handle 404
  5. // Middle/command click link in new tab works?
  6. // Infinite scroll scenario, back button works
  7. //
  8. it.skip('navigates pages without reload',
  9. () => {
  10. cy.intercept('/first', {
  11. headers: { 'content-type': 'text/html' },
  12. body: html`
  13. <html>
  14. <head>
  15. <script src="/../../packages/navigate/dist/cdn.js" defer></script>
  16. <script src="/../../packages/alpinejs/dist/cdn.js" defer></script>
  17. </head>
  18. <body>
  19. <a href="/second">Navigate</a>
  20. <h2>First Page</h2>
  21. <script>
  22. window.fromFirstPage = true
  23. </script>
  24. </body>
  25. </html>
  26. `})
  27. cy.intercept('/second', {
  28. headers: { 'content-type': 'text/html' },
  29. body: html`
  30. <html>
  31. <head>
  32. <script src="/../../packages/navigate/dist/cdn.js" defer></script>
  33. <script src="/../../packages/alpinejs/dist/cdn.js" defer></script>
  34. </head>
  35. <body>
  36. <h2>Second Page</h2>
  37. </body>
  38. </html>
  39. `})
  40. cy.visit('/first')
  41. cy.window().its('fromFirstPage').should(beEqualTo(true))
  42. cy.get('h2').should(haveText('First Page'))
  43. cy.get('a').click()
  44. cy.url().should('include', '/second')
  45. cy.get('h2').should(haveText('Second Page'))
  46. cy.window().its('fromFirstPage').should(beEqualTo(true))
  47. },
  48. )
  49. it.skip('autofocuses autofocus elements',
  50. () => {
  51. cy.intercept('/first', {
  52. headers: { 'content-type': 'text/html' },
  53. body: html`
  54. <html>
  55. <head>
  56. <script src="/../../packages/navigate/dist/cdn.js" defer></script>
  57. <script src="/../../packages/alpinejs/dist/cdn.js" defer></script>
  58. </head>
  59. <body>
  60. <a href="/second">Navigate</a>
  61. </body>
  62. </html>
  63. `})
  64. cy.intercept('/second', {
  65. headers: { 'content-type': 'text/html' },
  66. body: html`
  67. <html>
  68. <head>
  69. <script src="/../../packages/navigate/dist/cdn.js" defer></script>
  70. <script src="/../../packages/alpinejs/dist/cdn.js" defer></script>
  71. </head>
  72. <body>
  73. <input type="text" autofocus>
  74. </body>
  75. </html>
  76. `})
  77. cy.visit('/first')
  78. cy.get('a').click()
  79. cy.url().should('include', '/second')
  80. cy.get('input').should(haveFocus())
  81. },
  82. )
  83. it.skip('scripts and styles are properly merged/run or skipped',
  84. () => {
  85. cy.intercept('/first', {
  86. headers: { 'content-type': 'text/html' },
  87. body: html`
  88. <html>
  89. <head>
  90. <title>First Page</title>
  91. <meta name="description" content="first description">
  92. <script src="/../../packages/navigate/dist/cdn.js" defer></script>
  93. <script src="/../../packages/alpinejs/dist/cdn.js" defer></script>
  94. </head>
  95. <body>
  96. <a href="/second">Navigate</a>
  97. </body>
  98. </html>
  99. `})
  100. cy.intercept('/head-script.js', {
  101. headers: { 'content-type': 'text/js' },
  102. body: `window.fromHeadScript = true`
  103. })
  104. cy.intercept('/body-script.js', {
  105. headers: { 'content-type': 'text/js' },
  106. body: `window.fromBodyScript = true`
  107. })
  108. cy.intercept('/head-style.css', {
  109. headers: { 'content-type': 'text/css' },
  110. body: `body { background: black !important; }`
  111. })
  112. cy.intercept('/second', {
  113. headers: { 'content-type': 'text/html' },
  114. body: html`
  115. <html>
  116. <head>
  117. <title>Second Page</title>
  118. <meta name="description" content="second description">
  119. <script src="/../../packages/navigate/dist/cdn.js" defer></script>
  120. <script src="/../../packages/alpinejs/dist/cdn.js" defer></script>
  121. <script src="head-script.js" defer></script>
  122. <script>window.fromHeadScriptInline = true</script>
  123. <link rel="stylesheet" src="head-style.css"></script>
  124. </head>
  125. <body>
  126. <script src="body-script.js" defer></script>
  127. <script>window.fromBodyScriptInline = true</script>
  128. </body>
  129. </html>
  130. `})
  131. cy.visit('/first')
  132. cy.get('a').click()
  133. cy.url().should('include', '/second')
  134. cy.title().should(beEqualTo('Second Page'))
  135. cy.get('meta').should(haveAttribute('name', 'description'))
  136. cy.get('meta').should(haveAttribute('content', 'second description'))
  137. cy.window().its('fromHeadScript').should(beEqualTo(true))
  138. cy.window().its('fromHeadScriptInline').should(beEqualTo(true))
  139. cy.window().its('fromBodyScript').should(beEqualTo(true))
  140. cy.window().its('fromBodyScriptInline').should(beEqualTo(true))
  141. },
  142. )