import { expect } from 'chai'
import { fireEvent, render, screen } from '@testing-library/react'
import { SurveyWidgetDsNav } from '@/features/project-list/components/survey-widget-ds-nav'
import { SplitTestProvider } from '@/shared/context/split-test-context'
describe('', function () {
beforeEach(function () {
this.name = 'my-survey'
this.title = 'To help shape the future of Overleaf'
this.text = 'Click here!'
this.cta = 'Let’s go!'
this.url = 'https://example.com/my-survey'
localStorage.clear()
})
describe('survey widget is visible', function () {
beforeEach(function () {
window.metaAttributesCache.set('ol-survey', {
name: this.name,
title: this.title,
text: this.text,
url: this.url,
})
render(
)
})
it('shows text and link', function () {
const dismissed = localStorage.getItem('dismissed-my-survey')
expect(dismissed).to.equal(null)
screen.getByText(this.title)
screen.getByText(this.text)
const link = screen.getByRole('link', {
name: 'Take survey',
}) as HTMLAnchorElement
expect(link.href).to.equal(this.url)
})
it('it is dismissed on click on the dismiss button', function () {
const dismissButton = screen.getByRole('button', {
name: 'Close',
})
fireEvent.click(dismissButton)
const text = screen.queryByText(this.title)
expect(text).to.be.null
const link = screen.queryByRole('button')
expect(link).to.be.null
const dismissed = localStorage.getItem('dismissed-my-survey')
expect(dismissed).to.equal('true')
})
})
describe('survey widget is visible with custom CTA', function () {
beforeEach(function () {
window.metaAttributesCache.set('ol-survey', {
name: this.name,
title: this.title,
text: this.text,
cta: this.cta,
url: this.url,
})
render(
)
})
it('shows text and link with custom CTA', function () {
const dismissed = localStorage.getItem('dismissed-my-survey')
expect(dismissed).to.equal(null)
screen.getByText(this.title)
screen.getByText(this.text)
const link = screen.getByRole('link', {
name: this.cta,
}) as HTMLAnchorElement
expect(link.href).to.equal(this.url)
})
})
describe('survey widget is not shown when already dismissed', function () {
beforeEach(function () {
window.metaAttributesCache.set('ol-survey', {
name: this.name,
title: this.title,
text: this.text,
url: this.url,
})
localStorage.setItem('dismissed-my-survey', 'true')
render(
)
})
it('nothing is displayed', function () {
const text = screen.queryByText(this.title)
expect(text).to.be.null
const link = screen.queryByRole('button')
expect(link).to.be.null
})
})
describe('survey widget is not shown when no survey is configured', function () {
beforeEach(function () {
render(
)
})
it('nothing is displayed', function () {
const text = screen.queryByText(this.title)
expect(text).to.be.null
const link = screen.queryByRole('button')
expect(link).to.be.null
})
})
})