From 7cc7f04b800912ee0cd630767ab48b7e40741283 Mon Sep 17 00:00:00 2001 From: Miguel Astor Date: Tue, 24 Mar 2026 15:12:45 -0400 Subject: [PATCH] test: update image view tests and add Image model tests --- viewer/test.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/viewer/test.py b/viewer/test.py index f93df07..95568ed 100644 --- a/viewer/test.py +++ b/viewer/test.py @@ -10,11 +10,13 @@ from PIL import Image # Django imports. from django.test import Client, RequestFactory, TestCase, override_settings from django.contrib.auth.models import User +from django.utils import timezone # Project imports. from viewer.common import SORT_LABELS from viewer.directory import do_recursive_search from viewer.views import gallery_view +from viewer.models import Image as Im class GalleryBaseTests(TestCase): @@ -363,6 +365,14 @@ class GalleryViewTests(GalleryBaseTests): ) self.assertIsNotNone(image_meta.get("created")) self.assertIsNotNone(image_meta.get("modified")) + # New image metadata fields: visits (int), visited (formatted ts), favorite (bool) + self.assertIn("visits", image_meta) + self.assertIsInstance(image_meta.get("visits"), int) + self.assertGreaterEqual(image_meta.get("visits"), 1) + self.assertIn("visited", image_meta) + self.assertIsNotNone(image_meta.get("visited")) + self.assertIn("favorite", image_meta) + self.assertIsInstance(image_meta.get("favorite"), bool) def test_sort_modes_recent_and_tnecer_use_mtime(self): recent = self.client.get("/gallery/?sort=recent") @@ -451,3 +461,43 @@ class GalleryTemplateTests(GalleryBaseTests): css_path = Path(__file__).resolve().parent / "static" / "css" / "styles.css" css = css_path.read_text(encoding="utf-8") self.assertIn("box-shadow: 0 5px 20px", css) + + +class ImageModelTests(GalleryBaseTests): + def test_image_model_defaults_and_path_storage(self): + # Create a model entry and verify defaults + path_str = str(self.gallery_root / "alpha.jpg") + img = Im.objects.create(user=self.user, path=path_str) + + self.assertEqual(img.visits, 0) + self.assertFalse(img.favorite) + self.assertIsNotNone(img.last_visited) + # FilePathField should store the provided path string + self.assertEqual(img.path, path_str) + + def test_get_request_increments_visits_and_updates_last_visited(self): + path_url = "/gallery/alpha.jpg/" + before = timezone.now() + response = self.client.get(path_url, follow=True) + self.assertEqual(response.status_code, 200) + + img = Im.objects.get(user=self.user, path=str(self.gallery_root / "alpha.jpg")) + self.assertGreaterEqual(img.visits, 1) + self.assertIsNotNone(img.last_visited) + # last_visited should be updated to a recent timestamp + self.assertGreaterEqual(img.last_visited, before) + + def test_post_toggles_favorite_flag(self): + path_url = "/gallery/alpha.jpg/" + # Ensure initial state + img, _ = Im.objects.get_or_create( + user=self.user, path=str(self.gallery_root / "alpha.jpg") + ) + img.favorite = False + img.save() + + response = self.client.post(path_url, follow=True) + self.assertEqual(response.status_code, 200) + + img.refresh_from_db() + self.assertTrue(img.favorite)