Projet

Général

Profil

0001-categories-do-not-create-duplicate-slugs-38612.patch

Frédéric Péters, 18 décembre 2019 10:00

Télécharger (2,15 ko)

Voir les différences:

Subject: [PATCH] categories: do not create duplicate slugs (#38612)

 tests/test_categories.py | 15 +++++++++++++++
 wcs/categories.py        | 16 ++++++++++++----
 2 files changed, 27 insertions(+), 4 deletions(-)
tests/test_categories.py
45 45
    assert test.url_name == 'test'
46 46

  
47 47

  
48
def test_duplicate_urlname():
49
    Category.wipe()
50
    test = Category()
51
    test.name = 'Test'
52
    test.store()
53
    test = Category.get(1)
54
    assert test.url_name == 'test'
55

  
56
    test2 = Category()
57
    test2.name = 'Test'
58
    test2.store()
59
    test2 = Category.get(2)
60
    assert test2.url_name == 'test-2'
61

  
62

  
48 63
def test_sort_positions():
49 64
    Category.wipe()
50 65

  
wcs/categories.py
42 42

  
43 43
    def migrate(self):
44 44
        changed = False
45

  
46 45
        if not self.url_name:
47
            self.url_name = simplify(self.name)
48
            changed = True
49

  
46
            changed = True  # trigger new slug in .store()
50 47
        if changed:
51 48
            self.store()
52 49

  
......
64 61
            return True
65 62
        return False
66 63

  
64
    def store(self, *args, **kwargs):
65
        if not self.url_name:
66
            existing_slugs = {x.url_name: True for x in self.select(ignore_migration=True, ignore_errors=True)}
67
            base_slug = simplify(self.name)
68
            self.url_name = base_slug
69
            i = 2
70
            while self.url_name in existing_slugs:
71
                self.url_name = '%s-%s' % (base_slug, i)
72
                i += 1
73
        return super(Category, self).store(*args, **kwargs)
74

  
67 75
    @classmethod
68 76
    def sort_by_position(cls, categories):
69 77
        # move categories with no defined position to the end
70
-