def test_subscribe_no_data_then_set_data(self): # subscribe request = Subscribe(path=["b", "attr", "value"], delta=False) request.set_callback(Mock()) self.handle_subscribe(request) assert (self.o._tree.children["attr"].children["value"].update_requests ) == ([request]) self.assert_called_with(request.callback, Update(value=None)) request.callback.reset_mock() # set data and check response self.block["attr"] = Dummy() with self.o.changes_squashed: self.block.attr["value"] = 32 self.o.add_squashed_change(["b", "attr", "value"], 32) assert self.block.attr.value == 32 self.assert_called_with(request.callback, Update(value=32)) request.callback.reset_mock() # unsubscribe unsub = Unsubscribe() unsub.set_callback(request.callback) self.handle_unsubscribe(unsub) self.assert_called_with(request.callback, Return(value=None)) request.callback.reset_mock() # notify and check no longer responding with self.o.changes_squashed: self.block.attr["value"] = 33 self.o.add_squashed_change(["b", "attr", "value"], 33) assert self.block.attr.value == 33 request.callback.assert_not_called()
class TestUnsubscribe(unittest.TestCase): def setUp(self): self.callback = MagicMock() self.subscribe = Subscribe(32, ["."]) self.subscribe.set_callback(self.callback) self.subscribes = {self.subscribe.generate_key(): self.subscribe} self.o = Unsubscribe(32) self.o.set_callback(self.callback) def test_init(self): assert self.o.typeid == "malcolm:core/Unsubscribe:1.0" assert self.o.id == 32 def test_keys_same(self): assert self.subscribes[self.o.generate_key()] == self.subscribe def test_doc(self): assert get_doc_json("unsubscribe") == self.o.to_dict()