def test_create_row_with_specific_fields_values(self): field_value_dict = {} for i, field in enumerate(self.fields): field_value_dict[field.name] = i + 50 get_custom_table_manager(self.table.name).create(**field_value_dict) for i, field in enumerate(self.fields): rows = get_custom_table_manager(self.table.name).filter(**{field.name: i + 50}) self.assertEqual(rows.count(), 1) self.assertEqual(get_custom_table_manager(self.table.name).all().count(), 2)
def test_update(self): form = get_tenant_specific_table_row_form_class(self.table.name)(instance=self.row, data=self.params) self.assertTrue(form.is_valid()) form.save() updated_row = get_custom_table_manager(self.table.name).get(id=self.row.id) for key, value in self.params.items(): self.assertEqual( getattr(updated_row, key), value )
def get_queryset(self): table_slug = self.kwargs['slug'] if get_setting('CUSTOMIZABLE_TABLES_LABEL_SEPARATOR') in table_slug: table_slug_parts = table_slug.split( get_setting('CUSTOMIZABLE_TABLES_LABEL_SEPARATOR')) if table_slug_parts[0] == get_setting('CUSTOM_TABLES_LABEL'): try: return get_custom_table_manager(table_slug_parts[1]).all() except TenantSpecificTable.DoesNotExist: pass raise Http404()
def test_create(self): form = get_tenant_specific_table_row_form_class(self.table.name)(data=self.params) self.assertTrue(form.is_valid()) instance = form.save() self.assertEqual(get_custom_table_manager( self.table.name).all().count(), 2) for key, value in self.params.items(): self.assertEqual( getattr(instance, key), value )
def test_create(self): params = {} for i, field in enumerate(self.fields): params[field.name] = 1 + 1000 response = self.client.post(self.list_view_url, params, format='json', HTTP_TENANT_SLUG=self.tenant.slug) self.assertEqual(response.status_code, 201) set_current_tenant(self.tenant.slug) self.assertEqual( get_custom_table_manager(self.table.name).all().count(), 2)
def test_update(self): params = {} for i, field in enumerate(self.fields): params[field.name] = 1 + 1000 response = self.client.put(self.details_view_url, params, format='json', HTTP_TENANT_SLUG=self.tenant.slug) self.assertEqual(response.status_code, 200) set_current_tenant(self.tenant.slug) for key, value in params.items(): self.assertEqual( getattr( get_custom_table_manager( self.table.name).get(id=self.row.id), key), value)
def update_tenant_specific_fields(self, tenant_specific_fields_data): from shared_schema_tenants_custom_data.helpers.custom_tables_helpers import ( get_custom_table_manager, _get_pivot_table_class_for_data_type) old = get_custom_table_manager(self.table.name).get(pk=self.pk) definitions = self.get_definitions() definitions_by_name = {d.name: d for d in definitions} with transaction.atomic(): for field_name, definition in definitions_by_name.items(): new_value = tenant_specific_fields_data.get(field_name, None) old_value = getattr(old, field_name, None) if new_value != old_value: PivotTableClass = _get_pivot_table_class_for_data_type( definition.data_type) PivotTableClass.objects.filter( definition__id=definition.id, row_id=self.id, row_content_type=ContentType.objects.get_for_model( self.__class__)).update(value=new_value)
def update(self, instance, validated_data): instance = super(TenantSpecificTableRowSerializer, self).update(instance, validated_data) return get_custom_table_manager(table_name).get(pk=instance.pk)
def create(self, validated_data): instance = get_custom_table_manager(table_name).create( **validated_data) return get_custom_table_manager(table_name).get(pk=instance.pk)
def save(self, *args, **kwargs): self.instance.table_id = table_id new_instance = super(TenantSpecificTableRowForm, self).save(*args, **kwargs) return get_custom_table_manager(table_name).get(id=new_instance.id)
def test_filter_by_tenant_specific_field_with_lookup(self): for i, field in enumerate(self.fields): rows = get_custom_table_manager(self.table.name).filter(**{field.name + '__gte': i}) self.assertEqual(rows.count(), 1)
def test_exclude_by_tenant_specific_field(self): for i, field in enumerate(self.fields): rows = get_custom_table_manager(self.table.name).exclude(**{field.name: i + 5}) self.assertEqual(rows.count(), 0)
def test_can_filter_by_tenant_specific_fields(self): row = get_custom_table_manager(self.table.name).all().first() for i, field in enumerate(self.fields): self.assertEqual(getattr(row, field.name, None), i + 5)