Consolidate Persimmons shared backend and tests
This commit is contained in:
1 parent
a46e2ebf4d
commit
7d50011a10
1 file changed
+40
@@ -0,0 +1,40 @@
|
|||||||
|
import importlib.util
|
||||||
|
import io
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
import tempfile
|
||||||
|
import unittest
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[1]
|
||||||
|
spec = importlib.util.spec_from_file_location('updater', ROOT / 'persimmons/web/update-extension.py')
|
||||||
|
updater = importlib.util.module_from_spec(spec)
|
||||||
|
spec.loader.exec_module(updater)
|
||||||
|
|
||||||
|
|
||||||
|
class UpdateTests(unittest.TestCase):
|
||||||
|
def test_same_folder_preserves_identity_and_unrelated_files(self):
|
||||||
|
with tempfile.TemporaryDirectory() as name:
|
||||||
|
folder = Path(name)
|
||||||
|
manifest = (ROOT / 'persimmons-extension/manifest.json').read_bytes()
|
||||||
|
(folder / 'manifest.json').write_bytes(manifest)
|
||||||
|
(folder / 'keep.txt').write_text('unrelated')
|
||||||
|
raw = (ROOT / 'persimmons/web/extension.zip').read_bytes()
|
||||||
|
self.assertEqual(updater.update(folder, raw), json.loads(manifest)['version'])
|
||||||
|
self.assertEqual((folder / 'keep.txt').read_text(), 'unrelated')
|
||||||
|
self.assertEqual((folder / 'manifest.json').read_bytes(), manifest)
|
||||||
|
for bad in ('persimmons-extension/../escape.mjs', '/tmp/escape.mjs'):
|
||||||
|
archive = io.BytesIO()
|
||||||
|
with zipfile.ZipFile(archive, 'w') as zipped:
|
||||||
|
zipped.writestr('persimmons-extension/manifest.json', manifest)
|
||||||
|
zipped.writestr(bad, 'bad')
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
updater.update(folder, archive.getvalue())
|
||||||
|
archive = io.BytesIO()
|
||||||
|
with zipfile.ZipFile(archive, 'w') as zipped:
|
||||||
|
changed = json.loads(manifest)
|
||||||
|
changed['key'] = 'YWJj'
|
||||||
|
zipped.writestr('persimmons-extension/manifest.json', json.dumps(changed))
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
updater.update(folder, archive.getvalue())
|
||||||
|
self.assertEqual((folder / 'manifest.json').read_bytes(), manifest)
|
||||||
Reference in new issue
Block a user