Projet

Général

Profil

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

Nicolas Roche, 23 janvier 2020 17:09

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

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

  
238 246
    def get_template_display_name(self):
239 247
        try:
240 248
            return settings.COMBO_PUBLIC_TEMPLATES[self.template_name]['name']
tests/test_pages.py
403 403
    freezer.move_to('2020-01-08')
404 404
    page = Page.objects.get(slug='page-1')
405 405
    assert not page.is_new()
406

  
407
def test_get_descendants_and_me():
408
    '''    1
409
           |
410
          2 6
411
        /     \
412
     3 4 5   7 8 9
413
    '''
414
    def add_pages(depth=1, parent_id=None):
415
        if depth > 3:
416
            return
417
        page = Page(title='%s' % add_pages.num, slug='page-%s' % add_pages.num)
418
        page.parent_id = parent_id
419
        page.save()
420
        add_pages.num += 1
421
        for m in range(0, depth + 1):
422
            add_pages(depth + 1, page.id)
423
    add_pages.num = 1
424
    add_pages()
425

  
426
    page = Page.objects.get(slug='page-1')
427
    assert len(page.get_descendants_and_me()) == 9
428
    page = Page.objects.get(slug='page-2')
429
    assert [int(x.title) for x in page.get_descendants_and_me()] == [2, 3, 4, 5]
430
    page = Page.objects.get(slug='page-3')
431
    assert [int(x.title) for x in page.get_descendants_and_me()] == [3]
406
-