From 6ab3e9657d53e892cfea1258435d76fd10a5f8b0 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Thu, 28 Mar 2024 10:46:21 +0100 Subject: [PATCH] test and fix for edge case --- chatmaild/src/chatmaild/metadata.py | 18 ++++++++---------- chatmaild/src/chatmaild/tests/test_metadata.py | 7 +++++++ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/chatmaild/src/chatmaild/metadata.py b/chatmaild/src/chatmaild/metadata.py index 8ad8bc4b..8900e2c9 100644 --- a/chatmaild/src/chatmaild/metadata.py +++ b/chatmaild/src/chatmaild/metadata.py @@ -35,25 +35,23 @@ class Notifier: self.to_notify_queue = Queue() def get_metadata_dict(self, addr): - addr_path = self.vmail_dir.joinpath(addr) - return FileDict(addr_path / "metadata.marshalled") + return FileDict(self.vmail_dir / addr / "metadata.marshalled") def add_token(self, addr, token): with self.get_metadata_dict(addr).modify() as data: tokens = data.get(METADATA_TOKEN_KEY) if tokens is None: - data[METADATA_TOKEN_KEY] = tokens = [] - if token not in tokens: + data[METADATA_TOKEN_KEY] = [token] + elif token not in tokens: tokens.append(token) def remove_token(self, addr, token): with self.get_metadata_dict(addr).modify() as data: - tokens = data.get(METADATA_TOKEN_KEY) - if tokens: - try: - tokens.remove(token) - except KeyError: - pass + tokens = data.get(METADATA_TOKEN_KEY, []) + try: + tokens.remove(token) + except ValueError: + pass def get_tokens(self, addr): return self.get_metadata_dict(addr).read().get(METADATA_TOKEN_KEY, []) diff --git a/chatmaild/src/chatmaild/tests/test_metadata.py b/chatmaild/src/chatmaild/tests/test_metadata.py index 204af006..a0f358a4 100644 --- a/chatmaild/src/chatmaild/tests/test_metadata.py +++ b/chatmaild/src/chatmaild/tests/test_metadata.py @@ -40,6 +40,13 @@ def test_notifier_persistence(tmp_path, testaddr, testaddr2): assert notifier1.get_tokens(testaddr2) == ["456"] +def test_remove_nonexisting(tmp_path, testaddr): + notifier1 = Notifier(tmp_path) + notifier1.add_token(testaddr, "123") + notifier1.remove_token(testaddr, "1l23k1l2k3") + assert notifier1.get_tokens(testaddr) == ["123"] + + def test_notifier_delete_without_set(notifier, testaddr): notifier.remove_token(testaddr, "123") assert not notifier.get_tokens(testaddr)