def _test_get_fields(self, model, obj=None, field_names=None, client=None, has_error=False): client = client or self.__client_login() obj = obj or model.objects.all()[0] self.assertEqual(model, obj.__class__) module_name = get_module_name(model) app_label = model._meta.app_label field_names = field_names or model._meta.get_all_field_names() for field in field_names: if field == 'id' or field.endswith('_id'): # id or id fk continue url = ( '%s?app_label=%s&module_name=%s&field_name=%s&obj_id=%s&__widget_font_size=12.5px' '&__widget_line_height=12.5&__widget_height=19.5px&__widget_width=137.5px' % (reverse('inplace_get_field'), app_label, module_name, field, obj.pk)) response = client.get(url) self.assertEqual(response.status_code, 200) self.assertEqual( bool( json.loads(response.content.decode('utf-8')).get( 'errors', None)), has_error)
def __init__(self, request, obj, field_name, filters_to_show=None, config=None): self.request = request self.obj = obj self.field_name = field_name self.filters_to_show = filters_to_show and filters_to_show.split('|') self.model = obj.__class__ self.field_name_render = field_name # To transmeta self.config = config or {} self.config['obj_id'] = unicode(self.obj.pk) self.config['field_name'] = self.field_name_render self.config['app_label'] = self.model._meta.app_label self.config['module_name'] = get_module_name(self.model) self.config['filters_to_show'] = filters_to_show self.config['can_auto_save'] = self.config.get('can_auto_save', 1) filters_to_edit = self.config.get('filters_to_edit', None) self.filters_to_edit = filters_to_edit and filters_to_edit.split('|') or [] self.class_inplace = self.config.get('class_inplace', '') self.tag_name_cover = self.config.get('tag_name_cover', 'span') self.min_width = self.config.get('min_width', self.DEFAULT_MIN_HEIGHT) font_size = self.config.get('font_size', '12') if font_size.endswith('px'): self.font_size = float(font_size.replace('px', '')) else: self.font_size = 12 loads = self.config.get('loads', None) self.loads = loads and loads.split(':') or [] self.initial = {} self._transmeta_processing()
def can_edit(cls, field): is_super_user = super(AdminDjangoPermEditInline, cls).can_edit(field) if not is_super_user: model = field.model model_edit = '%s.change_%s' % (model._meta.app_label, get_module_name(model)) return field.request.user.has_perm(model_edit) return is_super_user
def test_bad_requests(self): has_error = True client = self.__client_login() url_get_field = reverse('inplace_get_field') response = client.get(url_get_field) self.assertEqual(response.status_code, 200) self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)), has_error) response = client.post(url_get_field) self.assertEqual(response.status_code, 200) self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)), has_error) url_save = reverse('inplace_save') response = client.post(url_save) self.assertEqual(response.status_code, 200) self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)), has_error) response = client.get(url_save) self.assertEqual(response.status_code, 200) self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)), has_error) obj = Resource.objects.all()[0] data = {'app_label': obj.__class__._meta.app_label, 'module_name': get_module_name(obj.__class__), 'field_name': 'name', 'value': '""', 'obj_id': obj.pk, 'adaptor': 'text'} response = client.post(url_save, data) self.assertEqual(response.status_code, 200) self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)), has_error) data['value'] = '"New value"' response = client.post(url_save, data) self.assertEqual(response.status_code, 200) self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)), not has_error) obj.name = '' obj.save() data['field_name'] = 'description' data['value'] = '"Description...."' response = client.post(url_save, data) self.assertEqual(response.status_code, 200) self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)), has_error) obj.name = 'New value' obj.save() response = client.post(url_save, data) self.assertEqual(response.status_code, 200) self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)), not has_error)
def _test_get_fields(self, model, obj=None, field_names=None, client=None, has_error=False): client = client or self.__client_login() obj = obj or model.objects.all()[0] self.assertEqual(model, obj.__class__) module_name = get_module_name(model) app_label = model._meta.app_label field_names = field_names or model._meta.get_all_field_names() for field in field_names: if field == 'id' or field.endswith('_id'): # id or id fk continue url = ('%s?app_label=%s&module_name=%s&field_name=%s&obj_id=%s&__widget_font_size=12.5px' '&__widget_line_height=12.5&__widget_height=19.5px&__widget_width=137.5px' % (reverse('inplace_get_field'), app_label, module_name, field, obj.pk)) response = client.get(url) self.assertEqual(response.status_code, 200) self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)), has_error)
def _test_save_fields(self, model, obj=None, field_names=None, client=None, has_error=False): client = client or self.__client_login() obj = obj or model.objects.all()[0] self.assertEqual(model, obj.__class__) module_name = get_module_name(model) app_label = model._meta.app_label field_names = field_names or model._meta.get_all_field_names() for field_name in field_names: extra_data = {} if field_name in transmeta.get_all_translatable_fields(model): field = model._meta.get_field_by_name(transmeta.get_fallback_fieldname(field_name))[0] else: field = model._meta.get_field_by_name(field_name)[0] if field_name == 'id' or field_name.endswith('_id'): # id or id fk continue url = reverse('inplace_save') value = getattr(obj, field_name) if isinstance(field, models.FileField): value = '"example1.jpg"' file_path = os.path.join(settings.MEDIA_ROOT, 'images', 'example1.jpg') extra_data['attachment'] = open(file_path, 'rb') elif isinstance(value, datetime.datetime): value = '"1982-11-14 03:13:12"' elif isinstance(value, datetime.date): value = '"1982-11-14"' elif isinstance(value, datetime.time): value = '"03:13:12"' else: if hasattr(value, 'all'): value = [str(obj_rel.pk) for obj_rel in value.model.objects.all()] elif isinstance(value, decimal.Decimal): value = float(value) + 10 elif (isinstance(value, string) and isinstance(field, models.CharField) and not isinstance(field, models.CommaSeparatedIntegerField) and not isinstance(field, models.EmailField)): if field.choices: value = field.choices[0][0] else: value += '_save' elif isinstance(field, models.CommaSeparatedIntegerField): value += ',44' elif isinstance(field, models.EmailField): value = '*****@*****.**' elif isinstance(field, models.ForeignKey): value = field.rel.to.objects.all()[0].pk elif isinstance(field, bool): value = not value value = json.dumps(value) adaptor = get_adaptor_class(obj=obj, field_name=field_name)(None, obj, field_name).name data = {'app_label': app_label, 'module_name': module_name, 'field_name': field_name, 'value': value, 'obj_id': obj.pk, 'adaptor': adaptor} data.update(extra_data) response = client.post(url, data) self.assertEqual(response.status_code, 200) self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)), has_error)
def _test_save_fields(self, model, obj=None, field_names=None, client=None, has_error=False): client = client or self.__client_login() obj = obj or model.objects.all()[0] self.assertEqual(model, obj.__class__) module_name = get_module_name(model) app_label = model._meta.app_label field_names = field_names or model._meta.get_all_field_names() for field_name in field_names: extra_data = {} if field_name in transmeta.get_all_translatable_fields(model): field = model._meta.get_field_by_name( transmeta.get_fallback_fieldname(field_name))[0] else: field = model._meta.get_field_by_name(field_name)[0] if field_name == 'id' or field_name.endswith('_id'): # id or id fk continue url = reverse('inplace_save') value = getattr(obj, field_name) if isinstance(field, models.FileField): value = '"example1.jpg"' file_path = os.path.join(settings.MEDIA_ROOT, 'images', 'example1.jpg') extra_data['attachment'] = open(file_path, 'rb') elif isinstance(value, datetime.datetime): value = '"1982-11-14 03:13:12"' elif isinstance(value, datetime.date): value = '"1982-11-14"' elif isinstance(value, datetime.time): value = '"03:13:12"' else: if hasattr(value, 'all'): value = [ str(obj_rel.pk) for obj_rel in value.model.objects.all() ] elif isinstance(value, decimal.Decimal): value = float(value) + 10 elif (isinstance(value, string) and isinstance(field, models.CharField) and not isinstance(field, models.CommaSeparatedIntegerField) and not isinstance(field, models.EmailField)): if field.choices: value = field.choices[0][0] else: value += '_save' elif isinstance(field, models.CommaSeparatedIntegerField): value += ',44' elif isinstance(field, models.EmailField): value = '*****@*****.**' elif isinstance(field, models.ForeignKey): value = field.rel.to.objects.all()[0].pk elif isinstance(field, bool): value = not value value = json.dumps(value) adaptor = get_adaptor_class(obj=obj, field_name=field_name)(None, obj, field_name).name data = { 'app_label': app_label, 'module_name': module_name, 'field_name': field_name, 'value': value, 'obj_id': obj.pk, 'adaptor': adaptor } data.update(extra_data) response = client.post(url, data) self.assertEqual(response.status_code, 200) self.assertEqual( bool( json.loads(response.content.decode('utf-8')).get( 'errors', None)), has_error)
def test_bad_requests(self): has_error = True client = self.__client_login() url_get_field = reverse('inplace_get_field') response = client.get(url_get_field) self.assertEqual(response.status_code, 200) self.assertEqual( bool( json.loads(response.content.decode('utf-8')).get( 'errors', None)), has_error) response = client.post(url_get_field) self.assertEqual(response.status_code, 200) self.assertEqual( bool( json.loads(response.content.decode('utf-8')).get( 'errors', None)), has_error) url_save = reverse('inplace_save') response = client.post(url_save) self.assertEqual(response.status_code, 200) self.assertEqual( bool( json.loads(response.content.decode('utf-8')).get( 'errors', None)), has_error) response = client.get(url_save) self.assertEqual(response.status_code, 200) self.assertEqual( bool( json.loads(response.content.decode('utf-8')).get( 'errors', None)), has_error) obj = Resource.objects.all()[0] data = { 'app_label': obj.__class__._meta.app_label, 'module_name': get_module_name(obj.__class__), 'field_name': 'name', 'value': '""', 'obj_id': obj.pk, 'adaptor': 'text' } response = client.post(url_save, data) self.assertEqual(response.status_code, 200) self.assertEqual( bool( json.loads(response.content.decode('utf-8')).get( 'errors', None)), has_error) data['value'] = '"New value"' response = client.post(url_save, data) self.assertEqual(response.status_code, 200) self.assertEqual( bool( json.loads(response.content.decode('utf-8')).get( 'errors', None)), not has_error) obj.name = '' obj.save() data['field_name'] = 'description' data['value'] = '"Description...."' response = client.post(url_save, data) self.assertEqual(response.status_code, 200) self.assertEqual( bool( json.loads(response.content.decode('utf-8')).get( 'errors', None)), has_error) obj.name = 'New value' obj.save() response = client.post(url_save, data) self.assertEqual(response.status_code, 200) self.assertEqual( bool( json.loads(response.content.decode('utf-8')).get( 'errors', None)), not has_error)