survey-widget.test.tsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. window.metaAttributesCache = new Map()
  11. localStorage.clear()
  12. })
  13. describe('survey widget is visible', function () {
  14. beforeEach(function () {
  15. window.metaAttributesCache.set('ol-survey', {
  16. name: this.name,
  17. preText: this.preText,
  18. linkText: this.linkText,
  19. url: this.url,
  20. })
  21. render(<SurveyWidget />)
  22. })
  23. it('shows text and link', function () {
  24. const dismissed = localStorage.getItem('dismissed-my-survey')
  25. expect(dismissed).to.equal(null)
  26. screen.getByText(this.preText)
  27. const link = screen.getByRole('link', {
  28. name: this.linkText,
  29. }) as HTMLAnchorElement
  30. expect(link.href).to.equal(this.url)
  31. })
  32. it('it is dismissed on click on the dismiss button', function () {
  33. const dismissButton = screen.getByRole('button', {
  34. name: 'Dismiss Overleaf survey',
  35. })
  36. fireEvent.click(dismissButton)
  37. const text = screen.queryByText(this.preText)
  38. expect(text).to.be.null
  39. const link = screen.queryByRole('link')
  40. expect(link).to.be.null
  41. const dismissed = localStorage.getItem('dismissed-my-survey')
  42. expect(dismissed).to.equal('true')
  43. })
  44. })
  45. describe('survey widget is not shown when already dismissed', function () {
  46. beforeEach(function () {
  47. window.metaAttributesCache.set('ol-survey', {
  48. name: this.name,
  49. preText: this.preText,
  50. linkText: this.linkText,
  51. url: this.url,
  52. })
  53. localStorage.setItem('dismissed-my-survey', 'true')
  54. render(<SurveyWidget />)
  55. })
  56. it('nothing is displayed', function () {
  57. const text = screen.queryByText(this.preText)
  58. expect(text).to.be.null
  59. const link = screen.queryByRole('link')
  60. expect(link).to.be.null
  61. })
  62. })
  63. describe('survey widget is not shown when no survey is configured', function () {
  64. beforeEach(function () {
  65. render(<SurveyWidget />)
  66. })
  67. it('nothing is displayed', function () {
  68. const text = screen.queryByText(this.preText)
  69. expect(text).to.be.null
  70. const link = screen.queryByRole('link')
  71. expect(link).to.be.null
  72. })
  73. })
  74. })