use-expand-collapse.test.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import { expect } from 'chai'
  4. import { render } from '@testing-library/react'
  5. import useExpandCollapse from '../../../../frontend/js/shared/hooks/use-expand-collapse'
  6. const sampleContent = (
  7. <div>
  8. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
  9. <p>Maecenas maximus ultrices sollicitudin.</p>
  10. <p>Praesent mollis arcu eget molestie viverra.</p>
  11. <p>Pellentesque eget molestie nisl, non hendrerit lectus.</p>
  12. </div>
  13. )
  14. function ExpandCollapseTestUI({ expandCollapseArgs }) {
  15. const { expandableProps } = useExpandCollapse(expandCollapseArgs)
  16. return (
  17. <>
  18. <div {...expandableProps}>{sampleContent}</div>
  19. </>
  20. )
  21. }
  22. ExpandCollapseTestUI.propTypes = {
  23. expandCollapseArgs: PropTypes.object
  24. }
  25. describe('useExpandCollapse', function() {
  26. describe('custom CSS classes', function() {
  27. it('supports a custom CSS class', function() {
  28. const testArgs = {
  29. classes: {
  30. container: 'my-custom-class'
  31. }
  32. }
  33. const { container } = render(
  34. <ExpandCollapseTestUI expandCollapseArgs={testArgs} />
  35. )
  36. const elWithCustomCSSClass = container.querySelector('div')
  37. expect(elWithCustomCSSClass).to.exist
  38. })
  39. it('supports an extra custom CSS class for the collapsed state', function() {
  40. const testArgs = {
  41. classes: {
  42. containerCollapsed: 'my-custom-collapsed-class'
  43. }
  44. }
  45. const { container } = render(
  46. <ExpandCollapseTestUI expandCollapseArgs={testArgs} />
  47. )
  48. const elWithCustomCollapsedCSSClass = container.querySelector(
  49. '.my-custom-collapsed-class'
  50. )
  51. expect(elWithCustomCollapsedCSSClass).to.exist
  52. })
  53. it('ignores the collapsed CSS class when expanded', function() {
  54. const testArgs = {
  55. initiallyExpanded: true,
  56. classes: {
  57. containerCollapsed: 'my-custom-collapsed-class'
  58. }
  59. }
  60. const { container } = render(
  61. <ExpandCollapseTestUI expandCollapseArgs={testArgs} />
  62. )
  63. const elWithCustomCollapsedCSSClass = container.querySelector(
  64. '.my-custom-collapsed-class'
  65. )
  66. expect(elWithCustomCollapsedCSSClass).to.not.exist
  67. })
  68. })
  69. describe('height and width support via dimension argument', function() {
  70. it('defaults to height', function() {
  71. const { container } = render(<ExpandCollapseTestUI />)
  72. const expandCollapseEl = container.firstChild
  73. expect(expandCollapseEl.style.height).to.not.be.empty
  74. expect(expandCollapseEl.style.width).to.be.empty
  75. })
  76. it('supports width', function() {
  77. const testArgs = {
  78. dimension: 'width'
  79. }
  80. const { container } = render(
  81. <ExpandCollapseTestUI expandCollapseArgs={testArgs} />
  82. )
  83. const expandCollapseEl = container.firstChild
  84. expect(expandCollapseEl.style.height).to.be.empty
  85. expect(expandCollapseEl.style.width).to.not.be.empty
  86. })
  87. })
  88. describe('collapsed size support via collapsedSize argument', function() {
  89. it('defaults to 0px', function() {
  90. const { container } = render(<ExpandCollapseTestUI />)
  91. const expandCollapseEl = container.firstChild
  92. expect(expandCollapseEl.style.height).to.equal('0px')
  93. })
  94. it('supports a custom collapsed size', function() {
  95. const testArgs = {
  96. collapsedSize: 200
  97. }
  98. const { container } = render(
  99. <ExpandCollapseTestUI expandCollapseArgs={testArgs} />
  100. )
  101. const expandCollapseEl = container.firstChild
  102. expect(expandCollapseEl.style.height).to.equal('200px')
  103. })
  104. it('supports a custom collapsed size for width', function() {
  105. const testArgs = {
  106. collapsedSize: 200,
  107. dimension: 'width'
  108. }
  109. const { container } = render(
  110. <ExpandCollapseTestUI expandCollapseArgs={testArgs} />
  111. )
  112. const expandCollapseEl = container.firstChild
  113. expect(expandCollapseEl.style.height).to.be.empty
  114. expect(expandCollapseEl.style.width).to.equal('200px')
  115. })
  116. })
  117. })