diff --git a/frontend/src/pages/tags/NicoTagListPage.test.tsx b/frontend/src/pages/tags/NicoTagListPage.test.tsx index 75ceb2f..5989ea9 100644 --- a/frontend/src/pages/tags/NicoTagListPage.test.tsx +++ b/frontend/src/pages/tags/NicoTagListPage.test.tsx @@ -162,12 +162,13 @@ describe ('NicoTagListPage', () => { }) }) - it ('updates links from a tag card', async () => { + it ('saves links after completing the tag at the cursor', async () => { api.apiGet .mockResolvedValueOnce ({ tags: [buildNicoTag ({ id: 7, name: 'nico:source' })], count: 1, }) + .mockResolvedValueOnce ([buildTag ({ id: 8, name: '連携先', postCount: 3 })]) .mockResolvedValueOnce ({ tags: [ buildNicoTag ({ @@ -183,8 +184,24 @@ describe ('NicoTagListPage', () => { renderPage () fireEvent.click (await screen.findByRole ('button', { name: '編集' })) - fireEvent.change (screen.getByLabelText ('連携する広場タグ'), { - target: { value: '連携先' }, + const textarea = screen.getByLabelText ('連携する広場タグ') + fireEvent.change (textarea, { target: { value: '既存 連携\n後続' } }) + fireEvent.focus (textarea) + fireEvent.select (textarea, { + target: { selectionStart: 4, selectionEnd: 4 } }) + + await waitFor (() => { + expect (api.apiGet).toHaveBeenCalledWith ( + '/tags/autocomplete', + { locale: 'ja', params: { q: '連携', nico: '0' }, + signal: expect.any (AbortSignal) }) + }) + fireEvent.mouseDown (await screen.findByText ('連携先')) + + expect (textarea).toHaveValue ('既存 連携先 \n後続') + await waitFor (() => { + expect ((textarea as HTMLTextAreaElement).selectionStart).toBe (7) + expect ((textarea as HTMLTextAreaElement).selectionEnd).toBe (7) }) fireEvent.click (screen.getByRole ('button', { name: '保存' })) @@ -195,6 +212,8 @@ describe ('NicoTagListPage', () => { { locale: 'ja', headers: { 'Content-Type': 'multipart/form-data' } }, ) }) + const payload = api.apiPut.mock.calls[0][1] as FormData + expect (payload.get ('tags')).toBe ('既存 連携先 \n後続') expect (await screen.findByText ('1 件')).toBeInTheDocument () })