Dopsán test, upraveny věci, aby běžel

This commit is contained in:
LEdoian 2025-12-21 19:43:46 +00:00
parent 1f499a00a1
commit 4a36ad5d57
3 changed files with 95 additions and 29 deletions

View file

@ -3,14 +3,14 @@
{% load bazmeky %}
{% block nadpis1a %}
{{galerie.nazev}}: {{ obrazek.popisek | default:"Fotka" }}
{{galerie.nazev}}: {{ soubor.popisek | default:"Fotka" }}
{% endblock %}
{# přecházení mezi fotkami pomocí šipek #}
{% block script %}
{% with obrazky_predchozi|last as predchozi_obrazek %}
{% with obrazky_dalsi|first as dalsi_obrazek %}
{% with soubory_predchozi|last as predchozi_soubor %}
{% with soubory_dalsi|first as dalsi_soubor %}
<script type="text/javascript">
$(document).ready(function() {
$(document).keydown(function(e) {
@ -18,16 +18,16 @@
if ($(document.activeElement).parents("#komentarform").length > 0) {
return;
}
{% if predchozi_obrazek %}
{% if predchozi_soubor %}
// doleva
if (e.which == 37) {
window.location.assign("{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=predchozi_obrazek.pk %}#nahoru");
window.location.assign("{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=predchozi_soubor.pk %}#nahoru");
}
{% endif %}
{% if dalsi_obrazek %}
{% if dalsi_soubor %}
// doprava
if (e.which == 39) {
window.location.assign("{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=dalsi_obrazek.pk %}#nahoru");
window.location.assign("{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=dalsi_soubor.pk %}#nahoru");
}
{% endif %}
if (e.which == 27) {
@ -47,7 +47,7 @@
{% block content %}
<div class="{% if obrazek.galerie.zobrazit == 1 %}mam-org-only{% endif %}{% if obrazek.galerie.zobrazit == 3 %}mam-resitel-only{% endif %}">
<div class="{% if soubor.galerie.zobrazit == 1 %}mam-org-only{% endif %}{% if soubor.galerie.zobrazit == 3 %}mam-resitel-only{% endif %}">
<h2>
{% for g in cesta %}
@ -57,26 +57,26 @@
<div class="galerie">
{% if obrazky_predchozi %}
{% with obrazky_predchozi|last as predchozi_obrazek %}
{% if soubory_predchozi %}
{% with soubory_predchozi|last as predchozi_soubor %}
<div>
<a title="Předchozí" class="predchozi_obrazek" href="{% url 'galeie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=predchozi_obrazek.pk %}#nahoru"></a>
<a title="Předchozí" class="predchozi_obrazek" href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=predchozi_soubor.pk %}#nahoru"></a>
</div>
{% endwith %}
{% endif%}
<span id="nahoru" class="kotva_obrazku"></span>
{% zobrazit obrazek.jako_bazmek alt=obrazek.popisek title=obrazek.popisek class="obrazek" %}
{% zobrazit soubor.jako_bazmek alt=soubor.popisek title=soubor.popisek class="obrazek" %}
{% if obrazky_dalsi %}
{% with obrazky_dalsi|first as dalsi_obrazek %}
{% if soubory_dalsi %}
{% with soubory_dalsi|first as dalsi_soubor %}
<div>
<a title="Další" class="dalsi_obrazek" href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=dalsi_obrazek.pk %}#nahoru"></a>
<a title="Další" class="dalsi_obrazek" href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=dalsi_soubor.pk %}#nahoru"></a>
</div>
{% endwith %}
{% endif%}
</div>
<!--<div>-->
<!--<a href="{{ obrazek.soubor.url }}">Obrázek v plné velikosti</a>-->
<!--<a href="{{ soubor.soubor.url }}">Obrázek v plné velikosti</a>-->
<!--</div>-->
{# Popisek fotky #}
@ -85,14 +85,14 @@
<form action=".#nahoru" method="post" id="komentarform">
{% csrf_token %}
<table>
<tr><td><label>Aktuální komentář:</label></td><td>{{obrazek.popisek}}</td>
<tr><td><label>Aktuální komentář:</label></td><td>{{soubor.popisek}}</td>
{{form.as_table}}
<tr><td></td><td><input name="odeslat" type="submit" value="Změň komentář"></td></tr>
</table>
</form>
{% else %}
{% if obrazek.popisek %}
{{obrazek.popisek}}
{% if soubor.popisek %}
{{soubor.popisek}}
{% endif %}
{% endif %}
</div>
@ -101,24 +101,24 @@
{# odkaz na predchozi galerii #}
<div class="navigace">
{% if predchozi_galerie %}
Předchozí: <a href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=predchozi_galerie.pk soubor=predchozi_galerie.obrazek_set.last.pk %}#nahoru">
Předchozí: <a href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=predchozi_galerie.pk soubor=predchozi_galerie.soubor_set.last.pk %}#nahoru">
{{predchozi_galerie}}
</a>
{% endif %}
{# nahledy predchozich obrazku #}
{% for obrazek in obrazky_predchozi %}
<a href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=obrazek.pk %}#nahoru">{% zmenseny_nahled obrazek.jako_bazmek height=100 %}</a>
{# nahledy predchozich souboru #}
{% for soubor in soubory_predchozi %}
<a href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=soubor.pk %}#nahoru">{% zmenseny_nahled soubor.jako_bazmek height=100 %}</a>
{% endfor %}
{% zmenseny_nahled obrazek.jako_bazmek alt=obrazek.popisek class="obrazek" id="prostredni" %}
{% zmenseny_nahled soubor.jako_bazmek alt=soubor.popisek class="obrazek" id="prostredni" %}
{# nahledy nasledujicich obrazku #}
{% for obrazek in obrazky_dalsi %}
<a href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=obrazek.pk %}#nahoru">{% zmenseny_nahled obrazek.jako_bazmek height=100 %}</a>
{# nahledy nasledujicich souboru #}
{% for soubor in soubory_dalsi %}
<a href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=soubor.pk %}#nahoru">{% zmenseny_nahled soubor.jako_bazmek height=100 %}</a>
{% endfor %}
{# odkaz na nasledujici galerii #}
{% if nasledujici_galerie %}
Následující: <a href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=nasledujici_galerie.pk soubor=nasledujici_galerie.obrazek_set.first.pk %}#nahoru">
Následující: <a href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=nasledujici_galerie.pk soubor=nasledujici_galerie.soubor_set.first.pk %}#nahoru">
{{nasledujici_galerie}}
</a>
{% endif %}

View file

@ -1,5 +1,7 @@
from django.conf import settings
from django.contrib.admin.sites import AdminSite
from django.contrib.contenttypes.models import ContentType
from django.http import HttpRequest
from django.test import TestCase, Client, override_settings
from django.urls import reverse
from galerie.models import Galerie, Soubor
@ -9,6 +11,8 @@ import django.contrib.auth.models as auth
import personalni.models as pers
import tvorba.models as tv
import galerie.admin as g_adm
from contextlib import ExitStack
from pathlib import Path
import shutil
@ -138,3 +142,64 @@ class GalerieTests(TestCase):
self.assertEqual(pa_gal.poradi, 1)
self.assertEqual(so_gal.poradi, 2)
# Ověříme, že v galeriích jsou obrázky
self.assertEqual(top_gal.soubor_set.count(), 0) # FIXME: related_name
self.assertEqual(top_gal.podgalerie.count(), 2)
self.assertEqual(pa_gal.podgalerie.count(), 0)
self.assertEqual(pa_gal.soubor_set.count(), 3)
self.assertEqual(so_gal.podgalerie.count(), 0)
self.assertEqual(so_gal.soubor_set.count(), 1)
# Zveřejníme galerii (už ne pomocí org_clienta, bo se to dělá v Adminu, ale tu admin action použít chceme umět)
# Otestujeme práva, že ještě veřejná není
self.assertEqual(top_gal.zobrazit, Galerie.Viditelnost.ORG)
self.assertEqual(pa_gal.zobrazit, Galerie.Viditelnost.ORG)
self.assertEqual(so_gal.zobrazit, Galerie.Viditelnost.ORG)
# (použití Admina zkopírováno z personalni.tests, což odkazuje na https://www.argpar.se/posts/programming/testing-django-admin/
adm_site = AdminSite()
galerieadmin = g_adm.GalerieAdmin(Galerie, adm_site)
# Sobotní galerie budiž jen pro účastníky
so_gal.zobrazit = Galerie.Viditelnost.UCASTNIK
so_gal.save()
# FIXME: queryset z literálu
g_adm.zverejnit_fotogalerii(galerieadmin, HttpRequest(), Galerie.objects.filter(pk=top_gal.pk))
top_gal.refresh_from_db()
pa_gal.refresh_from_db()
so_gal.refresh_from_db()
# Otestujeme práva
self.assertEqual(top_gal.zobrazit, Galerie.Viditelnost.VZDY)
self.assertEqual(pa_gal.zobrazit, Galerie.Viditelnost.VZDY)
self.assertEqual(so_gal.zobrazit, Galerie.Viditelnost.UCASTNIK)
# otestujeme i že jde dělat requesty
url_top = reverse('galerie_galerie', kwargs={'soustredeni': self.sous_a.id, 'galerie': top_gal.pk})
url_pa = reverse('galerie_galerie', kwargs={'soustredeni': self.sous_a.id, 'galerie': pa_gal.pk})
url_so = reverse('galerie_galerie', kwargs={'soustredeni': self.sous_a.id, 'galerie': so_gal.pk})
url_pa_soub = [reverse('galerie_soubor', kwargs={'soustredeni': self.sous_a.id, 'galerie': pa_gal.pk, 'soubor': s.pk}) for s in pa_gal.soubor_set.all()]
url_so_soub = [reverse('galerie_soubor', kwargs={'soustredeni': self.sous_a.id, 'galerie': so_gal.pk, 'soubor': s.pk}) for s in so_gal.soubor_set.all()]
verejne_url = [url_top, url_pa] + url_pa_soub
ucastnik_url = [url_so] + url_so_soub
# TODO: mít org-only galerii?
uc_client = Client()
uc_client.force_login(self.ucastnik_a.osoba.user)
ucb_client = Client()
ucb_client.force_login(self.ucastnik_b.osoba.user)
neuc_client = Client()
neuc_client.force_login(self.neucastnik.osoba.user)
verej_client = Client()
for url in ucastnik_url:
for cl, status in (
(org_client, 200),
(uc_client, 200),
(ucb_client, 404),
(neuc_client, 404),
(verej_client, 404),
):
resp = cl.get(url)
self.assertEqual(resp.status_code, status)
for url in verejne_url:
for cl in (org_client, uc_client, ucb_client, neuc_client, verej_client):
resp = cl.get(url)
self.assertEqual(resp.status_code, 200)

View file

@ -113,7 +113,7 @@ def souborView(request, soustredeni: int, galerie: int, soubor: int):
# obrázků v jedné galerii, tak je to asi jedno :-D
index_souboru = soubory.index(soubor)
# Podle mě se nemůže stát, že by volání výš selhalo, kdyžtak shodí web. (původně to byl explicitně ošetřený stav dávající 404)
predchozi_soubory = list(reversed(soubor[:index_souboru]))
predchozi_soubory = list(reversed(soubory[:index_souboru]))
nasledujici_soubory = soubory[index_souboru+1:]
# Může jich být hodně…
predchozi_soubory = predchozi_soubory[:NAHLEDU]
@ -158,6 +158,7 @@ def souborView(request, soustredeni: int, galerie: int, soubor: int):
'upravy_popisku' : dovolit_upravy_popisku(galerie, request),
'form' : form,
'cesta': cesta_od_korene(galerie),
'soustredeni': soustredeni,
'object': soubor,
})