Projet

Général

Profil

0003-data-get-descendants-of-a-page-39091.patch

Nicolas Roche, 31 janvier 2020 16:49

Télécharger (2,23 ko)

Voir les différences:

Subject: [PATCH 3/4] data: get descendants of a page (#39091)

 combo/data/models.py |  8 ++++++++
 tests/test_pages.py  | 26 ++++++++++++++++++++++++++
 2 files changed, 34 insertions(+)
combo/data/models.py
237 237
            return bool(self._children)
238 238
        return Page.objects.filter(parent_id=self.id).exists()
239 239

  
240
    def get_descendants_and_me(self):
241
        def get_descendant_pages(page):
242
            descendants = [page]
243
            for item in page.get_children():
244
                descendants.extend(get_descendant_pages(item))
245
            return descendants
246
        return Page.objects.filter(id__in=[x.id for x in get_descendant_pages(self)])
247

  
240 248
    def get_template_display_name(self):
241 249
        try:
242 250
            return settings.COMBO_PUBLIC_TEMPLATES[self.template_name]['name']
tests/test_pages.py
415 415
    freezer.move_to('2020-01-08')
416 416
    page = Page.objects.get(slug='page-1')
417 417
    assert not page.is_new()
418

  
419
def test_get_descendants_and_me():
420
    '''    1
421
           |
422
          2 6
423
        /     \
424
     3 4 5   7 8 9
425
    '''
426
    def add_pages(depth=1, parent_id=None):
427
        if depth > 3:
428
            return
429
        page = Page(title='%s' % add_pages.num, slug='page-%s' % add_pages.num)
430
        page.parent_id = parent_id
431
        page.save()
432
        add_pages.num += 1
433
        for m in range(0, depth + 1):
434
            add_pages(depth + 1, page.id)
435
    add_pages.num = 1
436
    add_pages()
437

  
438
    page = Page.objects.get(slug='page-1')
439
    assert len(page.get_descendants_and_me()) == 9
440
    page = Page.objects.get(slug='page-2')
441
    assert [int(x.title) for x in page.get_descendants_and_me()] == [2, 3, 4, 5]
442
    page = Page.objects.get(slug='page-3')
443
    assert [int(x.title) for x in page.get_descendants_and_me()] == [3]
418
-