emoji-picker-element/test/spec/picker/upgrade.test.js

58 lines
1.5 KiB
JavaScript

import {
basicAfterEach,
basicBeforeEach,
FR_EMOJI,
mockFrenchDataSource,
tick
} from '../shared'
import { getByRole, waitFor } from '@testing-library/dom'
describe('upgrade tests', () => {
beforeEach(async () => {
basicBeforeEach()
mockFrenchDataSource()
})
afterEach(async () => {
await basicAfterEach()
})
test('setting props and attributes before upgrade', async () => {
const div = document.createElement('div')
document.body.appendChild(div)
div.innerHTML = '<emoji-picker locale="fr"></emoji-picker>'
const picker = div.querySelector('emoji-picker')
picker.dataSource = FR_EMOJI
picker.skinToneEmoji = '👍'
expect(picker.shadowRoot).toBeNull()
await tick(20)
expect(fetch.calls().length).toBe(0)
await import('../../../src/picker/PickerElement')
await waitFor(() => expect(getByRole(picker.shadowRoot, 'menuitem', { name: /😀/ })).toBeVisible())
const container = picker.shadowRoot
expect(fetch.calls().length).toBe(1)
expect(fetch.lastUrl()).toBe(FR_EMOJI)
expect(fetch.lastOptions()).toBe(undefined)
expect(getByRole(container, 'button', { name: /Choose a skin tone/ }).innerHTML).toContain('👍')
expect(picker.locale).toEqual('fr')
expect(picker.dataSource).toEqual(FR_EMOJI)
// The setter should now work as expected
picker.skinToneEmoji = '✌'
await waitFor(() => expect(getByRole(container, 'button', { name: /Choose a skin tone/ }).innerHTML).toContain('✌'))
document.body.removeChild(div)
await tick(20)
})
})