misskey/packages/frontend/src/components/MkEmojiPicker.stories.impl.ts

55 lines
1.6 KiB
TypeScript

/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
import { action } from '@storybook/addon-actions';
import { expect, userEvent, waitFor, within } from '@storybook/test';
import { StoryObj } from '@storybook/vue3';
import { i18n } from '@/i18n.js';
import MkEmojiPicker from './MkEmojiPicker.vue';
export const Default = {
render(args) {
return {
components: {
MkEmojiPicker,
},
setup() {
return {
args,
};
},
computed: {
props() {
return {
...this.args,
};
},
events() {
return {
chosen: action('chosen'),
};
},
},
template: '<MkEmojiPicker v-bind="props" v-on="events" />',
};
},
async play({ canvasElement }) {
const canvas = within(canvasElement);
const faceSection = canvas.getByText(/face/i);
await waitFor(() => userEvent.click(faceSection));
const grinning = canvasElement.querySelector('[data-emoji="😀"]');
await expect(grinning).toBeInTheDocument();
if (grinning == null) throw new Error(); // NOTE: not called
await waitFor(() => userEvent.click(grinning));
const recentUsedSection = canvas.getByText(new RegExp(i18n.ts.recentUsed)).parentElement;
await expect(recentUsedSection).toBeInTheDocument();
if (recentUsedSection == null) throw new Error(); // NOTE: not called
await expect(within(recentUsedSection).getByAltText('😀')).toBeInTheDocument();
await expect(within(recentUsedSection).queryByAltText('😬')).toEqual(null);
},
parameters: {
layout: 'centered',
},
} satisfies StoryObj<typeof MkEmojiPicker>;