Projet

Général

Profil

0001-manager-fix-page-ordering-with-missing-page-from-arg.patch

Lauréline Guérin, 26 juillet 2021 17:47

Télécharger (4,72 ko)

Voir les différences:

Subject: [PATCH] manager: fix page ordering with missing page from arguments
 (#55288)

 combo/manager/views.py | 20 ++++++++++++++------
 tests/test_manager.py  | 31 ++++++++++++++++++++++---------
 2 files changed, 36 insertions(+), 15 deletions(-)
combo/manager/views.py
22 22

  
23 23
from django.conf import settings
24 24
from django.contrib import messages
25
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
25
from django.core.exceptions import ObjectDoesNotExist
26
from django.db import transaction
26 27
from django.http import Http404, HttpResponse, HttpResponseRedirect
27 28
from django.shortcuts import get_object_or_404, redirect, render
28 29
from django.urls import reverse, reverse_lazy
......
704 705
    else:
705 706
        moved_page.parent_id = None
706 707
    moved_page.save()
708

  
707 709
    slug_conflict = False
708
    for page in Page.objects.filter(parent_id=moved_page.parent_id):
709
        page.order = new_order.index(page.id) + 1
710
        page.save()
711
        if moved_page.id != page.id and moved_page.slug == page.slug:
712
            slug_conflict = True
710
    try:
711
        with transaction.atomic():
712
            for page in Page.objects.filter(parent_id=moved_page.parent_id):
713
                page.order = new_order.index(page.id) + 1
714
                page.save()
715
                if moved_page.id != page.id and moved_page.slug == page.slug:
716
                    slug_conflict = True
717
    except ValueError:
718
        # missing child page in new_order, fail silently
719
        return redirect(reverse('combo-manager-homepage'))
720

  
713 721
    if slug_conflict:
714 722
        # slug conflict after a page got moved, reload and rename
715 723
        moved_page = Page.objects.get(id=request.GET['moved-page-id'])
tests/test_manager.py
679 679
    page3.save()
680 680
    page4 = Page(title='Four', slug='four', parent=page2, order=3, template_name='standard')
681 681
    page4.save()
682
    app = login(app)
683

  
684
    ordered_ids = [x.id for x in Page.get_as_reordered_flat_hierarchy(Page.objects.all())]
685
    assert ordered_ids == [page1.id, page2.id, page3.id, page4.id]
682 686

  
687
    # missing page3 in order
688
    app.get(
689
        '/manage/pages/order',
690
        params={
691
            'moved-page-id': page4.id,
692
            'moved-page-new-parent': page2.id,
693
            'new-order': ','.join([str(x) for x in [page2.id, page1.id, page4.id]]),
694
        },
695
    )
696
    # not changed
683 697
    ordered_ids = [x.id for x in Page.get_as_reordered_flat_hierarchy(Page.objects.all())]
684
    ordered_ids = [page1.id, page2.id, page3.id, page4.id]
698
    assert ordered_ids == [page1.id, page2.id, page3.id, page4.id]
685 699

  
686 700
    # move page4 before page3
687
    app = login(app)
688
    resp = app.get(
701
    app.get(
689 702
        '/manage/pages/order',
690 703
        params={
691 704
            'moved-page-id': page4.id,
......
695 708
    )
696 709

  
697 710
    ordered_ids = [x.id for x in Page.get_as_reordered_flat_hierarchy(Page.objects.all())]
698
    ordered_ids = [page1.id, page2.id, page4.id, page3.id]
711
    assert ordered_ids == [page1.id, page2.id, page4.id, page3.id]
699 712

  
700 713
    # move page4 to level0
701
    resp = app.get(
714
    app.get(
702 715
        '/manage/pages/order',
703 716
        params={
704 717
            'moved-page-id': page4.id,
......
707 720
        },
708 721
    )
709 722
    ordered_ids = [x.id for x in Page.get_as_reordered_flat_hierarchy(Page.objects.all())]
710
    ordered_ids = [page1.id, page4.id, page2.id, page3.id]
723
    assert ordered_ids == [page1.id, page4.id, page2.id, page3.id]
711 724

  
712 725
    # change slug to check for autochange on duplicate
713 726
    page4.slug = 'three'
714 727
    page4.save()
715 728
    # move it as a sibling of page3
716
    resp = app.get(
729
    app.get(
717 730
        '/manage/pages/order',
718 731
        params={
719 732
            'moved-page-id': page4.id,
......
731 744
    page2.save()
732 745
    page3.parent = page2
733 746
    page3.save()
734
    resp = app.get(
747
    app.get(
735 748
        '/manage/pages/order',
736 749
        params={
737 750
            'moved-page-id': page1.id,
......
750 763
    page3.save()
751 764
    page4.parent = page3
752 765
    page4.save()
753
    resp = app.get(
766
    app.get(
754 767
        '/manage/pages/order',
755 768
        params={
756 769
            'moved-page-id': page2.id,
757
-