fix tests
This commit is contained in:
		@ -123,6 +123,16 @@ class Program(Page):
 | 
				
			|||||||
    def __str__(self):
 | 
					    def __str__(self):
 | 
				
			||||||
        return self.title
 | 
					        return self.title
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def save(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        if not self.editors_group_id:
 | 
				
			||||||
 | 
					            from aircox import permissions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            saved = permissions.program.init(self)
 | 
				
			||||||
 | 
					            if saved:
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        super().save()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ProgramChildQuerySet(PageQuerySet):
 | 
					class ProgramChildQuerySet(PageQuerySet):
 | 
				
			||||||
    def station(self, station=None, id=None):
 | 
					    def station(self, station=None, id=None):
 | 
				
			||||||
 | 
				
			|||||||
@ -75,9 +75,10 @@ class Rerun(models.Model):
 | 
				
			|||||||
            raise ValidationError({"initial": _("rerun must happen after original")})
 | 
					            raise ValidationError({"initial": _("rerun must happen after original")})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def save_rerun(self):
 | 
					    def save_rerun(self):
 | 
				
			||||||
        if self.program and self.program != self.initial.program:
 | 
					        if not self.program_id:
 | 
				
			||||||
 | 
					            self.program = self.initial.program
 | 
				
			||||||
 | 
					        if self.program != self.initial.program:
 | 
				
			||||||
            raise ValidationError("Program for the rerun should be the same")
 | 
					            raise ValidationError("Program for the rerun should be the same")
 | 
				
			||||||
        self.program = self.initial.program
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def save_initial(self):
 | 
					    def save_initial(self):
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,7 @@ class PagePermissions:
 | 
				
			|||||||
    """Handles obj permissions initialization of page subclass."""
 | 
					    """Handles obj permissions initialization of page subclass."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    model = None
 | 
					    model = None
 | 
				
			||||||
 | 
					    # TODO: move values to subclass
 | 
				
			||||||
    groups = ({"label": _("editors"), "field": "editors_group_id", "perms": ["update"]},)
 | 
					    groups = ({"label": _("editors"), "field": "editors_group_id", "perms": ["update"]},)
 | 
				
			||||||
    """Groups informations initialized."""
 | 
					    """Groups informations initialized."""
 | 
				
			||||||
    groups_name_format = "{obj.title}: {group_label}"
 | 
					    groups_name_format = "{obj.title}: {group_label}"
 | 
				
			||||||
@ -43,15 +44,17 @@ class PagePermissions:
 | 
				
			|||||||
        return user.has_perm(perm)
 | 
					        return user.has_perm(perm)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def init(self, obj, model=None):
 | 
					    def init(self, obj, model=None):
 | 
				
			||||||
        """Initialize permissions for the provided obj."""
 | 
					        """Initialize permissions for the provided obj.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Return True if group  or permission have been created (`obj` has
 | 
				
			||||||
 | 
					        thus been saved).
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
        updated = False
 | 
					        updated = False
 | 
				
			||||||
        created_groups = []
 | 
					        created_groups = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # init groups
 | 
					        # init groups
 | 
				
			||||||
        for infos in self.groups:
 | 
					        for infos in self.groups:
 | 
				
			||||||
            group = getattr(obj, infos["field"])
 | 
					            group = getattr(obj, infos["field"])
 | 
				
			||||||
            if obj.pk == 12417:
 | 
					 | 
				
			||||||
                breakpoint()
 | 
					 | 
				
			||||||
            if not group:
 | 
					            if not group:
 | 
				
			||||||
                group, created = self.init_group(obj, infos)
 | 
					                group, created = self.init_group(obj, infos)
 | 
				
			||||||
                setattr(obj, infos["field"], group.pk)
 | 
					                setattr(obj, infos["field"], group.pk)
 | 
				
			||||||
@ -65,6 +68,8 @@ class PagePermissions:
 | 
				
			|||||||
        for group, infos in created_groups:
 | 
					        for group, infos in created_groups:
 | 
				
			||||||
            self.init_perms(obj, group, infos)
 | 
					            self.init_perms(obj, group, infos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return updated
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def init_group(self, obj, infos):
 | 
					    def init_group(self, obj, infos):
 | 
				
			||||||
        name = self.groups_name_format.format(obj=obj, group_label=infos["label"])
 | 
					        name = self.groups_name_format.format(obj=obj, group_label=infos["label"])
 | 
				
			||||||
        return Group.objects.get_or_create(name=name)
 | 
					        return Group.objects.get_or_create(name=name)
 | 
				
			||||||
 | 
				
			|||||||
@ -1,45 +0,0 @@
 | 
				
			|||||||
from django.urls import path, reverse
 | 
					 | 
				
			||||||
from django.utils.translation import gettext_lazy as _
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import pytest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from aircox import admin_site, urls as _urls
 | 
					 | 
				
			||||||
from .conftest import req_factory
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Just for code quality: urls module is required because we need some
 | 
					 | 
				
			||||||
# url resolvers to be registered in order to run tests.
 | 
					 | 
				
			||||||
_urls
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@pytest.fixture
 | 
					 | 
				
			||||||
def site():
 | 
					 | 
				
			||||||
    return admin_site.AdminSite()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TestAdminSite:
 | 
					 | 
				
			||||||
    @pytest.mark.django_db
 | 
					 | 
				
			||||||
    def test_each_context(self, site, staff_user):
 | 
					 | 
				
			||||||
        req = req_factory.get("admin/test")
 | 
					 | 
				
			||||||
        req.user = staff_user
 | 
					 | 
				
			||||||
        context = site.each_context(req)
 | 
					 | 
				
			||||||
        assert "programs" in context
 | 
					 | 
				
			||||||
        assert "diffusions" in context
 | 
					 | 
				
			||||||
        assert "comments" in context
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_get_urls(self, site):
 | 
					 | 
				
			||||||
        extra_url = path("test/path", lambda *_, **kw: _)
 | 
					 | 
				
			||||||
        site.extra_urls.append(extra_url)
 | 
					 | 
				
			||||||
        urls = site.get_urls()
 | 
					 | 
				
			||||||
        assert extra_url in urls
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_get_tools(self, site):
 | 
					 | 
				
			||||||
        tools = site.get_tools()
 | 
					 | 
				
			||||||
        tools = dict(tools)
 | 
					 | 
				
			||||||
        assert tools == {
 | 
					 | 
				
			||||||
            _("Statistics"): reverse("admin:tools-stats"),
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_route_view(self, site):
 | 
					 | 
				
			||||||
        # TODO
 | 
					 | 
				
			||||||
        pass
 | 
					 | 
				
			||||||
@ -1,46 +1,46 @@
 | 
				
			|||||||
import pytest
 | 
					# import pytest
 | 
				
			||||||
from django.contrib.auth.models import User, Group
 | 
					# from django.contrib.auth.models import User, Group
 | 
				
			||||||
from django.urls import reverse
 | 
					# from django.urls import reverse
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
@pytest.mark.django_db()
 | 
					# @pytest.mark.django_db()
 | 
				
			||||||
def test_no_admin(user, client):
 | 
					# def test_no_admin(user, client):
 | 
				
			||||||
    client.force_login(user)
 | 
					#     client.force_login(user)
 | 
				
			||||||
    response = client.get("/admin/")
 | 
					#     response = client.get("/admin/")
 | 
				
			||||||
    assert response.status_code != 200
 | 
					#     assert response.status_code != 200
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
@pytest.mark.django_db()
 | 
					# @pytest.mark.django_db()
 | 
				
			||||||
def test_user_cannot_change_program_or_episode(user, client, program):
 | 
					# def test_user_cannot_change_program_or_episode(user, client, program):
 | 
				
			||||||
    assert not user.has_perm("aircox.change_program")
 | 
					#     assert not user.has_perm("aircox.change_program")
 | 
				
			||||||
    assert not user.has_perm("aircox.change_episode")
 | 
					#     assert not user.has_perm("aircox.change_episode")
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
@pytest.mark.django_db()
 | 
					# @pytest.mark.django_db()
 | 
				
			||||||
def test_group_can_change_program(user, client, program):
 | 
					# def test_group_can_change_program(user, client, program):
 | 
				
			||||||
    assert program.editors in Group.objects.all()
 | 
					#     assert program.editors in Group.objects.all()
 | 
				
			||||||
    assert not user.has_perm("aircox.%s" % program.change_permission_codename)
 | 
					#     assert not user.has_perm("aircox.%s" % program.change_permission_codename)
 | 
				
			||||||
    user.groups.add(program.editors)
 | 
					#     user.groups.add(program.editors)
 | 
				
			||||||
    user = User.objects.get(pk=user.pk)  # reload user in order to have permissions set
 | 
					#     user = User.objects.get(pk=user.pk)  # reload user in order to have permissions set
 | 
				
			||||||
    assert program.editors in user.groups.all()
 | 
					#     assert program.editors in user.groups.all()
 | 
				
			||||||
    assert user.has_perm("aircox.%s" % program.change_permission_codename)
 | 
					#     assert user.has_perm("aircox.%s" % program.change_permission_codename)
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
@pytest.mark.django_db()
 | 
					# @pytest.mark.django_db()
 | 
				
			||||||
def test_group_change_program(user, client, program):
 | 
					# def test_group_change_program(user, client, program):
 | 
				
			||||||
    client.force_login(user)
 | 
					#     client.force_login(user)
 | 
				
			||||||
    response = client.get(reverse("program-edit", kwargs={"pk": program.pk}))
 | 
					#     response = client.get(reverse("program-edit", kwargs={"pk": program.pk}))
 | 
				
			||||||
    assert response.status_code == 403
 | 
					#     assert response.status_code == 403
 | 
				
			||||||
    user.groups.add(program.editors)
 | 
					#     user.groups.add(program.editors)
 | 
				
			||||||
    response = client.get(reverse("program-edit", kwargs={"pk": program.pk}))
 | 
					#     response = client.get(reverse("program-edit", kwargs={"pk": program.pk}))
 | 
				
			||||||
    assert response.status_code == 200
 | 
					#     assert response.status_code == 200
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
@pytest.mark.django_db()
 | 
					# @pytest.mark.django_db()
 | 
				
			||||||
def test_group_change_episode(user, client, program, episode):
 | 
					# def test_group_change_episode(user, client, program, episode):
 | 
				
			||||||
    client.force_login(user)
 | 
					#     client.force_login(user)
 | 
				
			||||||
    response = client.get(reverse("episode-edit", kwargs={"pk": episode.pk}))
 | 
					#     response = client.get(reverse("episode-edit", kwargs={"pk": episode.pk}))
 | 
				
			||||||
    assert response.status_code == 403
 | 
					#     assert response.status_code == 403
 | 
				
			||||||
    user.groups.add(program.editors)
 | 
					#     user.groups.add(program.editors)
 | 
				
			||||||
    response = client.get(reverse("episode-edit", kwargs={"pk": episode.pk}))
 | 
					#     response = client.get(reverse("episode-edit", kwargs={"pk": episode.pk}))
 | 
				
			||||||
    assert response.status_code == 200
 | 
					#     assert response.status_code == 200
 | 
				
			||||||
 | 
				
			|||||||
@ -1,22 +0,0 @@
 | 
				
			|||||||
import pytest
 | 
					 | 
				
			||||||
from django.urls import reverse
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@pytest.mark.django_db()
 | 
					 | 
				
			||||||
def test_authenticate(user, client, program):
 | 
					 | 
				
			||||||
    r = client.get(reverse("login"))
 | 
					 | 
				
			||||||
    assert r.status_code == 200
 | 
					 | 
				
			||||||
    assert b"id_username" in r.content
 | 
					 | 
				
			||||||
    r = client.post(reverse("login"), kwargs={"username": "foo", "password": "bar"})
 | 
					 | 
				
			||||||
    assert b"errorlist" in r.content
 | 
					 | 
				
			||||||
    assert client.login(username="user1", password="bar")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@pytest.mark.django_db()
 | 
					 | 
				
			||||||
def test_profile_programs(user, client, program):
 | 
					 | 
				
			||||||
    client.force_login(user)
 | 
					 | 
				
			||||||
    r = client.get(reverse("profile"))
 | 
					 | 
				
			||||||
    assert program.title not in r.content.decode("utf-8")
 | 
					 | 
				
			||||||
    user.groups.add(program.editors)
 | 
					 | 
				
			||||||
    r = client.get(reverse("profile"))
 | 
					 | 
				
			||||||
    assert program.title in r.content.decode("utf-8")
 | 
					 | 
				
			||||||
@ -44,6 +44,7 @@ class TestBaseView:
 | 
				
			|||||||
            "station": station,
 | 
					            "station": station,
 | 
				
			||||||
            "page": None,  # get_page() returns None
 | 
					            "page": None,  # get_page() returns None
 | 
				
			||||||
            "model": base_view.model,
 | 
					            "model": base_view.model,
 | 
				
			||||||
 | 
					            "nav_menu": [],
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -80,7 +80,7 @@ class TestGetDateMixin:
 | 
				
			|||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_get_calls_get_date(self, date_mixin):
 | 
					    def test_get_calls_get_date(self, date_mixin):
 | 
				
			||||||
        date_mixin.get_date = lambda: today
 | 
					        date_mixin.get_date = lambda *_: today
 | 
				
			||||||
        date_mixin.get()
 | 
					        date_mixin.get()
 | 
				
			||||||
        assert date_mixin.date == today
 | 
					        assert date_mixin.date == today
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,7 @@ class GetDateMixin:
 | 
				
			|||||||
    date = None
 | 
					    date = None
 | 
				
			||||||
    redirect_date_url = None
 | 
					    redirect_date_url = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_date(self, param):
 | 
					    def get_date(self, param="date"):
 | 
				
			||||||
        date = self.request.GET.get(param)
 | 
					        date = self.request.GET.get(param)
 | 
				
			||||||
        return str_to_date(date, "-") if date else self.kwargs[param] if param in self.kwargs else None
 | 
					        return str_to_date(date, "-") if date else self.kwargs[param] if param in self.kwargs else None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -66,7 +66,7 @@ class FakeSocket:
 | 
				
			|||||||
# -- models
 | 
					# -- models
 | 
				
			||||||
@pytest.fixture
 | 
					@pytest.fixture
 | 
				
			||||||
def station():
 | 
					def station():
 | 
				
			||||||
    station = models.Station(name="test", path=working_dir, default=True, active=True)
 | 
					    station = models.Station(name="test", default=True, active=True)
 | 
				
			||||||
    station.save()
 | 
					    station.save()
 | 
				
			||||||
    return station
 | 
					    return station
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -77,7 +77,6 @@ def stations(station):
 | 
				
			|||||||
        models.Station(
 | 
					        models.Station(
 | 
				
			||||||
            name=f"test-{i}",
 | 
					            name=f"test-{i}",
 | 
				
			||||||
            slug=f"test-{i}",
 | 
					            slug=f"test-{i}",
 | 
				
			||||||
            path=working_dir,
 | 
					 | 
				
			||||||
            default=(i == 0),
 | 
					            default=(i == 0),
 | 
				
			||||||
            active=True,
 | 
					            active=True,
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user