def test_parse_columns_props_full() -> None: assert parse_columns("{id;max=30;min=5;align=center;NEW_TITLE}") == [ JobColumnInfo("id", "NEW_TITLE", Align.CENTER, ColumnWidth(5, 30)) ]
def test_parse_columns_sep() -> None: ci1 = COLUMNS_MAP["id"] ci2 = COLUMNS_MAP["name"] expected = [ JobColumnInfo("id", ci1.title, ci1.align, ci1.width), JobColumnInfo("name", ci2.title, ci2.align, ci2.width), ] assert parse_columns("{id}{name}") == expected assert parse_columns("{id} {name}") == expected assert parse_columns("{id},{name}") == expected assert parse_columns("{id} ,{name}") == expected assert parse_columns("{id}, {name}") == expected assert parse_columns("{id} , {name}") == expected assert parse_columns("id name") == expected assert parse_columns("id,name") == expected assert parse_columns("id ,name") == expected assert parse_columns("id, name") == expected assert parse_columns("id , name") == expected
def test_parse_columns_title_with_spaces() -> None: ci = COLUMNS_MAP["id"] assert parse_columns("{id;NEW TITLE}") == [ JobColumnInfo("id", "NEW TITLE", ci.align, ci.width) ]
def test_parse_columns_id() -> None: ci = COLUMNS_MAP["id"] assert parse_columns("id") == [ JobColumnInfo("id", ci.title, ci.align, ci.width) ]
def test_parse_columns_partial() -> None: ci = COLUMNS_MAP["description"] assert parse_columns("{DESC}") == [ JobColumnInfo("description", ci.title, ci.align, ci.width) ]
def test_parse_columns_ambigous() -> None: with pytest.raises(ValueError, match="Ambiguous column"): parse_columns("{c}")
def test_parse_columns_default() -> None: default_columns = get_default_columns() assert parse_columns("") == default_columns assert parse_columns(None) == default_columns
def test_parse_columns_invalid_property() -> None: with pytest.raises(ValueError, match="Invalid property"): parse_columns("{id;min=abc}")
def test_parse_columns_unknown() -> None: with pytest.raises(ValueError, match="Unknown column"): parse_columns("{unknown}")
def test_parse_columns_invalid_format() -> None: with pytest.raises(ValueError, match="Invalid format"): parse_columns("{id")
def test_parse_columns_props_width() -> None: ci = COLUMNS_MAP["id"] assert parse_columns("{id;max=30;min=5;width=10}") == [ JobColumnInfo("id", ci.title, ci.align, ColumnWidth(10, 10, 10)) ]
def test_parse_columns_props_subset() -> None: ci = COLUMNS_MAP["name"] assert parse_columns("{name;align=center;max=20}") == [ JobColumnInfo("name", ci.title, Align.CENTER, ColumnWidth(None, 20)) ]