from __future__ import annotations
from sparkless.testing import get_imports
_imports = get_imports()
F = _imports.F
from tests.utils import _row_to_dict, assert_rows_equal
def test_substr_alias_select_collect(spark) -> None:
df = spark.createDataFrame(
[{"name": "hello"}],
["name"],
)
result = df.select(F.col("name").substr(1, 3).alias("partial"))
rows = result.collect()
cols = (
result.columns
if isinstance(getattr(result, "columns", None), list)
else result.columns()
)
assert cols == ["partial"]
assert_rows_equal([_row_to_dict(r) for r in rows], [{"partial": "hel"}])
def test_substr_alias_multiple_rows(spark) -> None:
df = spark.createDataFrame(
[{"name": "abc"}, {"name": "xyz"}, {"name": "hi"}],
["name"],
)
rows = df.select(F.col("name").substr(1, 2).alias("partial")).collect()
assert_rows_equal(
[_row_to_dict(r) for r in rows],
[{"partial": "ab"}, {"partial": "xy"}, {"partial": "hi"}],
)
def test_substr_alias_chained_with_other_expr(spark) -> None:
df = spark.createDataFrame(
[("hello", 1)],
["s", "n"],
)
rows = df.select(
F.col("s").substr(1, 3).alias("partial"),
F.col("n"),
).collect()
assert_rows_equal([_row_to_dict(r) for r in rows], [{"partial": "hel", "n": 1}])