Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
43 lines
1.9 KiB
Python
43 lines
1.9 KiB
Python
import importlib.util
|
|
import json
|
|
from pathlib import Path
|
|
import tempfile
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
spec=importlib.util.spec_from_file_location('sms_store',Path(__file__).resolve().parents[1]/'runtime/sms-inbox.py')
|
|
store=importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(store)
|
|
|
|
class SmsStoreTests(unittest.TestCase):
|
|
def setUp(self):
|
|
self.temp=tempfile.TemporaryDirectory()
|
|
self.root=Path(self.temp.name)
|
|
transaction=store.transaction
|
|
self.override=patch.object(store,'transaction',lambda change,**kw: transaction(change,root=self.root,**kw))
|
|
self.override.start()
|
|
def tearDown(self):
|
|
self.override.stop()
|
|
self.temp.cleanup()
|
|
def test_terminal_state_survives_message_removal(self):
|
|
store.record_outgoing('/ril_0/messageabc','sent')
|
|
self.assertEqual(store.outgoing_state('/ril_0/messageabc'),'sent')
|
|
store.record_outgoing('/ril_0/messageabc','pending')
|
|
self.assertEqual(store.outgoing_state('/ril_0/messageabc'),'sent')
|
|
self.assertEqual((self.root/'outgoing.json').stat().st_mode & 0o777,0o600)
|
|
def test_outgoing_does_not_overwrite_unacknowledged_incoming(self):
|
|
store.transaction(lambda rows:rows.append({'receipt':'receipt'}))
|
|
store.record_outgoing('/ril_0/messageabc','failed')
|
|
self.assertEqual(store.pending(),[{'receipt':'receipt'}])
|
|
store.acknowledge(['receipt'])
|
|
self.assertEqual(store.pending(),[])
|
|
self.assertEqual(store.outgoing_state('/ril_0/messageabc'),'failed')
|
|
def test_latest_terminal_state_replaces_same_path(self):
|
|
store.record_outgoing('/ril_0/messageabc','failed')
|
|
store.record_outgoing('/ril_0/messageabc','sent')
|
|
rows=json.loads((self.root/'outgoing.json').read_text())
|
|
self.assertEqual(len(rows),1)
|
|
self.assertNotIn('body',rows[0])
|
|
self.assertNotIn('number',rows[0])
|
|
|
|
if __name__=='__main__': unittest.main()
|