11from dataclasses import dataclass , field
22from typing import List , Optional
3- from unittest .mock import Mock
3+ from unittest .mock import MagicMock , Mock
44import pytest
55from packages .conftest import hierarchy_standard
66from control import bat_all
@@ -27,66 +27,40 @@ def data_fixture() -> None:
2727
2828
2929@pytest .mark .parametrize (
30- "parent, bat_power, pv_power, expected_power_hybrid " ,
30+ "max_ac_out, power, expected_result " ,
3131 [
32- pytest .param ({"id" : 6 , "type" : "counter" , "children" : [
33- {"id" : 2 , "type" : "bat" , "children" : []}]}, 100 , - 6400 , (150 , False ),
34- id = "kein Hybrid-System, Speicher wird geladen" ),
35- pytest .param ({"id" : 6 , "type" : "counter" , "children" : [
36- {"id" : 2 , "type" : "bat" , "children" : []}]}, - 100 , - 6400 , (150 , False ),
37- id = "kein Hybrid-System, Speicher wird entladen" ),
38- pytest .param ({"id" : 1 , "type" : "inverter" , "children" : []}, 1200 , - 6400 , (2000 , True ),
39- id = "Speicher lädt mit 1200W, max 2000W zusätzliche Entladeleistung bis WR max" ),
40- pytest .param ({"id" : 1 , "type" : "inverter" , "children" : []}, 600 , - 6400 , (1400 , True ),
41- id = "Speicher lädt mit 600W, max 1400W zusätzliche Entladeleistung bis WR max" ),
42- pytest .param ({"id" : 1 , "type" : "inverter" , "children" : []}, 0 , - 6400 , (800 , True ),
43- id = "Speicher neutral, max 800W Entladeleistung bis WR max" ),
44- pytest .param ({"id" : 1 , "type" : "inverter" , "children" : []}, - 600 , - 6400 , (200 , True ),
45- id = "Speicher entlädt mit 600W, max 200W Entladeleistung bis WR max" ),
46- pytest .param ({"id" : 1 , "type" : "inverter" , "children" : []}, - 800 , - 6400 , (0 , True ),
47- id = "Speicher entlädt mit 800W, maximale Entladeleistung des WR erreicht" ),
48- pytest .param ({"id" : 1 , "type" : "inverter" , "children" : []}, 1200 , - 7200 , (1200 , True ),
49- id = "Speicher lädt mit 1200W, max 1200W zusätzliche Entladeleistung bis WR max" ),
50- pytest .param ({"id" : 1 , "type" : "inverter" , "children" : []}, 600 , - 7200 , (600 , True ),
51- id = "Speicher lädt mit 600W, max 600W zusätzliche Entladeleistung bis WR max" ),
52- pytest .param ({"id" : 1 , "type" : "inverter" , "children" : []}, 0 , - 7200 , (0 , True ),
53- id = "Speicher neutral, maximale Entladeleistung des WR erreicht" ),
54- pytest .param ({"id" : 1 , "type" : "inverter" , "children" : []}, 1200 , - 7800 , (600 , True ),
55- id = "Speicher lädt mit 1200W, max 600W zusätzliche Entladeleistung bis WR max" ),
56- pytest .param ({"id" : 1 , "type" : "inverter" , "children" : []}, 600 , - 7800 , (0 , True ),
57- id = "Speicher lädt mit 600W, maximale Entladeleistung des WR erreicht" ),
58- ])
59- def test_max_bat_power_hybrid_system (parent , bat_power , pv_power , expected_power_hybrid , data_fixture , monkeypatch ):
60- # setup
61- # pv1-Data: max_ac_out 7200
62- mock_get_entry_of_parent = Mock (return_value = parent )
63- monkeypatch .setattr (data .data .counter_all_data , "get_entry_of_parent" , mock_get_entry_of_parent )
64- data .data .pv_data ["pv1" ].data .get .power = pv_power
65-
66- b = BatAll ()
67- bat2 = Bat (2 )
68- bat2 .data .get .power = bat_power
69-
70- # execution
71- power = b ._max_bat_power_hybrid_system (bat2 )
72-
73- # evaluation
74- assert power == expected_power_hybrid
32+ pytest .param (5000 , - 6000 , 1000 , id = "Leistung überschreitet max_ac_out" ),
33+ pytest .param (5000 , - 4000 , 0 , id = "Leistung liegt unter max_ac_out" ),
34+ pytest .param (5000 , 0 , 0 , id = "Keine Leistung (power = 0)" ),
35+ pytest .param (0 , - 6000 , 0 , id = "max_ac_out ist 0" ),
36+ ],
37+ )
38+ def test_inverter_limited_power (max_ac_out , power , expected_result ):
39+ # Mock für die Pv-Klasse
40+ inverter = Pv (1 )
41+ inverter .data .config .max_ac_out = max_ac_out
42+ inverter .data .get .power = power
43+ bat_all = BatAll ()
44+
45+ # Aufruf der zu testenden Funktion
46+ result = bat_all ._inverter_limited_power (inverter )
47+
48+ # Überprüfung des Ergebnisses
49+ assert result == expected_result
7550
7651
7752@pytest .mark .parametrize (
78- "required_power, return_max_bat_power_hybrid_system , expected_power" ,
53+ "required_power, return_inverter_limited_power , expected_power" ,
7954 [
80- pytest .param (1000 , (1100 , True ), 1000 , id = "maximale Entladeleistung nicht erreicht" ),
81- pytest .param (1000 , (900 , True ), 900 , id = "maximale Entladeleistung erreicht" ),
82- pytest .param (- 1000 , (10 , True ), - 1000 , id = "Speicher soll nicht mehr entladen werden" ),
83- pytest .param (1000 , (900 , False ), 1000 , id = "kein Hybrid-System" ),
55+ pytest .param (1000 , 0 , 1000 , id = "maximale Entladeleistung nicht erreicht" ),
56+ pytest .param (1000 , 100 , 900 , id = "maximale Entladeleistung erreicht" ),
57+ pytest .param (- 1000 , 10 , - 1000 , id = "Speicher soll nicht mehr entladen werden" ),
8458 ])
85- def test_limit_bat_power_discharge (required_power , return_max_bat_power_hybrid_system , expected_power , monkeypatch ):
59+ def test_limit_bat_power_discharge (required_power , return_inverter_limited_power , expected_power , monkeypatch ):
8660 # setup
87- data .data .bat_data = {"bat2 " : Bat (2 )}
88- mock_max_bat_power_hybrid_system = Mock (return_value = return_max_bat_power_hybrid_system )
89- monkeypatch .setattr (BatAll , "_max_bat_power_hybrid_system " , mock_max_bat_power_hybrid_system )
61+ data .data .pv_data = {"pv2 " : Pv (2 )}
62+ mock_inverter_limited_power = Mock (return_value = return_inverter_limited_power )
63+ monkeypatch .setattr (BatAll , "_inverter_limited_power " , mock_inverter_limited_power )
9064
9165 b = BatAll ()
9266
@@ -168,8 +142,8 @@ def test_get_charging_power_left(params: Params, caplog, data_fixture, monkeypat
168142 b .data .get .power = params .power
169143 data .data .bat_data ["bat0" ] = b
170144 data .data .general_data .data .chargemode_config .pv_charging = params .config
171- mock__max_bat_power_hybrid_system = Mock ( return_value = ( params . power , None ) )
172- monkeypatch .setattr (BatAll , "_max_bat_power_hybrid_system " , mock__max_bat_power_hybrid_system )
145+ mock_limit_bat_power_discharge = MagicMock ( side_effect = lambda x : x )
146+ monkeypatch .setattr (BatAll , "_limit_bat_power_discharge " , mock_limit_bat_power_discharge )
173147
174148 # execution
175149 b_all ._get_charging_power_left ()
0 commit comments