77from dataclasses import dataclass , replace
88from datetime import datetime , timedelta , timezone
99from random import randint
10- from typing import AsyncIterator , Iterator , TypeVar
10+ from typing import AsyncIterator , Iterator
1111from unittest .mock import MagicMock
1212
1313import async_solipsism
1414import time_machine
1515from frequenz .channels import Broadcast , Receiver
16- from frequenz .channels ._broadcast import Sender
1716from frequenz .client .dispatch .test .client import FakeClient , to_create_params
1817from frequenz .client .dispatch .test .generator import DispatchGenerator
1918from frequenz .client .dispatch .types import Dispatch , Frequency
@@ -63,32 +62,16 @@ class ActorTestEnv:
6362@fixture
6463async def actor_env () -> AsyncIterator [ActorTestEnv ]:
6564 """Return an actor test environment."""
66- T = TypeVar ("T" )
67-
68- class YieldingSender (Sender [T ]):
69- """A sender that yields after sending.
70-
71- For testing we want to manipulate the time after a call to send.
72-
73- The normal sender normally doesn't yield/await, robbing us of the
74- opportunity to manipulate the time.
75- """
76-
77- async def send (self , msg : T ) -> None :
78- """Send the value and yield."""
79- await super ().send (msg )
80- await asyncio .sleep (1 )
81-
82- updated_dispatches = Broadcast [DispatchEvent ]("updated_dispatches" )
83- ready_dispatches = Broadcast [Dispatch ]("ready_dispatches" )
65+ updated_dispatches = Broadcast [DispatchEvent ](name = "updated_dispatches" )
66+ ready_dispatches = Broadcast [Dispatch ](name = "ready_dispatches" )
8467 microgrid_id = randint (1 , 100 )
8568
8669 actor = DispatchingActor (
8770 microgrid_id = microgrid_id ,
8871 grpc_channel = MagicMock (),
8972 svc_addr = "localhost" ,
90- updated_dispatch_sender = YieldingSender ( updated_dispatches ),
91- ready_dispatch_sender = YieldingSender ( ready_dispatches ),
73+ updated_dispatch_sender = updated_dispatches . new_sender ( ),
74+ ready_dispatch_sender = ready_dispatches . new_sender ( ),
9275 )
9376
9477 client = FakeClient ()
@@ -144,9 +127,12 @@ async def _test_new_dispatch_created(
144127 case Deleted (dispatch ) | Updated (dispatch ):
145128 assert False , "Expected a created event"
146129 case Created (dispatch ):
147- sample .update_time = dispatch .update_time
148- sample .create_time = dispatch .create_time
149- sample .id = dispatch .id
130+ sample = replace (
131+ sample ,
132+ update_time = dispatch .update_time ,
133+ create_time = dispatch .create_time ,
134+ id = dispatch .id ,
135+ )
150136 assert dispatch == sample
151137
152138 return sample
@@ -159,16 +145,19 @@ async def test_existing_dispatch_updated(
159145) -> None :
160146 """Test that an existing dispatch is updated."""
161147 sample = generator .generate_dispatch (actor_env .microgrid_id )
162- sample .active = False
163- sample .recurrence .frequency = Frequency .DAILY
148+ sample = replace (
149+ sample ,
150+ active = False ,
151+ recurrence = replace (sample .recurrence , frequency = Frequency .DAILY ),
152+ )
164153
165154 fake_time .shift (timedelta (seconds = 1 ))
166155
167- await _test_new_dispatch_created (actor_env , sample )
156+ sample = await _test_new_dispatch_created (actor_env , sample )
168157 fake_time .shift (timedelta (seconds = 1 ))
169158
170159 await actor_env .client .update (
171- sample .id ,
160+ dispatch_id = sample .id ,
172161 new_fields = {
173162 "active" : True ,
174163 "recurrence.frequency" : Frequency .UNSPECIFIED ,
@@ -181,11 +170,13 @@ async def test_existing_dispatch_updated(
181170 case Created (dispatch ) | Deleted (dispatch ):
182171 assert False , "Expected an updated event"
183172 case Updated (dispatch ):
184- sample .update_time = dispatch .update_time
185- sample .active = True
186- sample .recurrence = replace (
187- sample .recurrence , frequency = Frequency .UNSPECIFIED
173+ sample = replace (
174+ sample ,
175+ active = True ,
176+ recurrence = replace (sample .recurrence , frequency = Frequency .UNSPECIFIED ),
177+ update_time = dispatch .update_time ,
188178 )
179+
189180 assert dispatch == sample
190181
191182
@@ -197,7 +188,7 @@ async def test_existing_dispatch_deleted(
197188 """Test that an existing dispatch is deleted."""
198189 sample = generator .generate_dispatch (actor_env .microgrid_id )
199190
200- await _test_new_dispatch_created (actor_env , sample )
191+ sample = await _test_new_dispatch_created (actor_env , sample )
201192
202193 await actor_env .client .delete (sample .id )
203194 fake_time .shift (timedelta (seconds = 1 ))
@@ -207,7 +198,7 @@ async def test_existing_dispatch_deleted(
207198 case Created (dispatch ) | Updated (dispatch ):
208199 assert False , "Expected a deleted event"
209200 case Deleted (dispatch ):
210- sample . create_time = dispatch .create_time
201+ sample = replace ( sample , update_time = dispatch .update_time )
211202 assert dispatch == sample
212203
213204
0 commit comments