From c7e60c9e43f117bc1f6b5eb5d64182b16d0d5328 Mon Sep 17 00:00:00 2001 From: miteruzo Date: Fri, 3 Jul 2026 03:20:48 +0900 Subject: [PATCH] #351 --- frontend/src/components/PostEditForm.test.tsx | 23 +++++++++++++++++++ frontend/src/components/PostEditForm.tsx | 5 ---- frontend/src/pages/posts/PostNewPage.test.tsx | 18 +++++++++++++++ frontend/src/pages/posts/PostNewPage.tsx | 5 ---- 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/frontend/src/components/PostEditForm.test.tsx b/frontend/src/components/PostEditForm.test.tsx index 1fc58a9..2ff28b1 100644 --- a/frontend/src/components/PostEditForm.test.tsx +++ b/frontend/src/components/PostEditForm.test.tsx @@ -66,4 +66,27 @@ describe ('PostEditForm', () => { expect (onSave).toHaveBeenCalledWith (expect.objectContaining ({ versionNo: 5 })) expect (toastApi.toast).toHaveBeenCalledWith ({ description: '更新しました.' }) }) + + it ('preserves duration while the video tag is temporarily removed', () => { + const post = buildPost ({ + videoMs: 180_500, + tags: [ + buildTag ({ id: 1, name: '動画', category: 'general' }), + buildTag ({ id: 2, name: 'general-tag', category: 'general' }), + ], + }) + + render () + + expect (screen.getByRole ('spinbutton')).toHaveValue (180.5) + + const tags = screen.getAllByRole ('textbox')[2] + fireEvent.change (tags, { target: { value: 'general-tag' } }) + expect (screen.queryByRole ('spinbutton')).not.toBeInTheDocument () + + fireEvent.change (tags, { + target: { value: '動画 general-tag' }, + }) + expect (screen.getByRole ('spinbutton')).toHaveValue (180.5) + }) }) diff --git a/frontend/src/components/PostEditForm.tsx b/frontend/src/components/PostEditForm.tsx index c1fdd72..744c132 100644 --- a/frontend/src/components/PostEditForm.tsx +++ b/frontend/src/components/PostEditForm.tsx @@ -153,11 +153,6 @@ const PostEditForm: FC = ({ post, onSave }) => { setDuration (videoMsToDurationValue (post.videoMs)) }, [post]) - useEffect (() => { - if (!(videoFlg)) - setDuration ('') - }, [videoFlg]) - return (
diff --git a/frontend/src/pages/posts/PostNewPage.test.tsx b/frontend/src/pages/posts/PostNewPage.test.tsx index b8c909e..1402ed0 100644 --- a/frontend/src/pages/posts/PostNewPage.test.tsx +++ b/frontend/src/pages/posts/PostNewPage.test.tsx @@ -62,6 +62,24 @@ describe ('PostNewPage', () => { expect (toastApi.toast).toHaveBeenCalledWith ({ title: '投稿成功!' }) }) + it ('preserves duration while the video tag is temporarily removed', () => { + api.apiGet.mockResolvedValue ([]) + + renderWithProviders () + + const tags = screen.getAllByRole ('textbox')[3] + fireEvent.change (tags, { target: { value: '動画' } }) + fireEvent.change (screen.getByRole ('spinbutton'), { target: { value: '180.5' } }) + + fireEvent.change (tags, { target: { value: 'general-tag' } }) + expect (screen.queryByRole ('spinbutton')).not.toBeInTheDocument () + + fireEvent.change (tags, { + target: { value: '動画 general-tag' }, + }) + expect (screen.getByRole ('spinbutton')).toHaveValue (180.5) + }) + it ('shows 422 validation errors for post fields', async () => { api.apiGet.mockResolvedValue ([]) api.isApiError.mockReturnValue (true) diff --git a/frontend/src/pages/posts/PostNewPage.tsx b/frontend/src/pages/posts/PostNewPage.tsx index 03a433c..0a99dc5 100644 --- a/frontend/src/pages/posts/PostNewPage.tsx +++ b/frontend/src/pages/posts/PostNewPage.tsx @@ -135,11 +135,6 @@ const PostNewPage: FC = ({ user }) => { fetchThumbnail () }, [fetchThumbnail, thumbnailAutoFlg, url]) - useEffect (() => { - if (!(videoFlg)) - setDuration ('') - }, [videoFlg]) - if (!(editable)) return