From 9849aab40283cbde2184e74d4795aec8ef8ccba3 Mon Sep 17 00:00:00 2001
From: zyoshoka <107108195+zyoshoka@users.noreply.github.com>
Date: Sat, 8 Jun 2024 18:00:54 +0900
Subject: test(#10336): add `components/MkC.*` stories (#13830)
* test(storybook): add `components/MkC.*` stories
* test(storybook): add some tests
* test: add sleep
* test: comment-out flaky test
* test(storybook): add test for `MkChannelFollowButton`
* chore(storybook): tweak sleep duration in `MkChannelFollowButton` story test
* fix(chromatic): add delay to `MkChannelList`
* chore: replace `mswDecorator` with `mswLoader`
* fix(storybook): tweak some parameters
* chore: serve static files
* fix(chromatic): add delay to `MkCwButton`
* chore: delete logging for debug
* fix: add right click in `MkContextMenu` play
* refactor: remove unused imports
---
.../src/components/MkCwButton.stories.impl.ts | 89 ++++++++++++++++++++++
1 file changed, 89 insertions(+)
create mode 100644 packages/frontend/src/components/MkCwButton.stories.impl.ts
(limited to 'packages/frontend/src/components/MkCwButton.stories.impl.ts')
diff --git a/packages/frontend/src/components/MkCwButton.stories.impl.ts b/packages/frontend/src/components/MkCwButton.stories.impl.ts
new file mode 100644
index 0000000000..05c6001552
--- /dev/null
+++ b/packages/frontend/src/components/MkCwButton.stories.impl.ts
@@ -0,0 +1,89 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
+import { StoryObj } from '@storybook/vue3';
+import { action } from '@storybook/addon-actions';
+import { expect, userEvent, within } from '@storybook/test';
+import { file } from '../../.storybook/fakes.js';
+import MkCwButton from './MkCwButton.vue';
+import { i18n } from '@/i18n.js';
+import { semaphore } from '@/scripts/test-utils.js';
+
+function sleep(ms: number) {
+ return new Promise(resolve => setTimeout(resolve, ms));
+}
+
+const s = semaphore();
+
+export const Default = {
+ render(args) {
+ return {
+ components: {
+ MkCwButton,
+ },
+ data() {
+ return {
+ showContent: false,
+ };
+ },
+ setup() {
+ return {
+ args,
+ };
+ },
+ computed: {
+ props() {
+ return {
+ ...this.args,
+ };
+ },
+ events() {
+ return {
+ 'update:modelValue': action('update:modelValue'),
+ };
+ },
+ },
+ template: '',
+ };
+ },
+ args: {
+ text: 'Some CW content',
+ },
+ async play({ canvasElement }) {
+ await s.acquire();
+ await sleep(1000);
+ const canvas = within(canvasElement);
+ const buttonElement = canvas.getByRole('button');
+ await expect(buttonElement).toHaveTextContent(i18n.ts._cw.show);
+ await expect(buttonElement).toHaveTextContent(i18n.tsx._cw.chars({ count: 15 }));
+ await userEvent.click(buttonElement);
+ await expect(buttonElement).toHaveTextContent(i18n.ts._cw.hide);
+ await userEvent.click(buttonElement);
+ s.release();
+ },
+ parameters: {
+ chromatic: {
+ // NOTE: テストが終わるまで待つ
+ delay: 5000,
+ },
+ layout: 'centered',
+ },
+} satisfies StoryObj;
+export const IncludesTextAndDriveFile = {
+ ...Default,
+ args: {
+ text: 'Some CW content',
+ files: [file()],
+ },
+ async play({ canvasElement }) {
+ const canvas = within(canvasElement);
+ const buttonElement = canvas.getByRole('button');
+ await expect(buttonElement).toHaveTextContent(i18n.tsx._cw.chars({ count: 15 }));
+ await expect(buttonElement).toHaveTextContent(' / ');
+ await expect(buttonElement).toHaveTextContent(i18n.tsx._cw.files({ count: 1 }));
+ },
+} satisfies StoryObj;
--
cgit v1.2.3-freya