2
2
import os
3
3
import re
4
4
from datetime import datetime
5
- from unittest .mock import ANY
5
+ from unittest .mock import ANY , PropertyMock , patch
6
6
from zoneinfo import ZoneInfo
7
7
8
8
import asyncclick as click
40
40
)
41
41
from kasa .cli .main import TYPES , _legacy_type_to_class , cli , cmd_command , raw_command
42
42
from kasa .cli .time import time
43
- from kasa .cli .usage import emeter , energy
43
+ from kasa .cli .usage import energy
44
44
from kasa .cli .wifi import wifi
45
45
from kasa .discover import Discover , DiscoveryResult
46
46
from kasa .iot import IotDevice
@@ -432,38 +432,45 @@ async def test_time_set(dev: Device, mocker, runner):
432
432
433
433
434
434
async def test_emeter (dev : Device , mocker , runner ):
435
- res = await runner .invoke (emeter , obj = dev )
435
+ mocker .patch ("kasa.Discover.discover_single" , return_value = dev )
436
+ base_cmd = ["--host" , "dummy" , "energy" ]
437
+ res = await runner .invoke (cli , base_cmd , obj = dev )
436
438
if not (energy := dev .modules .get (Module .Energy )):
437
439
assert "Device has no energy module." in res .output
438
440
return
439
441
440
- assert "== Emeter ==" in res .output
442
+ assert "== Energy ==" in res .output
441
443
442
444
if dev .device_type is not DeviceType .Strip :
443
- res = await runner .invoke (emeter , ["--index" , "0" ], obj = dev )
445
+ res = await runner .invoke (cli , [* base_cmd , "--index" , "0" ], obj = dev )
444
446
assert f"Device: { dev .host } does not have children" in res .output
445
- res = await runner .invoke (emeter , ["--name" , "mock" ], obj = dev )
447
+ res = await runner .invoke (cli , [* base_cmd , "--name" , "mock" ], obj = dev )
446
448
assert f"Device: { dev .host } does not have children" in res .output
447
449
448
450
if dev .device_type is DeviceType .Strip and len (dev .children ) > 0 :
449
451
child_energy = dev .children [0 ].modules .get (Module .Energy )
450
452
assert child_energy
451
- realtime_emeter = mocker .patch .object (child_energy , "get_status" )
452
- realtime_emeter .return_value = EmeterStatus ({"voltage_mv" : 122066 })
453
453
454
- res = await runner .invoke (emeter , ["--index" , "0" ], obj = dev )
455
- assert "Voltage: 122.066 V" in res .output
456
- realtime_emeter .assert_called ()
457
- assert realtime_emeter .call_count == 1
454
+ with patch .object (
455
+ type (child_energy ), "status" , new_callable = PropertyMock
456
+ ) as child_status :
457
+ child_status .return_value = EmeterStatus ({"voltage_mv" : 122066 })
458
+
459
+ res = await runner .invoke (cli , [* base_cmd , "--index" , "0" ], obj = dev )
460
+ assert "Voltage: 122.066 V" in res .output
461
+ child_status .assert_called ()
462
+ assert child_status .call_count == 1
458
463
459
- res = await runner .invoke (emeter , ["--name" , dev .children [0 ].alias ], obj = dev )
460
- assert "Voltage: 122.066 V" in res .output
461
- assert realtime_emeter .call_count == 2
464
+ res = await runner .invoke (
465
+ cli , [* base_cmd , "--name" , dev .children [0 ].alias ], obj = dev
466
+ )
467
+ assert "Voltage: 122.066 V" in res .output
468
+ assert child_status .call_count == 2
462
469
463
470
if isinstance (dev , IotDevice ):
464
471
monthly = mocker .patch .object (energy , "get_monthly_stats" )
465
472
monthly .return_value = {1 : 1234 }
466
- res = await runner .invoke (emeter , ["--year" , "1900" ], obj = dev )
473
+ res = await runner .invoke (cli , [* base_cmd , "--year" , "1900" ], obj = dev )
467
474
if not isinstance (dev , IotDevice ):
468
475
assert "Device does not support historical statistics" in res .output
469
476
return
@@ -474,7 +481,7 @@ async def test_emeter(dev: Device, mocker, runner):
474
481
if isinstance (dev , IotDevice ):
475
482
daily = mocker .patch .object (energy , "get_daily_stats" )
476
483
daily .return_value = {1 : 1234 }
477
- res = await runner .invoke (emeter , ["--month" , "1900-12" ], obj = dev )
484
+ res = await runner .invoke (cli , [* base_cmd , "--month" , "1900-12" ], obj = dev )
478
485
if not isinstance (dev , IotDevice ):
479
486
assert "Device has no historical statistics" in res .output
480
487
return
0 commit comments