1- import { test , expect } from "@playwright/test" ;
1+ import { test , expect , type Page } from "@playwright/test" ;
22import { start , stop , restart , baseUrl } from "./evcc" ;
33import {
44 editorClear ,
@@ -9,17 +9,32 @@ import {
99} from "./utils" ;
1010
1111const CONFIG_GRID_ONLY = "config-grid-only.evcc.yaml" ;
12+ const CONFIG_BASICS = "basics.evcc.yaml" ;
1213
1314test . use ( { baseURL : baseUrl ( ) } ) ;
1415
15- test . beforeEach ( async ( ) => {
16- await start ( CONFIG_GRID_ONLY ) ;
17- } ) ;
18- test . afterEach ( async ( ) => {
19- await stop ( ) ;
20- } ) ;
16+ async function createExtMeter ( page : Page , title : string , power : string ) {
17+ const modal = page . getByTestId ( "meter-modal" ) ;
18+
19+ await page . getByRole ( "button" , { name : "Add additional meter" } ) . click ( ) ;
20+ await expectModalVisible ( modal ) ;
21+ await modal . getByRole ( "button" , { name : "Add regular consumer" } ) . click ( ) ;
22+ await modal . getByLabel ( "Title" ) . fill ( title ) ;
23+ await modal . getByLabel ( "Usage" ) . selectOption ( "battery" ) ;
24+ await modal . getByLabel ( "Manufacturer" ) . selectOption ( "Demo battery" ) ;
25+ await modal . getByLabel ( "Power" ) . fill ( power ) ;
26+ await modal . getByRole ( "button" , { name : "Save" } ) . click ( ) ;
27+ await expectModalHidden ( modal ) ;
28+ }
2129
2230test . describe ( "ext meter" , async ( ) => {
31+ test . beforeEach ( async ( ) => {
32+ await start ( CONFIG_GRID_ONLY ) ;
33+ } ) ;
34+ test . afterEach ( async ( ) => {
35+ await stop ( ) ;
36+ } ) ;
37+
2338 test ( "template-based ext meter" , async ( { page } ) => {
2439 await page . goto ( "/#/config" ) ;
2540 await enableExperimental ( page , false ) ;
@@ -161,3 +176,49 @@ test.describe("ext meter", async () => {
161176 await expect ( page . getByTestId ( "ext" ) ) . toHaveCount ( 0 ) ;
162177 } ) ;
163178} ) ;
179+
180+ test . describe ( "ext meter order" , async ( ) => {
181+ test . beforeEach ( async ( ) => {
182+ await start ( CONFIG_BASICS ) ;
183+ } ) ;
184+ test . afterEach ( async ( ) => {
185+ await stop ( ) ;
186+ } ) ;
187+
188+ test ( "ensure order is preserved" , async ( { page } ) => {
189+ await page . goto ( "/#/config" ) ;
190+ await enableExperimental ( page , false ) ;
191+ await expect ( page . getByTestId ( "ext" ) ) . toHaveCount ( 0 ) ;
192+
193+ // Create meters
194+ await createExtMeter ( page , "Meter 1" , "10" ) ;
195+ await createExtMeter ( page , "Meter 2" , "20" ) ;
196+ await createExtMeter ( page , "Meter 3" , "30" ) ;
197+
198+ // Verify order in config UI
199+ const extMeters = page . getByTestId ( "ext" ) ;
200+ await expect ( extMeters ) . toHaveCount ( 3 ) ;
201+ await expect ( extMeters . nth ( 0 ) ) . toContainText ( "Meter 1" ) ;
202+ await expect ( extMeters . nth ( 1 ) ) . toContainText ( "Meter 2" ) ;
203+ await expect ( extMeters . nth ( 2 ) ) . toContainText ( "Meter 3" ) ;
204+
205+ // Restart and check order is preserved in both UIs
206+ await restart ( CONFIG_BASICS ) ;
207+
208+ // Check config UI
209+ await page . goto ( "/#/config" ) ;
210+ await expect ( extMeters ) . toHaveCount ( 3 ) ;
211+ await expect ( extMeters . nth ( 0 ) ) . toContainText ( "Meter 1" ) ;
212+ await expect ( extMeters . nth ( 1 ) ) . toContainText ( "Meter 2" ) ;
213+ await expect ( extMeters . nth ( 2 ) ) . toContainText ( "Meter 3" ) ;
214+
215+ // Verify order in main UI consumer dropdown
216+ await page . goto ( "/#/" ) ;
217+ await page . getByTestId ( "energyflow" ) . click ( ) ;
218+ await page . getByRole ( "button" , { name : "Consumption" } ) . click ( ) ;
219+ const consumers = await page . getByTestId ( "energyflow-entry-consumer" ) ;
220+ await expect ( consumers . nth ( 0 ) ) . toContainText ( "Meter 1" ) ;
221+ await expect ( consumers . nth ( 1 ) ) . toContainText ( "Meter 2" ) ;
222+ await expect ( consumers . nth ( 2 ) ) . toContainText ( "Meter 3" ) ;
223+ } ) ;
224+ } ) ;
0 commit comments