M5: Energy view — per-metric decimal formatting and chart auto-refresh toggle

This commit is contained in:
2026-06-22 19:18:29 +02:00
parent 4767a7af60
commit 935e68846c
7 changed files with 386 additions and 26 deletions
+48 -1
View File
@@ -1,5 +1,5 @@
/**
* Tests for EnergyPage (M5-T06).
* Tests for EnergyPage (M5-T06 + M5-polish).
*
* Coverage:
* 1. Renders device list from GET /api/modbus/devices.
@@ -10,6 +10,7 @@
* 6. Delete 409 error shows friendly hint in confirmation modal.
* 7. Test-read button calls POST /api/modbus/devices/{uuid}/test and shows result.
* 8. Test-read failure shows error in modal.
* 9. Auto-refresh switch is rendered (default on) and can be toggled.
*/
import { describe, it, expect, vi, beforeEach } from 'vitest'
@@ -321,6 +322,7 @@ describe('EnergyPage — test-read', () => {
})
expect(screen.getByTestId('test-read-ok')).toBeInTheDocument()
// Values rendered via formatMetricValue — voltage 230.2 → "230.20"
expect(screen.getByTestId('test-read-payload').textContent).toContain('230.2')
})
@@ -345,3 +347,48 @@ describe('EnergyPage — test-read', () => {
expect(screen.getByTestId('test-read-error').textContent).toContain('Connection timed out')
})
})
describe('EnergyPage — auto-refresh switch', () => {
beforeEach(() => {
vi.clearAllMocks()
setupDefaultMocks()
})
it('renders auto-refresh switch when devices exist', async () => {
renderEnergy()
await waitFor(() => {
expect(screen.getByTestId('auto-refresh-switch')).toBeInTheDocument()
})
})
it('auto-refresh switch is checked by default (default on)', async () => {
renderEnergy()
await waitFor(() => {
expect(screen.getByTestId('auto-refresh-switch')).toBeInTheDocument()
})
// Mantine Switch uses role="switch" and places data-testid directly on the
// <input> element; query it by the testid or by role.
const switchInput = screen.getByRole('switch', { name: /自动刷新/i })
expect(switchInput).toBeChecked()
})
it('toggling auto-refresh switch changes its checked state', async () => {
renderEnergy()
await waitFor(() => {
expect(screen.getByTestId('auto-refresh-switch')).toBeInTheDocument()
})
const switchInput = screen.getByRole('switch', { name: /自动刷新/i })
expect(switchInput).toBeChecked()
fireEvent.click(switchInput)
await waitFor(() => {
expect(switchInput).not.toBeChecked()
})
})
})