Skip to content

Commit 93dfbdd

Browse files
added tests
1 parent d52b2f0 commit 93dfbdd

File tree

2 files changed

+26
-10
lines changed

2 files changed

+26
-10
lines changed

src/sml2mqtt/sml_value/sml_value.py

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def process_frame(self, frame: SmlFrameValues):
3434

3535
self.mqtt.publish(value)
3636
self.last_publish = monotonic()
37+
return value
3738

3839
def describe(self) -> Generator[str, None, None]:
3940
yield f'<SmlValue>'

tests/sml_values/test_operations/test_operations.py

+25-10
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
from typing import Any, Final, Literal
22
from unittest.mock import Mock
33

4+
import pytest
45
from tests.sml_values.test_operations.helper import check_description, check_operation_repr
56

7+
from sml2mqtt.const import SmlFrameValues
8+
from sml2mqtt.sml_value import SmlValue
69
from sml2mqtt.sml_value.base import ValueOperationBase
710
from sml2mqtt.sml_value.operations import OffsetOperation, OrOperation, SequenceOperation
811

@@ -32,12 +35,20 @@ def get_operation_mock(self, return_value: Any) -> Mock:
3235
return m
3336

3437
def process_value(self, value: float):
38+
if isinstance(self.operation, SmlValue):
39+
m = Mock()
40+
m.get_value = Mock(return_value=value)
41+
m.obis = 'obis'
42+
ret = self.operation.process_frame(SmlFrameValues.create(0, [m]))
43+
self.sentinel = self.mocks[0].call_args[0][1]
44+
return ret
45+
3546
return self.operation.process_value(value, self.sentinel)
3647

3748

38-
def get_mock_group(cls: type[OrOperation | SequenceOperation], *return_values: Any) -> MockOperationsGroup:
49+
def get_mock_group(cls: type[OrOperation | SequenceOperation | SmlValue], *return_values: Any) -> MockOperationsGroup:
3950

40-
c = cls()
51+
c = cls() if cls is not SmlValue else cls('obis', Mock())
4152
m = MockOperationsGroup(c)
4253
for return_value in return_values:
4354
c.add_operation(m.get_operation_mock(return_value))
@@ -97,26 +108,30 @@ def test_or_description():
97108
assert o.process_value(None, None) is None
98109

99110

100-
def test_seq_no_exit():
101-
m = get_mock_group(SequenceOperation, 1, 2, 3)
111+
@pytest.mark.parametrize('cls', [SequenceOperation, SmlValue])
112+
def test_seq_no_exit(cls):
113+
m = get_mock_group(cls, 1, 2, 3)
102114
assert m.process_value(0) == 3
103115
m.assert_called(0, 1, 2)
104116

105117

106-
def test_seq_first_exit():
107-
m = get_mock_group(SequenceOperation, None, 2, None)
118+
@pytest.mark.parametrize('cls', [SequenceOperation, SmlValue])
119+
def test_seq_first_exit(cls):
120+
m = get_mock_group(cls, None, 2, None)
108121
assert m.process_value(1) is None
109122
m.assert_called(1, None, 2)
110123

111124

112-
def test_seq_last_exit():
113-
m = get_mock_group(SequenceOperation, 1, 2, None)
125+
@pytest.mark.parametrize('cls', [SequenceOperation, SmlValue])
126+
def test_seq_last_exit(cls):
127+
m = get_mock_group(cls, 1, 2, None)
114128
assert m.process_value(0) is None
115129
m.assert_called(0, 1, 2)
116130

117131

118-
def test_seq_single():
119-
m = get_mock_group(SequenceOperation, None)
132+
@pytest.mark.parametrize('cls', [SequenceOperation, SmlValue])
133+
def test_seq_single(cls):
134+
m = get_mock_group(cls, None)
120135
assert m.process_value(1) is None
121136
m.assert_called(1)
122137

0 commit comments

Comments
 (0)