def test_get_row(data_fixture): user = data_fixture.create_user() user_2 = data_fixture.create_user() table = data_fixture.create_database_table(name='Car', user=user) name_field = data_fixture.create_text_field( table=table, name='Name', text_default='Test' ) speed_field = data_fixture.create_number_field( table=table, name='Max speed', number_negative=True ) price_field = data_fixture.create_number_field( table=table, name='Price', number_type='DECIMAL', number_decimal_places=2, number_negative=False ) handler = RowHandler() row = handler.create_row(user=user, table=table, values={ f'field_{name_field.id}': 'Tesla', f'field_{speed_field.id}': 240, f'field_{price_field.id}': Decimal('59999.99') }) with pytest.raises(UserNotInGroupError): handler.get_row(user=user_2, table=table, row_id=row.id) with pytest.raises(RowDoesNotExist): handler.get_row(user=user, table=table, row_id=99999) row_tmp = handler.get_row(user=user, table=table, row_id=row.id) assert row_tmp.id == row.id assert getattr(row_tmp, f'field_{name_field.id}') == 'Tesla' assert getattr(row_tmp, f'field_{speed_field.id}') == 240 assert getattr(row_tmp, f'field_{price_field.id}') == Decimal('59999.99')
def test_get_row(data_fixture): user = data_fixture.create_user() user_2 = data_fixture.create_user() table = data_fixture.create_database_table(name="Car", user=user) name_field = data_fixture.create_text_field(table=table, name="Name", text_default="Test") speed_field = data_fixture.create_number_field(table=table, name="Max speed", number_negative=True) price_field = data_fixture.create_number_field( table=table, name="Price", number_type="DECIMAL", number_decimal_places=2, number_negative=False, ) handler = RowHandler() row = handler.create_row( user=user, table=table, values={ f"field_{name_field.id}": "Tesla", f"field_{speed_field.id}": 240, f"field_{price_field.id}": Decimal("59999.99"), }, ) with pytest.raises(UserNotInGroup): handler.get_row(user=user_2, table=table, row_id=row.id) with pytest.raises(RowDoesNotExist): handler.get_row(user=user, table=table, row_id=99999) row_tmp = handler.get_row(user=user, table=table, row_id=row.id) assert row_tmp.id == row.id assert getattr(row_tmp, f"field_{name_field.id}") == "Tesla" assert getattr(row_tmp, f"field_{speed_field.id}") == 240 assert getattr(row_tmp, f"field_{price_field.id}") == Decimal("59999.99")
def test_import_export_link_row_field(data_fixture, user_tables_in_separate_db): user = data_fixture.create_user() imported_group = data_fixture.create_group(user=user) database = data_fixture.create_database_application(user=user, name="Placeholder") table = data_fixture.create_database_table(name="Example", database=database) customers_table = data_fixture.create_database_table( name="Customers", database=database ) field_handler = FieldHandler() core_handler = CoreHandler() link_row_field = field_handler.create_field( user=user, table=table, type_name="link_row", link_row_table=customers_table ) row_handler = RowHandler() c_row = row_handler.create_row(user=user, table=customers_table, values={}) c_row_2 = row_handler.create_row(user=user, table=customers_table, values={}) row = row_handler.create_row( user=user, table=table, values={f"field_{link_row_field.id}": [c_row.id, c_row_2.id]}, ) exported_applications = core_handler.export_group_applications( database.group, BytesIO() ) imported_applications, id_mapping = core_handler.import_applications_to_group( imported_group, exported_applications, BytesIO(), None ) imported_database = imported_applications[0] imported_tables = imported_database.table_set.all() imported_table = imported_tables[0] imported_customers_table = imported_tables[1] imported_link_row_field = imported_table.field_set.all().first().specific imported_link_row_relation_field = ( imported_customers_table.field_set.all().first().specific ) assert imported_table.id != table.id assert imported_table.name == table.name assert imported_customers_table.id != customers_table.id assert imported_customers_table.name == customers_table.name assert imported_link_row_field.id != link_row_field.id assert imported_link_row_field.name == link_row_field.name assert imported_link_row_field.link_row_table_id == imported_customers_table.id assert imported_link_row_relation_field.link_row_table_id == imported_table.id assert imported_link_row_field.link_row_relation_id == ( imported_link_row_relation_field.link_row_relation_id ) imported_c_row = row_handler.get_row( user=user, table=imported_customers_table, row_id=c_row.id ) imported_c_row_2 = row_handler.get_row( user=user, table=imported_customers_table, row_id=c_row_2.id ) imported_row = row_handler.get_row(user=user, table=imported_table, row_id=row.id) assert imported_row.id == row.id assert imported_c_row.id == c_row.id assert imported_c_row_2.id == c_row_2.id assert [ r.id for r in getattr(imported_row, f"field_{imported_link_row_field.id}").all() ] == [imported_c_row.id, imported_c_row_2.id]
def test_import_export_file_field(data_fixture, tmpdir, user_tables_in_separate_db): user = data_fixture.create_user() imported_group = data_fixture.create_group(user=user) database = data_fixture.create_database_application(user=user) table = data_fixture.create_database_table(database=database) field = data_fixture.create_file_field(table=table, name="File") storage = FileSystemStorage(location=str(tmpdir), base_url="http://localhost") handler = UserFileHandler() user_file = handler.upload_user_file(user, "test.txt", ContentFile(b"Hello World"), storage=storage) core_handler = CoreHandler() row_handler = RowHandler() model = table.get_model() row_1 = row_handler.create_row( user=user, table=table, values={ f"field_{field.id}": [{ "name": user_file.name, "visible_name": "a.txt" }] }, model=model, ) row_2 = row_handler.create_row( user=user, table=table, values={}, model=model, ) row_3 = row_handler.create_row( user=user, table=table, values={f"field_{field.id}": [{ "name": user_file.name }]}, model=model, ) files_buffer = BytesIO() exported_applications = core_handler.export_group_applications( database.group, files_buffer=files_buffer, storage=storage) # We expect that the exported zip file contains the user file used in the created # rows. with ZipFile(files_buffer, "r", ZIP_DEFLATED, False) as zip_file: assert zip_file.read(user_file.name) == b"Hello World" assert (exported_applications[0]["tables"][0]["rows"][0] [f"field_{field.id}"][0]["name"] == user_file.name) assert ( exported_applications[0]["tables"][0]["rows"][0][f"field_{field.id}"] [0]["original_name"] == user_file.original_name) assert exported_applications[0]["tables"][0]["rows"][1][ f"field_{field.id}"] == [] assert (exported_applications[0]["tables"][0]["rows"][2] [f"field_{field.id}"][0]["name"] == user_file.name) # Change the original name for enforce that the file is re-uploaded when saved. exported_applications[0]["tables"][0]["rows"][0][f"field_{field.id}"][0][ "original_name"] = "test2.txt" exported_applications[0]["tables"][0]["rows"][2][f"field_{field.id}"][0][ "original_name"] = "test2.txt" imported_applications, id_mapping = core_handler.import_applications_to_group( imported_group, exported_applications, files_buffer, storage) imported_database = imported_applications[0] imported_tables = imported_database.table_set.all() imported_table = imported_tables[0] imported_field = imported_table.field_set.all().first().specific imported_user_file = UserFile.objects.all()[1] import_row_1 = row_handler.get_row(user=user, table=imported_table, row_id=row_1.id) import_row_2 = row_handler.get_row(user=user, table=imported_table, row_id=row_2.id) import_row_3 = row_handler.get_row(user=user, table=imported_table, row_id=row_3.id) assert len(getattr(import_row_1, f"field_{imported_field.id}")) == 1 assert (getattr( import_row_1, f"field_{imported_field.id}")[0]["name"] == imported_user_file.name) assert (getattr( import_row_1, f"field_{imported_field.id}")[0]["visible_name"] == "a.txt") assert len(getattr(import_row_2, f"field_{imported_field.id}")) == 0 assert len(getattr(import_row_3, f"field_{imported_field.id}")) == 1 assert (getattr( import_row_3, f"field_{imported_field.id}")[0]["name"] == imported_user_file.name) assert (getattr( import_row_3, f"field_{imported_field.id}")[0]["visible_name"] == "test.txt") assert UserFile.objects.all().count() == 2 assert user_file.name != imported_user_file.name file_path = tmpdir.join("user_files", imported_user_file.name) assert file_path.isfile() assert file_path.open().read() == "Hello World"