mirror of
https://github.com/sissbruecker/linkding.git
synced 2025-08-08 03:08:29 +02:00
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
This commit is contained in:
89
bookmarks/tests/test_bookmark_assets.py
Normal file
89
bookmarks/tests/test_bookmark_assets.py
Normal file
@@ -0,0 +1,89 @@
|
||||
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)
|
Reference in New Issue
Block a user