Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add platform tests to enphase_envoy #114390

Open
wants to merge 59 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
2603000
Add encharge/enpower to enphase_envoy test model
catsmanac Mar 28, 2024
8d244cc
Add switch platform tests to enphase_envoy
catsmanac Mar 28, 2024
8884afe
Add select platform tests to enphase_envoy
catsmanac Mar 28, 2024
0b306a3
Add number platform tests to enphase_envoy
catsmanac Mar 28, 2024
5b04f05
Add binary_sensor platform tests to enphase_envoy
catsmanac Mar 28, 2024
457c4ea
Add test for initial enabled sensors for enphase_envoy
catsmanac Mar 28, 2024
ee20c75
Fix double property in test model of enphase_envoy
catsmanac Mar 28, 2024
b59247a
review feedbak refactor fixture
catsmanac Mar 29, 2024
ea4ebea
review feedback use individual entity snapshots
catsmanac Mar 29, 2024
453ee16
review feedback get test parameters from fixture
catsmanac Mar 29, 2024
37f0304
update test model enphase_envoy with correct relay settings
catsmanac Mar 30, 2024
5aed143
review feedback remove block till done.
catsmanac Mar 30, 2024
85d50af
review feedback remove complex size test
catsmanac Mar 30, 2024
0689214
review feedback load entity_register as test fixture
catsmanac Mar 30, 2024
2342f8b
load test data from fixtures and add 2 fixture files for enphase_envoy
catsmanac Mar 31, 2024
b2dc745
Add more tests, combine some and refactor parameters
catsmanac Apr 2, 2024
0e22d32
Add more enphase_envoy test fixtures
catsmanac Apr 2, 2024
4e26df3
add new enphase_envoy fixtures to diagnostics test
catsmanac Apr 2, 2024
4742a3b
Merge branch 'dev' into EnphaseTests
catsmanac Apr 7, 2024
5283f0f
fix random changing order in diagnostics test snapshot
catsmanac Apr 7, 2024
5e74c07
Merge branch 'dev' into EnphaseTests
catsmanac Apr 7, 2024
2670d80
Merge branch 'dev' into EnphaseTests
catsmanac Apr 15, 2024
e0c7d79
Add test with all enabled entities for enphase_envoy sensors
catsmanac Apr 15, 2024
b1dc7de
Implement review feedback, avoid if where possible
catsmanac Apr 15, 2024
1a82c47
Merge branch 'dev' into EnphaseTests
bdraco Apr 16, 2024
13eb6ee
Merge branch 'dev' into EnphaseTests
catsmanac Apr 17, 2024
646bf3d
Merge branch 'dev' into EnphaseTests
catsmanac Apr 18, 2024
da46f67
Merge branch 'dev' into EnphaseTests
catsmanac Apr 19, 2024
a0fd337
Merge branch 'dev' into EnphaseTests
catsmanac Apr 23, 2024
e89b744
fix new ruff test reporting shadowing a Python builtin
catsmanac Apr 23, 2024
5e2e70c
Merge branch 'dev' into EnphaseTests
catsmanac Apr 24, 2024
c7b900c
Apply pre-commit changes
catsmanac Apr 24, 2024
1ff5a92
Merge branch 'dev' into EnphaseTests
catsmanac Apr 24, 2024
16c9b61
Merge branch 'dev' into EnphaseTests
catsmanac Apr 25, 2024
7e0fb6e
Merge branch 'dev' into EnphaseTests
catsmanac Apr 26, 2024
ff52d2e
Merge branch 'dev' into EnphaseTests
catsmanac Apr 27, 2024
2b48c8e
Merge branch 'dev' into EnphaseTests
catsmanac Apr 28, 2024
f1204ff
Merge branch 'dev' into EnphaseTests
catsmanac Apr 29, 2024
b093167
Merge branch 'dev' into EnphaseTests
catsmanac Apr 30, 2024
b6ead84
Merge branch 'dev' into EnphaseTests
catsmanac May 1, 2024
44bb5eb
Merge branch 'dev' into EnphaseTests
catsmanac May 2, 2024
21ffc62
Merge branch 'dev' into EnphaseTests
catsmanac May 2, 2024
97b86d6
Merge branch 'dev' into EnphaseTests
catsmanac May 3, 2024
3392578
Merge branch 'dev' into EnphaseTests
catsmanac May 4, 2024
e26b967
Merge branch 'dev' into EnphaseTests
catsmanac May 6, 2024
9d5b50b
Merge branch 'dev' into EnphaseTests
catsmanac May 11, 2024
6b7da2b
Merge branch 'dev' into EnphaseTests
catsmanac May 13, 2024
5b1da40
Merge branch 'dev' into EnphaseTests
catsmanac May 16, 2024
099b369
Merge branch 'dev' into EnphaseTests
catsmanac May 17, 2024
a53b1ca
Merge branch 'dev' into EnphaseTests
catsmanac May 18, 2024
0697980
Remove more branches.
catsmanac May 19, 2024
7e61d66
Merge branch 'dev' into EnphaseTests
catsmanac May 19, 2024
2260a1f
Merge branch 'dev' into EnphaseTests
catsmanac May 21, 2024
0ca71e5
Merge branch 'dev' into EnphaseTests
catsmanac May 26, 2024
09911c9
Update test snapshot for last changes.
catsmanac May 26, 2024
ec81456
Merge branch 'dev' into EnphaseTests
catsmanac May 27, 2024
ce42224
Merge branch 'dev' into EnphaseTests
catsmanac May 28, 2024
ece7a93
add test parameters to merged tests and remove double declaraion afte…
catsmanac May 28, 2024
a2bc2c8
Merge branch 'dev' into EnphaseTests
catsmanac May 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
248 changes: 245 additions & 3 deletions tests/components/enphase_envoy/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,24 @@
from pyenphase import (
Envoy,
EnvoyData,
EnvoyEncharge,
EnvoyEnchargeAggregate,
EnvoyEnchargePower,
EnvoyInverter,
EnvoySystemConsumption,
EnvoySystemProduction,
EnvoyTokenAuth,
)
from pyenphase.const import PhaseNames, SupportedFeatures
from pyenphase.models.dry_contacts import (
DryContactAction,
DryContactMode,
DryContactStatus,
DryContactType,
EnvoyDryContactSettings,
EnvoyDryContactStatus,
)
from pyenphase.models.enpower import EnvoyEnpower
from pyenphase.models.meters import (
CtMeterStatus,
CtState,
Expand All @@ -19,6 +31,7 @@
EnvoyMeterData,
EnvoyPhaseMode,
)
from pyenphase.models.tariff import EnvoyStorageMode, EnvoyStorageSettings, EnvoyTariff
import pytest

from homeassistant.components.enphase_envoy import DOMAIN
Expand Down Expand Up @@ -60,28 +73,49 @@ def mock_envoy_fixture(
mock_authenticate,
mock_setup,
mock_auth,
mock_go_on_grid,
mock_go_off_grid,
mock_open_dry_contact,
mock_close_dry_contact,
mock_update_dry_contact,
mock_disable_charge_from_grid,
mock_enable_charge_from_grid,
mock_set_reserve_soc,
mock_set_storage_mode,
):
"""Define a mocked Envoy fixture."""
mock_envoy = Mock(spec=Envoy)
mock_envoy.serial_number = serial_number
mock_envoy.firmware = "7.1.2"
mock_envoy.part_number = "123456789"
mock_envoy.envoy_model = "Envoy, phases: 3, phase mode: three, net-consumption CT, production CT, storage CT"
mock_envoy.envoy_model = "Envoy, phases: 3, phase mode: split, net-consumption CT, production CT, storage CT"
mock_envoy.authenticate = mock_authenticate
mock_envoy.go_off_grid = mock_go_off_grid
mock_envoy.go_on_grid = mock_go_on_grid
mock_envoy.open_dry_contact = mock_open_dry_contact
mock_envoy.close_dry_contact = mock_close_dry_contact
mock_envoy.disable_charge_from_grid = mock_disable_charge_from_grid
mock_envoy.enable_charge_from_grid = mock_enable_charge_from_grid
mock_envoy.update_dry_contact = mock_update_dry_contact
mock_envoy.set_reserve_soc = mock_set_reserve_soc
mock_envoy.set_storage_mode = mock_set_storage_mode

mock_envoy.setup = mock_setup
mock_envoy.auth = mock_auth
mock_envoy.supported_features = SupportedFeatures(
SupportedFeatures.INVERTERS
| SupportedFeatures.PRODUCTION
| SupportedFeatures.PRODUCTION
| SupportedFeatures.NET_CONSUMPTION
| SupportedFeatures.METERING
| SupportedFeatures.THREEPHASE
| SupportedFeatures.CTMETERS
| SupportedFeatures.ENCHARGE
| SupportedFeatures.ENPOWER
)
mock_envoy.phase_mode = EnvoyPhaseMode.THREE
mock_envoy.phase_count = 3
mock_envoy.active_phase_count = 3
mock_envoy.ct_meter_count = 3
mock_envoy.ct_meter_count = 2
mock_envoy.consumption_meter_type = CtType.NET_CONSUMPTION
mock_envoy.production_meter_type = CtType.PRODUCTION
mock_envoy.storage_meter_type = CtType.STORAGE
Expand Down Expand Up @@ -335,6 +369,160 @@ def mock_envoy_fixture(
max_report_watts=1,
)
},
encharge_inventory={
"123456": EnvoyEncharge(
admin_state=6,
admin_state_str="ENCHG_STATE_READY",
bmu_firmware_version="2.1.34",
comm_level_2_4_ghz=4,
comm_level_sub_ghz=4,
communicating=True,
dc_switch_off=False,
encharge_capacity=3500,
encharge_revision=2,
firmware_loaded_date=1695330323,
firmware_version="2.6.5973_rel/22.11",
installed_date=1695330323,
last_report_date=1695769447,
led_status=17,
max_cell_temp=30,
operating=True,
part_number="830-01760-r37",
percent_full=15,
serial_number="123456",
temperature=29,
temperature_unit="C",
zigbee_dongle_fw_version="100F",
)
},
enpower=EnvoyEnpower(
grid_mode="multimode-ongrid",
admin_state=24,
admin_state_str="ENPWR_STATE_OPER_CLOSED",
comm_level_2_4_ghz=5,
comm_level_sub_ghz=5,
communicating=True,
firmware_loaded_date=1695330323,
firmware_version="1.2.2064_release/20.34",
installed_date=1695330323,
last_report_date=1695769447,
mains_admin_state="closed",
mains_oper_state="closed",
operating=True,
part_number="830-01760-r37",
serial_number="654321",
temperature=79,
temperature_unit="F",
zigbee_dongle_fw_version="1009",
),
encharge_power={
"123456": EnvoyEnchargePower(apparent_power_mva=0, real_power_mw=0, soc=15)
},
encharge_aggregate=EnvoyEnchargeAggregate(
available_energy=525,
backup_reserve=526,
state_of_charge=15,
reserve_state_of_charge=15,
configured_reserve_state_of_charge=15,
max_available_capacity=3500,
),
tariff=EnvoyTariff(
currency={"code": "EUR"},
logger="mylogger",
date="1695744220",
storage_settings=EnvoyStorageSettings(
mode=EnvoyStorageMode.SELF_CONSUMPTION,
operation_mode_sub_type="",
reserved_soc=15.0,
very_low_soc=5,
charge_from_grid=True,
date="1695598084",
),
single_rate={"rate": 0.0, "sell": 0.0},
seasons=[
{
"id": "season_1",
"start": "1/1",
"days": [
{
"id": "all_days",
"days": "Mon,Tue,Wed,Thu,Fri,Sat,Sun",
"must_charge_start": 444,
"must_charge_duration": 35,
"must_charge_mode": "CG",
"enable_discharge_to_grid": True,
"periods": [
{"id": "period_1", "start": 480, "rate": 0.1898},
{"id": "filler", "start": 1320, "rate": 0.1034},
],
}
],
"tiers": [],
}
],
seasons_sell=[],
),
dry_contact_status={
"NC1": EnvoyDryContactStatus(id="NC1", status=DryContactStatus.OPEN),
"NC2": EnvoyDryContactStatus(id="NC2", status=DryContactStatus.CLOSED),
"NC3": EnvoyDryContactStatus(id="NC3", status=DryContactStatus.OPEN),
},
dry_contact_settings={
"NC1": EnvoyDryContactSettings(
id="NC1",
black_start=None,
essential_end_time=None,
essential_start_time=None,
generator_action=DryContactAction.APPLY,
grid_action=DryContactAction.SHED,
load_name="",
manual_override=None,
micro_grid_action=DryContactAction.SCHEDULE,
mode=DryContactMode.STATE_OF_CHARGE,
override=False,
priority=None,
pv_serial_nb=[],
soc_high=70.0,
soc_low=30.0,
type=DryContactType.NONE,
),
"NC2": EnvoyDryContactSettings(
id="NC2",
black_start=None,
essential_end_time=None,
essential_start_time=None,
generator_action=DryContactAction.SHED,
grid_action=DryContactAction.APPLY,
load_name="",
manual_override=None,
micro_grid_action=DryContactAction.NONE,
mode=DryContactMode.MANUAL,
override=False,
priority=None,
pv_serial_nb=[],
soc_high=70.0,
soc_low=30.0,
type=DryContactType.NONE,
),
"NC3": EnvoyDryContactSettings(
id="NC3",
black_start=None,
essential_end_time=None,
essential_start_time=None,
generator_action=DryContactAction.NONE,
grid_action=DryContactAction.APPLY,
load_name="",
manual_override=None,
micro_grid_action=DryContactAction.SHED,
mode=DryContactMode.MANUAL,
override=False,
priority=None,
pv_serial_nb=[],
soc_high=70.0,
soc_low=30.0,
type=DryContactType.NONE,
),
},
raw={"varies_by": "firmware_version"},
)
mock_envoy.update = AsyncMock(return_value=mock_envoy.data)
Expand Down Expand Up @@ -381,3 +569,57 @@ def mock_setup():
def serial_number_fixture():
"""Define a serial number fixture."""
return "1234"


@pytest.fixture(name="mock_go_on_grid")
def go_on_grid_fixture():
"""Define a go_on_grid fixture."""
return AsyncMock(return_value="[]")


@pytest.fixture(name="mock_go_off_grid")
def go_off_grid_fixture():
"""Define a go_off_grid fixture."""
return AsyncMock(return_value="[]")


@pytest.fixture(name="mock_update_dry_contact")
def update_dry_contact_fixture():
"""Define a update_dry_contact fixture."""
return AsyncMock(return_value="[]")


@pytest.fixture(name="mock_open_dry_contact")
def open_dry_contact_fixture():
"""Define a gopen dry contact fixture."""
return AsyncMock(return_value="[]")


@pytest.fixture(name="mock_close_dry_contact")
def close_dry_contact_fixture():
"""Define a close dry contact fixture."""
return AsyncMock(return_value="[]")


@pytest.fixture(name="mock_enable_charge_from_grid")
def enable_charge_from_grid_fixture():
"""Define a enable charge from grid fixture."""
return AsyncMock(return_value="[]")


@pytest.fixture(name="mock_disable_charge_from_grid")
def disable_charge_from_grid_fixture():
"""Define a disable charge from grid fixture."""
return AsyncMock(return_value="[]")


@pytest.fixture(name="mock_set_storage_mode")
def set_storage_mode_fixture():
"""Define a update_dry_contact fixture."""
return AsyncMock(return_value="[]")


@pytest.fixture(name="mock_set_reserve_soc")
def set_reserve_soc_fixture():
"""Define a update_dry_contact fixture."""
return AsyncMock(return_value="[]")