linkding/bookmarks/tests/test_bookmark_assets.py
Sascha Ißbrücker 4280ab40c6
Archive snapshots of websites locally (#672)
* Add basic HTML snapshots

* Implement asset list

* Add snapshot creation tests

* Add deletion tests

* Show file size

* Remove snapshots

* Create new snapshots

* Switch to single-file

* CSS tweak

* Remove auto refresh

* Show delete link when there is no file yet

* Add current date to display name

* Add flag for snapshot support

* Add option for disabling automatic snapshots

* Make snapshots sharable

* Document image variants

* Update README.md

* Add migrations

* Fix tests
2024-04-01 15:19:38 +02:00

89 lines
3.1 KiB
Python

import os
from django.conf import settings
from django.test import TestCase
from bookmarks.tests.helpers import (
BookmarkFactoryMixin,
)
from bookmarks.services import bookmarks
class BookmarkAssetsTestCase(TestCase, BookmarkFactoryMixin):
def tearDown(self):
temp_files = [
f for f in os.listdir(settings.LD_ASSET_FOLDER) if f.startswith("temp")
]
for temp_file in temp_files:
os.remove(os.path.join(settings.LD_ASSET_FOLDER, temp_file))
def setup_asset_file(self, filename):
if not os.path.exists(settings.LD_ASSET_FOLDER):
os.makedirs(settings.LD_ASSET_FOLDER)
filepath = os.path.join(settings.LD_ASSET_FOLDER, filename)
with open(filepath, "w") as f:
f.write("test")
def setup_asset_with_file(self, bookmark):
filename = f"temp_{bookmark.id}.html.gzip"
self.setup_asset_file(filename)
asset = self.setup_asset(bookmark=bookmark, file=filename)
return asset
def test_delete_bookmark_deletes_asset_file(self):
bookmark = self.setup_bookmark()
asset = self.setup_asset_with_file(bookmark)
self.assertTrue(
os.path.exists(os.path.join(settings.LD_ASSET_FOLDER, asset.file))
)
bookmark.delete()
self.assertFalse(
os.path.exists(os.path.join(settings.LD_ASSET_FOLDER, asset.file))
)
def test_bulk_delete_bookmarks_deletes_asset_files(self):
bookmark1 = self.setup_bookmark()
asset1 = self.setup_asset_with_file(bookmark1)
bookmark2 = self.setup_bookmark()
asset2 = self.setup_asset_with_file(bookmark2)
bookmark3 = self.setup_bookmark()
asset3 = self.setup_asset_with_file(bookmark3)
self.assertTrue(
os.path.exists(os.path.join(settings.LD_ASSET_FOLDER, asset1.file))
)
self.assertTrue(
os.path.exists(os.path.join(settings.LD_ASSET_FOLDER, asset2.file))
)
self.assertTrue(
os.path.exists(os.path.join(settings.LD_ASSET_FOLDER, asset3.file))
)
bookmarks.delete_bookmarks(
[bookmark1.id, bookmark2.id, bookmark3.id], self.get_or_create_test_user()
)
self.assertFalse(
os.path.exists(os.path.join(settings.LD_ASSET_FOLDER, asset1.file))
)
self.assertFalse(
os.path.exists(os.path.join(settings.LD_ASSET_FOLDER, asset2.file))
)
self.assertFalse(
os.path.exists(os.path.join(settings.LD_ASSET_FOLDER, asset3.file))
)
def test_save_updates_file_size(self):
# File does not exist initially
bookmark = self.setup_bookmark()
asset = self.setup_asset(bookmark=bookmark, file="temp.html.gz")
self.assertIsNone(asset.file_size)
# Add file, save again
self.setup_asset_file(asset.file)
asset.save()
self.assertEqual(asset.file_size, 4)
# Create asset with initial file
asset = self.setup_asset(bookmark=bookmark, file="temp.html.gz")
self.assertEqual(asset.file_size, 4)