Example #1
0
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')
Example #2
0
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")
Example #3
0
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]
Example #4
0
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"