categories: reset associated object on removal (#55951)
This commit is contained in:
parent
be60b83352
commit
61b3de5c6f
|
@ -1,7 +1,8 @@
|
|||
import pytest
|
||||
|
||||
from wcs.carddef import CardDef
|
||||
from wcs.categories import CardDefCategory
|
||||
from wcs.categories import CardDefCategory, Category
|
||||
from wcs.formdef import FormDef
|
||||
from wcs.qommon.http_request import HTTPRequest
|
||||
|
||||
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login
|
||||
|
@ -127,6 +128,7 @@ def test_categories_with_carddefs(pub):
|
|||
|
||||
|
||||
def test_categories_delete(pub):
|
||||
create_superuser(pub)
|
||||
CardDefCategory.wipe()
|
||||
category = CardDefCategory(name='foobar')
|
||||
category.store()
|
||||
|
@ -140,6 +142,23 @@ def test_categories_delete(pub):
|
|||
assert resp.location == 'http://example.net/backoffice/cards/categories/1/'
|
||||
assert CardDefCategory.count() == 1
|
||||
|
||||
carddef = CardDef()
|
||||
carddef.name = 'bar'
|
||||
carddef.fields = []
|
||||
carddef.category_id = category.id
|
||||
carddef.store()
|
||||
|
||||
Category.wipe()
|
||||
formdef_category = Category(name='blah')
|
||||
formdef_category.id = category.id
|
||||
formdef_category.store()
|
||||
|
||||
formdef = FormDef()
|
||||
formdef.name = 'bar'
|
||||
formdef.fields = []
|
||||
formdef.category_id = formdef_category.id
|
||||
formdef.store()
|
||||
|
||||
resp = app.get('/backoffice/cards/categories/1/')
|
||||
resp = resp.click(href='delete')
|
||||
resp = resp.forms[0].submit()
|
||||
|
@ -147,6 +166,12 @@ def test_categories_delete(pub):
|
|||
resp = resp.follow()
|
||||
assert CardDefCategory.count() == 0
|
||||
|
||||
carddef.refresh_from_storage()
|
||||
assert carddef.category_id is None
|
||||
|
||||
formdef.refresh_from_storage()
|
||||
assert formdef.category_id == formdef_category.id
|
||||
|
||||
|
||||
def test_categories_edit_description(pub):
|
||||
CardDefCategory.wipe()
|
||||
|
|
|
@ -58,6 +58,12 @@ class Category(XmlStorableObject):
|
|||
if changed:
|
||||
self.store()
|
||||
|
||||
@classmethod
|
||||
def get_object_class(cls):
|
||||
from .formdef import FormDef
|
||||
|
||||
return FormDef
|
||||
|
||||
@classmethod
|
||||
def get_by_urlname(cls, url_name):
|
||||
objects = [x for x in cls.select() if x.url_name == url_name]
|
||||
|
@ -91,12 +97,10 @@ class Category(XmlStorableObject):
|
|||
categories.sort(key=lambda x: x.position if x and x.position is not None else 10000)
|
||||
|
||||
def remove_self(self):
|
||||
from .formdef import FormDef
|
||||
|
||||
for form in FormDef.select(lambda x: x.category_id == self.id):
|
||||
form.category_id = None
|
||||
form.store()
|
||||
StorableObject.remove_self(self)
|
||||
for obj in self.get_object_class().select(lambda x: x.category_id == self.id):
|
||||
obj.category_id = None
|
||||
obj.store()
|
||||
super().remove_self()
|
||||
|
||||
def get_substitution_variables(self, minimal=False):
|
||||
d = {
|
||||
|
@ -147,6 +151,12 @@ class CardDefCategory(Category):
|
|||
('export_roles', 'roles'),
|
||||
]
|
||||
|
||||
@classmethod
|
||||
def get_object_class(cls):
|
||||
from .carddef import CardDef
|
||||
|
||||
return CardDef
|
||||
|
||||
|
||||
Substitutions.register('category_name', category=_('General'), comment=_('Category Name'))
|
||||
Substitutions.register('category_description', category=_('General'), comment=_('Category Description'))
|
||||
|
|
Loading…
Reference in New Issue