diff --git a/spoolman/database/utils.py b/spoolman/database/utils.py index 54fb3d8..3cab16f 100644 --- a/spoolman/database/utils.py +++ b/spoolman/database/utils.py @@ -47,7 +47,7 @@ def add_where_clause_str_opt( if len(value) == 0: stmt = stmt.where(sqlalchemy.or_(field.is_(None), field == "")) else: - stmt = stmt.where(field.ilike(f"%{value}%")) + stmt = stmt.where(sqlalchemy.or_(*(field.ilike(f"%{value}%") for value in value.split(",")))) return stmt @@ -61,7 +61,7 @@ def add_where_clause_str( if len(value) == 0: stmt = stmt.where(field == "") else: - stmt = stmt.where(field.ilike(f"%{value}%")) + stmt = stmt.where(sqlalchemy.or_(*(field.ilike(f"%{value}%") for value in value.split(",")))) return stmt diff --git a/tests_integration/tests/filament/test_find.py b/tests_integration/tests/filament/test_find.py index 4f34fa9..4f96b4b 100644 --- a/tests_integration/tests/filament/test_find.py +++ b/tests_integration/tests/filament/test_find.py @@ -289,7 +289,20 @@ def test_find_filaments_by_material(filaments: Fixture): # Verify filaments_result = result.json() - assert filaments_result[0] == filaments.filaments[1] + assert filaments_result == [filaments.filaments[1]] + + +def test_find_filaments_by_multiple_materials(filaments: Fixture): + # Execute + result = httpx.get( + f"{URL}/api/v1/filament", + params={"material": "abs,pla"}, + ) + result.raise_for_status() + + # Verify + filaments_result = result.json() + assert filament_lists_equal(filaments_result, filaments.filaments[:2]) def test_find_filaments_by_empty_material(filaments: Fixture):