Skip to content

Commit db850a9

Browse files
committed
Add test for the Selector class
Signed-off-by: Leandro Lucarella <[email protected]>
1 parent dadd231 commit db850a9

File tree

2 files changed

+546
-0
lines changed

2 files changed

+546
-0
lines changed

tests/utils/test_selector.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# License: MIT
2+
# Copyright © 2023 Frequenz Energy-as-a-Service GmbH
3+
4+
"""Tests for the Selector implementation."""
5+
6+
from unittest import mock
7+
8+
import pytest
9+
10+
from frequenz.channels import Receiver, ReceiverStoppedError
11+
from frequenz.channels.util import Selected, selected_from
12+
13+
14+
class TestSelected:
15+
"""Tests for the Selected class."""
16+
17+
def test_with_value(self) -> None:
18+
"""Test selected from a receiver with a value."""
19+
recv = mock.MagicMock(spec=Receiver[int])
20+
recv.consume.return_value = 42
21+
selected = Selected[int](recv)
22+
23+
assert selected_from(selected, recv)
24+
assert selected.value == 42
25+
assert selected.exception is None
26+
assert not selected.was_stopped()
27+
28+
def test_with_exception(self) -> None:
29+
"""Test selected from a receiver with an exception."""
30+
recv = mock.MagicMock(spec=Receiver[int])
31+
exception = Exception("test")
32+
recv.consume.side_effect = exception
33+
selected = Selected[int](recv)
34+
35+
assert selected_from(selected, recv)
36+
with pytest.raises(Exception, match="test"):
37+
_ = selected.value
38+
assert selected.exception is exception
39+
assert not selected.was_stopped()
40+
41+
def test_with_stopped(self) -> None:
42+
"""Test selected from a stopped receiver."""
43+
recv = mock.MagicMock(spec=Receiver[int])
44+
exception = ReceiverStoppedError[int](recv)
45+
recv.consume.side_effect = exception
46+
selected = Selected[int](recv)
47+
48+
assert selected_from(selected, recv)
49+
with pytest.raises(
50+
ReceiverStoppedError,
51+
match=r"Receiver <MagicMock spec='_GenericAlias' id='\d+'> was stopped",
52+
):
53+
_ = selected.value
54+
assert selected.exception is exception
55+
assert selected.was_stopped()

0 commit comments

Comments
 (0)