M8-T18: add source and multi-commodity meter UI
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
import { screen, waitFor, fireEvent } from '@testing-library/react'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
import { renderWithProviders } from '../test-utils'
|
||||
import { EnergyPage } from './EnergyPage'
|
||||
|
||||
@@ -135,6 +136,19 @@ describe('EnergyPage — device list', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('EnergyPage — M8 navigation labels', () => {
|
||||
beforeEach(() => { vi.clearAllMocks(); setupDefaultMocks() })
|
||||
it('has keyboard-operable Sources, Modbus Devices and Meters tabs, without a DSMR tab', async () => {
|
||||
const user = userEvent.setup(); renderEnergy()
|
||||
const sources = screen.getByRole('tab', { name: 'Sources' })
|
||||
expect(screen.getByRole('tab', { name: 'Modbus Devices' })).toBeInTheDocument()
|
||||
expect(screen.getByRole('tab', { name: 'Meters' })).toBeInTheDocument()
|
||||
expect(screen.queryByRole('tab', { name: /^DSMR$/ })).not.toBeInTheDocument()
|
||||
sources.focus(); await user.keyboard('{Enter}')
|
||||
expect(await screen.findByTestId('panel-sources')).toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
describe('EnergyPage — create device', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
|
||||
@@ -45,7 +45,7 @@ import { ContractManager } from '../energy/ContractManager'
|
||||
import { MeterManager } from '../energy/MeterManager'
|
||||
import { TibberPrices } from '../energy/TibberPrices'
|
||||
import { CostView } from '../energy/CostView'
|
||||
import { DsmrPanel } from '../energy/DsmrPanel'
|
||||
import { SourceManager } from '../energy/SourceManager'
|
||||
import type { ModbusDevice, ModbusTestReadResponse, MetricInfo } from '../energy/hooks'
|
||||
import { ApiError } from '../api/client'
|
||||
import { formatMetricValue } from '../energy/format'
|
||||
@@ -603,7 +603,7 @@ function DevicesTab() {
|
||||
return (
|
||||
<Stack gap="lg">
|
||||
<Group justify="space-between" align="center">
|
||||
<Title order={2}>Energy — Devices</Title>
|
||||
<Title order={2}>Energy — Modbus Devices</Title>
|
||||
<Button onClick={openCreate} data-testid="device-new-button">
|
||||
New Device
|
||||
</Button>
|
||||
@@ -659,8 +659,11 @@ export function EnergyPage() {
|
||||
<Container size="xl" pt="xl" pb="xl" data-testid="energy-page">
|
||||
<Tabs defaultValue="devices">
|
||||
<Tabs.List mb="lg">
|
||||
<Tabs.Tab value="sources" data-testid="tab-sources">
|
||||
Sources
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab value="devices" data-testid="tab-devices">
|
||||
Devices
|
||||
Modbus Devices
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab value="meters" data-testid="tab-meters">
|
||||
Meters
|
||||
@@ -674,11 +677,12 @@ export function EnergyPage() {
|
||||
<Tabs.Tab value="costs" data-testid="tab-costs">
|
||||
Costs
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab value="dsmr" data-testid="tab-dsmr">
|
||||
DSMR
|
||||
</Tabs.Tab>
|
||||
</Tabs.List>
|
||||
|
||||
<Tabs.Panel value="sources" data-testid="panel-sources">
|
||||
<SourceManager />
|
||||
</Tabs.Panel>
|
||||
|
||||
<Tabs.Panel value="devices" data-testid="panel-devices">
|
||||
<DevicesTab />
|
||||
</Tabs.Panel>
|
||||
@@ -699,9 +703,6 @@ export function EnergyPage() {
|
||||
<CostView />
|
||||
</Tabs.Panel>
|
||||
|
||||
<Tabs.Panel value="dsmr" data-testid="panel-dsmr">
|
||||
<DsmrPanel />
|
||||
</Tabs.Panel>
|
||||
</Tabs>
|
||||
</Container>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user