diff --git a/viewer/test_specials.py b/viewer/test_specials.py index 00ceb5e..f4c227c 100644 --- a/viewer/test_specials.py +++ b/viewer/test_specials.py @@ -34,6 +34,11 @@ class SpecialGalleriesTests(TestCase): Im.objects.create( user=self.user, path=str(c), favorite=True, visits=2, last_visited=now ) + # client for view tests + from django.test import Client + + self.client = Client() + self.client.force_login(self.user) def tearDown(self): self.settings_override.disable() @@ -51,3 +56,37 @@ class SpecialGalleriesTests(TestCase): # most-visited should be ordered descending by visits, expect b.jpg first self.assertGreaterEqual(len(most), 1) self.assertEqual(most[0].name, "b.jpg") + + def test_favorites_directory_view_and_links(self): + # Directory listing for favorites should show only favorite images + resp = self.client.get("/gallery/favorites/") + self.assertEqual(resp.status_code, 200) + ctx = resp.context + self.assertTrue(ctx.get("is_special")) + names = [img["name"] for img in ctx.get("images")] + self.assertEqual(sorted(names), ["a.jpg", "c.jpg"]) + # Back should be hidden (None) and home present + self.assertIsNone(ctx.get("back_url")) + self.assertIsNotNone(ctx.get("home_url")) + self.assertTrue(str(ctx.get("home_url")).startswith("/gallery/")) + # Breadcrumb should point to the special root + breadcrumbs = ctx.get("breadcrumbs") + self.assertEqual(breadcrumbs[0]["label"], "Favorites") + self.assertTrue(breadcrumbs[0]["path"].startswith("/gallery/favorites/")) + + def test_favorites_image_view_prev_next_and_breadcrumbs(self): + # Image view under special gallery should scope prev/next to favorites only + resp = self.client.get("/gallery/favorites/a.jpg/") + self.assertEqual(resp.status_code, 200) + ctx = resp.context + self.assertTrue(ctx.get("is_special")) + # Breadcrumbs: first is special root (clickable), last is filename non-clickable + crumbs = ctx.get("breadcrumbs") + self.assertEqual(crumbs[0]["label"], "Favorites") + self.assertIsNotNone(crumbs[0]["path"]) + self.assertEqual(crumbs[-1]["label"], "a.jpg") + self.assertIsNone(crumbs[-1]["path"]) + # Prev should be None for first in alphabetical order among favorites + self.assertIsNone(ctx.get("prev")) + # Next should be c.jpg (since favorites are a.jpg and c.jpg sorted) + self.assertIn("c.jpg", ctx.get("next"))