From ef152db4a6df036379b4fe3d39b6fbfdadd1e437 Mon Sep 17 00:00:00 2001 From: yyh Date: Sun, 10 May 2026 22:48:50 +0800 Subject: [PATCH] fix(web): name log sort and resend controls --- .../app/workflow-log/__tests__/detail.spec.tsx | 13 +++++-------- web/app/components/app/workflow-log/detail.tsx | 15 ++++++++++----- .../base/sort/__tests__/index.spec.tsx | 11 +++++------ web/app/components/base/sort/index.tsx | 13 +++++++++---- .../signin/__tests__/countdown.spec.tsx | 16 ++++++++-------- web/app/components/signin/countdown.tsx | 10 +++++++++- 6 files changed, 46 insertions(+), 32 deletions(-) diff --git a/web/app/components/app/workflow-log/__tests__/detail.spec.tsx b/web/app/components/app/workflow-log/__tests__/detail.spec.tsx index a58f55b031..4abbfa24a5 100644 --- a/web/app/components/app/workflow-log/__tests__/detail.spec.tsx +++ b/web/app/components/app/workflow-log/__tests__/detail.spec.tsx @@ -117,11 +117,9 @@ describe('DetailPanel', () => { }) it('should render close button', () => { - const { container } = render() + render() - // Close button has RiCloseLine icon - const closeButton = container.querySelector('span.cursor-pointer') - expect(closeButton).toBeInTheDocument() + expect(screen.getByRole('button', { name: 'common.operation.close' })).toBeInTheDocument() }) it('should render Run component with correct URLs', () => { @@ -173,12 +171,11 @@ describe('DetailPanel', () => { const user = userEvent.setup() const onClose = vi.fn() - const { container } = render() + render() - const closeButton = container.querySelector('span.cursor-pointer') - expect(closeButton).toBeInTheDocument() + const closeButton = screen.getByRole('button', { name: 'common.operation.close' }) - await user.click(closeButton!) + await user.click(closeButton) expect(onClose).toHaveBeenCalledTimes(1) }) diff --git a/web/app/components/app/workflow-log/detail.tsx b/web/app/components/app/workflow-log/detail.tsx index 05cd6f1676..f0e80f11c0 100644 --- a/web/app/components/app/workflow-log/detail.tsx +++ b/web/app/components/app/workflow-log/detail.tsx @@ -27,9 +27,14 @@ const DetailPanel: FC = ({ runID, onClose, canReplay = false }) => { return (
- - - +

{t('runDetail.workflowTitle', { ns: 'appLog' })}

{canReplay && ( @@ -38,11 +43,11 @@ const DetailPanel: FC = ({ runID, onClose, canReplay = false }) => { render={( )} /> diff --git a/web/app/components/base/sort/__tests__/index.spec.tsx b/web/app/components/base/sort/__tests__/index.spec.tsx index 18dfd242ce..ea85e8f3fe 100644 --- a/web/app/components/base/sort/__tests__/index.spec.tsx +++ b/web/app/components/base/sort/__tests__/index.spec.tsx @@ -11,10 +11,10 @@ const mockItems = [ ] describe('Sort component — real portal integration', () => { - const setup = (props = {}) => { + const setup = (props: Partial> = {}) => { const onSelect = vi.fn() const user = userEvent.setup() - const { container, rerender } = render( + const { rerender } = render( , ) @@ -28,10 +28,9 @@ describe('Sort component — real portal integration', () => { // helper: returns right-side sort button element const getSortButton = (): HTMLElement => { - const btn = container.querySelector('.rounded-r-lg') - if (!btn) - throw new Error('Sort button (rounded-r-lg) not found in rendered container') - return btn as HTMLElement + return screen.getByRole('button', { + name: props.order ? 'appLog.filter.ascending' : 'appLog.filter.descending', + }) } return { user, onSelect, rerender, getTriggerWrapper, getSortButton } diff --git a/web/app/components/base/sort/index.tsx b/web/app/components/base/sort/index.tsx index 69cf4dd220..57affdd96b 100644 --- a/web/app/components/base/sort/index.tsx +++ b/web/app/components/base/sort/index.tsx @@ -85,10 +85,15 @@ const Sort: FC = ({
-
onSelect(`${order ? '' : '-'}${value}`)}> - {!order && } - {order && } -
+
) diff --git a/web/app/components/signin/__tests__/countdown.spec.tsx b/web/app/components/signin/__tests__/countdown.spec.tsx index 7d5e847b72..4ac0b437bb 100644 --- a/web/app/components/signin/__tests__/countdown.spec.tsx +++ b/web/app/components/signin/__tests__/countdown.spec.tsx @@ -31,7 +31,7 @@ describe('Countdown', () => { localStorage.setItem(COUNT_DOWN_KEY, '0') render() - expect(screen.getByText('login.checkCode.resend')).toBeInTheDocument() + expect(screen.getByRole('button', { name: 'login.checkCode.resend' })).toBeInTheDocument() expect(screen.queryByText('s')).not.toBeInTheDocument() }) @@ -39,7 +39,7 @@ describe('Countdown', () => { localStorage.setItem(COUNT_DOWN_KEY, '1000') render() - expect(screen.queryByText('login.checkCode.resend')).not.toBeInTheDocument() + expect(screen.queryByRole('button', { name: 'login.checkCode.resend' })).not.toBeInTheDocument() }) }) @@ -79,7 +79,7 @@ describe('Countdown', () => { render() - const resendLink = screen.getByText('login.checkCode.resend') + const resendLink = screen.getByRole('button', { name: 'login.checkCode.resend' }) fireEvent.click(resendLink) expect(onResend).toHaveBeenCalledTimes(1) @@ -90,7 +90,7 @@ describe('Countdown', () => { render() - const resendLink = screen.getByText('login.checkCode.resend') + const resendLink = screen.getByRole('button', { name: 'login.checkCode.resend' }) fireEvent.click(resendLink) expect(localStorage.setItem).toHaveBeenCalledWith(COUNT_DOWN_KEY, String(COUNT_DOWN_TIME_MS)) @@ -101,7 +101,7 @@ describe('Countdown', () => { render() - const resendLink = screen.getByText('login.checkCode.resend') + const resendLink = screen.getByRole('button', { name: 'login.checkCode.resend' }) expect(() => fireEvent.click(resendLink)).not.toThrow() }) }) @@ -127,14 +127,14 @@ describe('Countdown', () => { localStorage.setItem(COUNT_DOWN_KEY, '0') render() - expect(screen.getByText('login.checkCode.resend')).toBeInTheDocument() + expect(screen.getByRole('button', { name: 'login.checkCode.resend' })).toBeInTheDocument() }) it('should handle negative time values', () => { localStorage.setItem(COUNT_DOWN_KEY, '-1000') render() - expect(screen.getByText('login.checkCode.resend')).toBeInTheDocument() + expect(screen.getByRole('button', { name: 'login.checkCode.resend' })).toBeInTheDocument() }) it('should round time display correctly', () => { @@ -160,7 +160,7 @@ describe('Countdown', () => { render() - expect(screen.getByText('login.checkCode.resend')).toBeInTheDocument() + expect(screen.getByRole('button', { name: 'login.checkCode.resend' })).toBeInTheDocument() }) it('should render correctly without any props', () => { diff --git a/web/app/components/signin/countdown.tsx b/web/app/components/signin/countdown.tsx index 651a2fb430..2b9709ddc0 100644 --- a/web/app/components/signin/countdown.tsx +++ b/web/app/components/signin/countdown.tsx @@ -41,7 +41,15 @@ export default function Countdown({ onResend }: CountdownProps) { )} { - time <= 0 && {t('checkCode.resend', { ns: 'login' })} + time <= 0 && ( + + ) }

)