Projet

Général

Profil

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

Nicolas Roche, 27 janvier 2020 17:55

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
236 236
            return bool(self._children)
237 237
        return Page.objects.filter(parent_id=self.id).exists()
238 238

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

  
239 247
    def get_template_display_name(self):
240 248
        try:
241 249
            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
-