20-basic-features--sticky-features.spec.ts 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. context('Access to any page', () => {
  2. const ssPrefix = 'subnav-and-fab-';
  3. beforeEach(() => {
  4. // login
  5. cy.fixture("user-admin.json").then(user => {
  6. cy.login(user.username, user.password);
  7. });
  8. // Visit /
  9. cy.visit('/');
  10. cy.waitUntilSkeletonDisappear();
  11. cy.collapseSidebar(true, true);
  12. });
  13. it('Subnavigation and fab displays changes on scroll down and up', () => {
  14. cy.waitUntil(() => {
  15. // do
  16. // Scroll the window 250px down is enough to trigger sticky effect
  17. cy.scrollTo(0, 250);
  18. // wait until
  19. return cy.getByTestid('grw-subnav-switcher').then($elem => !$elem.hasClass('grw-subnav-switcher-hidden'));
  20. });
  21. // wait until fab visible
  22. cy.waitUntil(() => cy.getByTestid('grw-fab-page-create-button').then($elem => $elem.hasClass('visible')));
  23. cy.waitUntilSkeletonDisappear();
  24. cy.screenshot(`${ssPrefix}visible-on-scroll-down`);
  25. cy.waitUntil(() => {
  26. // do
  27. // Scroll the window back to top
  28. cy.scrollTo(0, 0);
  29. // wait until
  30. return cy.waitUntil(() => cy.getByTestid('grw-subnav-switcher').then($elem => $elem.hasClass('grw-subnav-switcher-hidden')));
  31. });
  32. // wait until fab invisible
  33. cy.waitUntil(() => cy.getByTestid('grw-fab-page-create-button').then($elem => $elem.hasClass('invisible')));
  34. cy.screenshot(`${ssPrefix}invisible-on-scroll-top`);
  35. });
  36. it('Subnavigation and fab are not displayed when move to other pages', () => {
  37. cy.waitUntil(() => {
  38. // do
  39. // Scroll the window 250px down is enough to trigger sticky effect
  40. cy.scrollTo(0, 250);
  41. // wait until
  42. return () => cy.getByTestid('grw-subnav-switcher').then($elem => !$elem.hasClass('grw-subnav-switcher-hidden'));
  43. });
  44. cy.waitUntil(() => cy.getByTestid('grw-fab-page-create-button').then($elem => $elem.hasClass('visible')));
  45. // Move to /Sandbox page
  46. cy.visit('/Sandbox');
  47. cy.waitUntilSkeletonDisappear();
  48. cy.collapseSidebar(true);
  49. cy.waitUntil(() => cy.getByTestid('grw-fab-page-create-button').then($elem => $elem.hasClass('invisible')));
  50. cy.waitUntil(() => cy.getByTestid('grw-subnav-switcher').then($elem => $elem.hasClass('grw-subnav-switcher-hidden')));
  51. cy.screenshot(`${ssPrefix}not-visible-on-move-to-other-pages`);
  52. });
  53. it('Able to open create page modal from fab', () => {
  54. cy.waitUntil(() => {
  55. // do
  56. // Scroll the window back to top
  57. cy.scrollTo(0, 250);
  58. // wait until
  59. return cy.getByTestid('grw-fab-page-create-button')
  60. .should('have.class', 'visible')
  61. .within(() => {
  62. cy.get('.btn-create-page').click();
  63. return true;
  64. });
  65. });
  66. cy.getByTestid('page-create-modal').should('be.visible').within(() => {
  67. cy.screenshot(`${ssPrefix}new-page-modal-opened-from-fab`);
  68. cy.get('button.close').click();
  69. });
  70. });
  71. it('Able to scroll page to top from fab', () => {
  72. // Initial scroll down
  73. cy.waitUntil(() => {
  74. // do
  75. // Scroll the window 250px down is enough to trigger sticky effect
  76. cy.scrollTo(0, 250);
  77. // wait until
  78. return cy.getByTestid('grw-fab-return-to-top')
  79. .should('have.class', 'visible')
  80. .then(() => {
  81. cy.waitUntil(() => {
  82. cy.get('.btn-scroll-to-top').click();
  83. return cy.getByTestid('grw-fab-return-to-top').should('have.class', 'invisible');
  84. });
  85. });
  86. });
  87. cy.waitUntilSkeletonDisappear();
  88. cy.screenshot(`${ssPrefix}scroll-page-to-top`);
  89. });
  90. it('Able to click buttons on subnavigation switcher when sticky', () => {
  91. cy.waitUntil(() => {
  92. // do
  93. // Scroll the window 250px down is enough to trigger sticky effect
  94. cy.scrollTo(0, 250);
  95. // wait until
  96. return cy.getByTestid('grw-subnav-switcher').then($elem => !$elem.hasClass('grw-subnav-switcher-hidden'));
  97. });
  98. cy.waitUntil(() => {
  99. cy.getByTestid('grw-subnav-switcher').within(() => {
  100. cy.getByTestid('editor-button').should('be.visible').click();
  101. });
  102. return cy.get('.layout-root').then($elem => $elem.hasClass('editing'));
  103. });
  104. cy.get('.grw-editor-navbar-bottom').should('be.visible');
  105. cy.screenshot(`${ssPrefix}open-editor-when-sticky`);
  106. });
  107. it('Subnavigation is sticky when on small window', () => {
  108. cy.waitUntil(() => {
  109. // do
  110. // Scroll the window 500px down
  111. cy.scrollTo(0, 500);
  112. // wait until
  113. return cy.getByTestid('grw-subnav-switcher').then($elem => !$elem.hasClass('grw-subnav-switcher-hidden'));
  114. });
  115. cy.waitUntilSkeletonDisappear();
  116. cy.viewport(600, 1024);
  117. cy.getByTestid('grw-subnav-switcher').within(() => {
  118. cy.get('#grw-page-editor-mode-manager').should('be.visible');
  119. })
  120. cy.screenshot(`${ssPrefix}sticky-on-small-window`);
  121. });
  122. });