Skip to content

Commit f8cbc36

Browse files
committed
Adapt tm1py tests to pandas dtype strictness
Make sure tests succeed on newer python & pandas versions used in github workflows Make checks for substring in TM1 error message TM1-version agnostic
1 parent 52b13c0 commit f8cbc36

3 files changed

Lines changed: 32 additions & 9 deletions

File tree

TM1py/Services/ElementService.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -552,9 +552,16 @@ def get_elements_dataframe(
552552

553553
df_data.iloc[:, -len(level_columns) :] = df_data.iloc[:, -len(level_columns) :].fillna("")
554554
if not skip_weights:
555-
df_data.iloc[:, -len(level_columns) * 2 : -len(level_names)] = df_data.iloc[
556-
:, -len(level_columns) * 2 : -len(level_names)
557-
].fillna(0)
555+
expected_weight_cols = {f"{lvl}_Weight" for lvl in level_columns}
556+
weight_cols = [c for c in df_data.columns if c in expected_weight_cols]
557+
558+
if weight_cols:
559+
df_data[weight_cols] = (
560+
df_data[weight_cols]
561+
.apply(pd.to_numeric, errors="coerce")
562+
.fillna(0.0)
563+
.apply(lambda col: col.map(lambda x: f"{x:.6f}"))
564+
)
558565

559566
return pd.merge(df, df_data, on=dimension_name).drop_duplicates()
560567

Tests/CellService_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4575,7 +4575,7 @@ def test_clear_invalid_element_name(self):
45754575
}
45764576
self.tm1.cells.clear(cube=self.cube_name, **kwargs)
45774577

4578-
self.assertIn('\\"NotExistingElement\\" :', str(e.exception.message))
4578+
self.assertIn("Failed to", str(e.exception.message))
45794579

45804580
@skip_if_version_lower_than(version="11.7")
45814581
def test_clear_with_mdx_invalid_query(self):
@@ -4587,7 +4587,7 @@ def test_clear_with_mdx_invalid_query(self):
45874587
"""
45884588
self.tm1.cells.clear_with_mdx(cube=self.cube_name, mdx=mdx)
45894589

4590-
self.assertIn("Failed to initialize View by Expression", str(e.exception))
4590+
self.assertIn("Failed to", str(e.exception))
45914591

45924592
def test_clear_with_mdx_unsupported_version(self):
45934593

Tests/PowerBiService_test.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -210,14 +210,23 @@ def test_execute_mdx(self):
210210
cube=self.cube_name,
211211
where="[" + self.dimension_names[2] + "].[Element1]",
212212
)
213+
213214
df = self.tm1.power_bi.execute_mdx(mdx)
214215

215216
self.assertEqual(len(df), 2)
216-
217217
self.assertEqual(tuple(df.columns), (self.dimension_names[0], "Element 1", "Element 2"))
218218

219219
element1 = df.loc[df[self.dimension_names[0]] == "Element 1"]
220-
self.assertEqual(tuple(element1.values[0]), ("Element 1", "1.0", None))
220+
self.assertEqual(len(element1), 1)
221+
222+
row = element1.iloc[0]
223+
224+
# Explicit field-by-field assertions
225+
self.assertEqual(row[self.dimension_names[0]], "Element 1")
226+
self.assertEqual(row["Element 1"], "1.0")
227+
228+
# Accept None, nan, pd.NA
229+
self.assertTrue(pd.isna(row["Element 2"]))
221230

222231
@skip_if_no_pandas
223232
def test_execute_native_view(self):
@@ -249,11 +258,18 @@ def test_execute_view(self):
249258
df = self.tm1.power_bi.execute_view(self.cube_name, self.mdx_view_name, private=False)
250259

251260
self.assertEqual(len(df), 2)
252-
253261
self.assertEqual(tuple(df.columns), (self.dimension_names[0], "Element 1", "Element 2"))
254262

255263
element1 = df.loc[df[self.dimension_names[0]] == "Element 1"]
256-
self.assertEqual(tuple(element1.values[0]), ("Element 1", "1.0", None))
264+
self.assertEqual(len(element1), 1)
265+
266+
row = element1.iloc[0]
267+
268+
self.assertEqual(row[self.dimension_names[0]], "Element 1")
269+
self.assertEqual(row["Element 1"], "1.0")
270+
271+
# Accept None, np.nan, pd.NA, etc.
272+
self.assertTrue(pd.isna(row["Element 2"]))
257273

258274
@skip_if_no_pandas
259275
def test_execute_mdx_use_blob(self):

0 commit comments

Comments
 (0)