def test_actions_disabled(self): user = self.login() categories = ChoiceModelIterator(Category.objects.all()) creation_url, _allowed = config_registry.get_model_creation_info( SubCategory, user) widget = CreatorCategorySelector( categories=categories, creation_url=creation_url, creation_allowed=True, ) widget._build_actions({}) self.assertListEqual( [ self._build_create_action( SubCategory.creation_label, _('Create'), creation_url + '?category=${_delegate_.category}', ), ], widget.actions, ) widget._build_actions({'readonly': True}) self.assertListEqual([], widget.actions) widget._build_actions({'disabled': True}) self.assertListEqual([], widget.actions)
def test_user_not_allowed(self): user = self.login(is_superuser=False) field = CategoryField() field.user = user url, _allowed = config_registry.get_model_creation_info(SubCategory, user) self.assertEqual(user, field.user) self.assertFalse(field.widget.creation_allowed) self.assertEqual(url, field.widget.creation_url)
def test_create_subcategory_from_widget__unknown_category(self): user = self.login() url, _allowed = config_registry.get_model_creation_info(SubCategory, user) self.assertGET200(url) count = SubCategory.objects.count() self.client.post(url, data={'name': 'sub12', 'description': 'sub12', 'category': 99999}) self.assertEqual(count, SubCategory.objects.count())
def test_user02(self): "In constructor." user = self.login() field = CategoryField(user=user) url, _allowed = config_registry.get_model_creation_info( SubCategory, user) self.assertEqual(user, field.user) self.assertTrue(field.widget.creation_allowed) self.assertEqual(url, field.widget.creation_url)
def test_create_category_from_widget(self): user = self.login() url, _allowed = config_registry.get_model_creation_info(Category, user) self.assertGET200(url) response = self.client.post(url, data={'name': 'cat1', 'description': 'cat1', 'category': 'unknown', }, ) self.assertNoFormError(response) cat1 = self.get_object_or_fail(Category, name='cat1') self.assertEqual({'added': [[cat1.id, str(cat1)]], 'value': cat1.id }, response.json() )
def test_create_subcategory_from_widget(self): user = self.login() cat1 = Category.objects.create(name='cat1', description='description') count = SubCategory.objects.count() url, _allowed = config_registry.get_model_creation_info( SubCategory, user) response = self.assertGET200(url) self.assertTemplateUsed(response, 'creme_core/generics/form/add-popup.html') context = response.context self.assertEqual( pgettext('products-sub_category', 'Create a sub-category'), context.get('title')) self.assertEqual(_('Save'), context.get('submit_label')) # --- response = self.client.post( url, data={ 'name': 'sub12', 'description': 'sub12', 'category': cat1.id, }, ) self.assertNoFormError(response) self.assertEqual(count + 1, SubCategory.objects.count()) cat12 = self.get_object_or_fail(SubCategory, name='sub12') self.assertEqual( { 'added': [{ 'category': [str(cat1.id), str(cat1)], 'subcategory': [str(cat12.id), str(cat12)], }], 'value': { 'category': str(cat1.id), 'subcategory': str(cat12.id), }, }, response.json())
def test_actions_creation_not_allowed(self): user = self.login() categories = ChoiceModelIterator(Category.objects.all()) creation_url, _allowed = config_registry.get_model_creation_info( SubCategory, user) widget = CreatorCategorySelector(categories=categories, creation_url=creation_url, creation_allowed=False) widget._build_actions({}) self.assertListEqual([ self._build_create_action( SubCategory.creation_label, _("Can't create"), url=creation_url + '?category=${_delegate_.category}', enabled=False, ), ], widget.actions)
def test_render(self): user = self.login() categories = ChoiceModelIterator(Category.objects.all()) creation_url, _allowed = config_registry.get_model_creation_info( SubCategory, user) widget = CreatorCategorySelector( categories=categories, creation_url=creation_url, creation_allowed=True, ) value = json_dump({'category': 1, 'subcategory': 1}) html = ''' <ul class="hbox ui-creme-widget ui-layout widget-auto ui-creme-actionbuttonlist" widget="ui-creme-actionbuttonlist"> <li class="delegate"> <div class="ui-creme-widget widget-auto ui-creme-chainedselect" widget="ui-creme-chainedselect"> <input class="ui-creme-input ui-creme-chainedselect" name="sub_category" type="hidden" value="{value}" /> <ul class="ui-layout vbox"> <li chained-name="category" class="ui-creme-chainedselect-item"> <span class="ui-creme-dselectlabel">{categories_label}</span> <select class="ui-creme-input ui-creme-widget ui-creme-dselect" name="" url="" widget="ui-creme-dselect"> {categories} </select> </li> <li chained-name="subcategory" class="ui-creme-chainedselect-item"> <span class="ui-creme-dselectlabel">{sub_categories_label}</span> <select class="ui-creme-input ui-creme-widget ui-creme-dselect" name="" url="{choices_url}" widget="ui-creme-dselect"> </select> </li> </ul> </div> </li> <li> <button class="ui-creme-actionbutton with-icon" name="create" title="{create_title}" type="button" popupUrl="{create_url}"> {create_icon}<span>{create_label}</span> </button> </li> </ul>'''.format( value=escape(value), categories=format_html_join( '', '<option value="{}">{}</option>', Category.objects.values_list('id', 'name'), ), categories_label=_('Category'), sub_categories_label=_('Sub-category'), choices_url=reverse( 'products__subcategories', args=('1234', ), ).replace('1234', '${category}'), create_title=_('Create'), create_label=SubCategory.creation_label, create_url=creation_url + '?category=${_delegate_.category}', create_icon=self.get_icon( 'add', size='form-widget', label=SubCategory.creation_label, ).render(), ) self.maxDiff = None self.assertHTMLEqual( html, widget.render( 'sub_category', value, attrs={ 'reset': False, 'direction': ChainedInput.VERTICAL }, ))
def _update_creation_info(self): widget = self.widget widget.creation_url, widget.creation_allowed = config_registry.get_model_creation_info( SubCategory, self.user)
def _update_creation_info(self): widget = self.widget user = self._user widget.creation_url, widget.creation_allowed = ( ('', False) if user is None else config_registry.get_model_creation_info(SubCategory, user))