survey-widget.test.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { expect } from 'chai'
  2. import { fireEvent, render, screen } from '@testing-library/react'
  3. import SurveyWidget from '../../../../../frontend/js/features/project-list/components/survey-widget'
  4. describe('<SurveyWidget />', function () {
  5. beforeEach(function () {
  6. this.name = 'my-survey'
  7. this.preText = 'To help shape the future of Overleaf'
  8. this.linkText = 'Click here!'
  9. this.url = 'https://example.com/my-survey'
  10. localStorage.clear()
  11. })
  12. describe('survey widget is visible', function () {
  13. beforeEach(function () {
  14. window.metaAttributesCache.set('ol-survey', {
  15. name: this.name,
  16. preText: this.preText,
  17. linkText: this.linkText,
  18. url: this.url,
  19. })
  20. render(<SurveyWidget />)
  21. })
  22. it('shows text and link', function () {
  23. const dismissed = localStorage.getItem('dismissed-my-survey')
  24. expect(dismissed).to.equal(null)
  25. screen.getByText(this.preText)
  26. const link = screen.getByRole('link', {
  27. name: this.linkText,
  28. }) as HTMLAnchorElement
  29. expect(link.href).to.equal(this.url)
  30. })
  31. it('it is dismissed on click on the dismiss button', function () {
  32. const dismissButton = screen.getByRole('button', {
  33. name: 'Close',
  34. })
  35. fireEvent.click(dismissButton)
  36. const text = screen.queryByText(this.preText)
  37. expect(text).to.be.null
  38. const link = screen.queryByRole('link')
  39. expect(link).to.be.null
  40. const dismissed = localStorage.getItem('dismissed-my-survey')
  41. expect(dismissed).to.equal('true')
  42. })
  43. })
  44. describe('survey widget is not shown when already dismissed', function () {
  45. beforeEach(function () {
  46. window.metaAttributesCache.set('ol-survey', {
  47. name: this.name,
  48. preText: this.preText,
  49. linkText: this.linkText,
  50. url: this.url,
  51. })
  52. localStorage.setItem('dismissed-my-survey', 'true')
  53. render(<SurveyWidget />)
  54. })
  55. it('nothing is displayed', function () {
  56. const text = screen.queryByText(this.preText)
  57. expect(text).to.be.null
  58. const link = screen.queryByRole('link')
  59. expect(link).to.be.null
  60. })
  61. })
  62. describe('survey widget is not shown when no survey is configured', function () {
  63. beforeEach(function () {
  64. render(<SurveyWidget />)
  65. })
  66. it('nothing is displayed', function () {
  67. const text = screen.queryByText(this.preText)
  68. expect(text).to.be.null
  69. const link = screen.queryByRole('link')
  70. expect(link).to.be.null
  71. })
  72. })
  73. })