Projet

Général

Profil

0001-data-handle-duplicated-page-slugs-at-import-59509.patch

Valentin Deniaud, 22 décembre 2021 17:00

Télécharger (2,93 ko)

Voir les différences:

Subject: [PATCH] data: handle duplicated page slugs at import (#59509)

 combo/data/models.py        |  8 ++++++-
 tests/test_import_export.py | 42 +++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)
combo/data/models.py
603 603

  
604 604
            for json_page in json_site:
605 605
                # pre-create pages
606
                page, created = Page.objects.get_or_create(slug=json_page['fields']['slug'])
606
                parent = None
607
                if json_page['fields'].get('parent'):
608
                    parent = json_page['fields']['parent'][0]
609

  
610
                page, created = Page.objects.get_or_create(
611
                    slug=json_page['fields']['slug'], parent__slug=parent
612
                )
607 613
                to_load.append((page, created, json_page))
608 614

  
609 615
            # delete cells of already existing pages
tests/test_import_export.py
519 519
    site_settings.refresh_from_db()
520 520
    assert site_settings.initial_login_page_path == ''
521 521
    assert site_settings.welcome_page_path == ''
522

  
523

  
524
def test_import_export_duplicated_slugs():
525
    first_page = Page.objects.create(title='Title', slug='title', description='1')
526
    output = get_output_of_command('export_site')
527

  
528
    # create real situation where a subpage has the same slug as a top-level page
529
    second_page = Page.objects.create(title='Test', slug='test')
530
    third_page = Page.objects.create(title='Title', slug='title', description='test', parent=second_page)
531
    first_page.description = '2'
532
    first_page.save()
533

  
534
    import_site(data=json.loads(output))
535
    assert Page.objects.count() == 3
536

  
537
    # top-level page has been updated
538
    first_page.refresh_from_db()
539
    assert first_page.description == '1'
540

  
541
    # same slug subpage was left untouched
542
    third_page.refresh_from_db()
543
    assert third_page.description == 'test'
544

  
545
    output = get_output_of_command('export_site')
546
    third_page.description = ''
547
    third_page.save()
548

  
549
    import_site(data=json.loads(output))
550
    assert Page.objects.count() == 3
551

  
552
    # top level page was left untouched
553
    first_page.refresh_from_db()
554
    assert first_page.description == '1'
555

  
556
    # same slug subpage has been updated
557
    third_page.refresh_from_db()
558
    assert third_page.description == 'test'
559

  
560
    Page.objects.all().delete()
561
    import_site(data=json.loads(output))
562
    assert Page.objects.count() == 3
563
    assert Page.objects.filter(parent__isnull=True).count() == 2
522
-