Updated integration tests to not require exact match
This matches how we want clients to behave, they should ignore any extra fields that are sent in the response.
This commit is contained in:
@@ -5,6 +5,8 @@ from typing import Any
|
||||
|
||||
import httpx
|
||||
|
||||
from ..conftest import assert_dicts_compatible
|
||||
|
||||
URL = "http://spoolman:8000"
|
||||
|
||||
|
||||
@@ -45,23 +47,26 @@ def test_add_filament(random_vendor: dict[str, Any]):
|
||||
|
||||
# Verify
|
||||
filament = result.json()
|
||||
assert filament == {
|
||||
"id": filament["id"],
|
||||
"registered": filament["registered"],
|
||||
"name": name,
|
||||
"vendor": random_vendor,
|
||||
"material": material,
|
||||
"price": price,
|
||||
"density": density,
|
||||
"diameter": diameter,
|
||||
"weight": weight,
|
||||
"spool_weight": spool_weight,
|
||||
"article_number": article_number,
|
||||
"comment": comment,
|
||||
"settings_extruder_temp": settings_extruder_temp,
|
||||
"settings_bed_temp": settings_bed_temp,
|
||||
"color_hex": color_hex,
|
||||
}
|
||||
assert_dicts_compatible(
|
||||
filament,
|
||||
{
|
||||
"id": filament["id"],
|
||||
"registered": filament["registered"],
|
||||
"name": name,
|
||||
"vendor": random_vendor,
|
||||
"material": material,
|
||||
"price": price,
|
||||
"density": density,
|
||||
"diameter": diameter,
|
||||
"weight": weight,
|
||||
"spool_weight": spool_weight,
|
||||
"article_number": article_number,
|
||||
"comment": comment,
|
||||
"settings_extruder_temp": settings_extruder_temp,
|
||||
"settings_bed_temp": settings_bed_temp,
|
||||
"color_hex": color_hex,
|
||||
},
|
||||
)
|
||||
|
||||
# Verify that registered happened almost now (within 1 minute)
|
||||
diff = abs((datetime.now(tz=timezone.utc) - datetime.fromisoformat(filament["registered"])).total_seconds())
|
||||
@@ -87,12 +92,15 @@ def test_add_filament_required():
|
||||
|
||||
# Verify
|
||||
filament = result.json()
|
||||
assert filament == {
|
||||
"id": filament["id"],
|
||||
"registered": filament["registered"],
|
||||
"density": density,
|
||||
"diameter": diameter,
|
||||
}
|
||||
assert_dicts_compatible(
|
||||
filament,
|
||||
{
|
||||
"id": filament["id"],
|
||||
"registered": filament["registered"],
|
||||
"density": density,
|
||||
"diameter": diameter,
|
||||
},
|
||||
)
|
||||
|
||||
# Clean up
|
||||
httpx.delete(f"{URL}/api/v1/filament/{filament['id']}").raise_for_status()
|
||||
|
||||
@@ -7,14 +7,11 @@ from typing import Any
|
||||
import httpx
|
||||
import pytest
|
||||
|
||||
from ..conftest import assert_lists_compatible
|
||||
|
||||
URL = "http://spoolman:8000"
|
||||
|
||||
|
||||
def filament_lists_equal(a: Iterable[dict[str, Any]], b: Iterable[dict[str, Any]]) -> bool:
|
||||
"""Compare two lists of filaments where the order of the filaments is not guaranteed."""
|
||||
return sorted(a, key=lambda x: x["id"]) == sorted(b, key=lambda x: x["id"])
|
||||
|
||||
|
||||
@dataclass
|
||||
class Fixture:
|
||||
filaments: list[dict[str, Any]]
|
||||
@@ -120,7 +117,7 @@ def test_find_all_filaments(filaments: Fixture):
|
||||
|
||||
# Verify
|
||||
filaments_result = result.json()
|
||||
assert filament_lists_equal(filaments_result, filaments.filaments)
|
||||
assert_lists_compatible(filaments_result, filaments.filaments)
|
||||
|
||||
|
||||
def test_find_all_filaments_sort_asc(filaments: Fixture):
|
||||
@@ -279,7 +276,7 @@ def test_find_filaments_by_empty_name(filaments: Fixture):
|
||||
|
||||
# Verify
|
||||
filaments_result = result.json()
|
||||
assert filament_lists_equal(filaments_result, filaments.filaments[3:])
|
||||
assert_lists_compatible(filaments_result, filaments.filaments[3:])
|
||||
|
||||
|
||||
def test_find_filaments_by_material(filaments: Fixture):
|
||||
@@ -305,7 +302,7 @@ def test_find_filaments_by_multiple_materials(filaments: Fixture):
|
||||
|
||||
# Verify
|
||||
filaments_result = result.json()
|
||||
assert filament_lists_equal(filaments_result, filaments.filaments[:2])
|
||||
assert_lists_compatible(filaments_result, filaments.filaments[:2])
|
||||
|
||||
|
||||
def test_find_filaments_by_empty_material(filaments: Fixture):
|
||||
@@ -318,7 +315,7 @@ def test_find_filaments_by_empty_material(filaments: Fixture):
|
||||
|
||||
# Verify
|
||||
filaments_result = result.json()
|
||||
assert filament_lists_equal(filaments_result, filaments.filaments[3:])
|
||||
assert_lists_compatible(filaments_result, filaments.filaments[3:])
|
||||
|
||||
|
||||
@pytest.mark.parametrize("field_name", ["vendor_id", "vendor.id"])
|
||||
@@ -332,7 +329,7 @@ def test_find_filaments_by_vendor_id(filaments: Fixture, field_name: str):
|
||||
|
||||
# Verify
|
||||
filaments_result = result.json()
|
||||
assert filament_lists_equal(filaments_result, filaments.filaments[:2])
|
||||
assert_lists_compatible(filaments_result, filaments.filaments[:2])
|
||||
|
||||
|
||||
def test_find_filaments_by_multiple_vendor_ids(filaments: Fixture):
|
||||
@@ -347,7 +344,7 @@ def test_find_filaments_by_multiple_vendor_ids(filaments: Fixture):
|
||||
|
||||
# Verify
|
||||
filaments_result = result.json()
|
||||
assert filament_lists_equal(
|
||||
assert_lists_compatible(
|
||||
filaments_result,
|
||||
[
|
||||
filaments.filaments[0],
|
||||
@@ -367,7 +364,7 @@ def test_find_filaments_by_empty_vendor_id(filaments: Fixture):
|
||||
|
||||
# Verify
|
||||
filaments_result = result.json()
|
||||
assert filament_lists_equal(filaments_result, filaments.filaments[2:4])
|
||||
assert_lists_compatible(filaments_result, filaments.filaments[2:4])
|
||||
|
||||
|
||||
@pytest.mark.parametrize("field_name", ["vendor_name", "vendor.name"])
|
||||
@@ -381,7 +378,7 @@ def test_find_filaments_by_vendor_name(filaments: Fixture, field_name: str):
|
||||
|
||||
# Verify
|
||||
filaments_result = result.json()
|
||||
assert filament_lists_equal(filaments_result, filaments.filaments[:2])
|
||||
assert_lists_compatible(filaments_result, filaments.filaments[:2])
|
||||
|
||||
|
||||
def test_find_filaments_by_empty_vendor_name(filaments: Fixture):
|
||||
@@ -420,7 +417,7 @@ def test_find_filaments_by_empty_article_number(filaments: Fixture):
|
||||
|
||||
# Verify
|
||||
filaments_result = result.json()
|
||||
assert filament_lists_equal(filaments_result, filaments.filaments[3:])
|
||||
assert_lists_compatible(filaments_result, filaments.filaments[3:])
|
||||
|
||||
|
||||
def test_find_filaments_by_similar_color(filaments: Fixture):
|
||||
@@ -436,7 +433,7 @@ def test_find_filaments_by_similar_color(filaments: Fixture):
|
||||
|
||||
# Verify
|
||||
filaments_result = result.json()
|
||||
assert filament_lists_equal(filaments_result, [filaments.filaments[0], filaments.filaments[1]])
|
||||
assert_lists_compatible(filaments_result, [filaments.filaments[0], filaments.filaments[1]])
|
||||
|
||||
|
||||
def test_find_filaments_by_similar_color_100(filaments: Fixture):
|
||||
@@ -452,7 +449,7 @@ def test_find_filaments_by_similar_color_100(filaments: Fixture):
|
||||
|
||||
# Verify
|
||||
filaments_result = result.json()
|
||||
assert filament_lists_equal(
|
||||
assert_lists_compatible(
|
||||
filaments_result,
|
||||
[filaments.filaments[0], filaments.filaments[1], filaments.filaments[2]],
|
||||
)
|
||||
|
||||
@@ -4,6 +4,8 @@ from typing import Any
|
||||
|
||||
import httpx
|
||||
|
||||
from ..conftest import assert_dicts_compatible
|
||||
|
||||
URL = "http://spoolman:8000"
|
||||
|
||||
|
||||
@@ -51,23 +53,26 @@ def test_get_filament(random_vendor: dict[str, Any]):
|
||||
|
||||
# Verify
|
||||
filament = result.json()
|
||||
assert filament == {
|
||||
"id": added_filament["id"],
|
||||
"registered": added_filament["registered"],
|
||||
"name": name,
|
||||
"vendor": random_vendor,
|
||||
"material": material,
|
||||
"price": price,
|
||||
"density": density,
|
||||
"diameter": diameter,
|
||||
"weight": weight,
|
||||
"spool_weight": spool_weight,
|
||||
"article_number": article_number,
|
||||
"comment": comment,
|
||||
"settings_extruder_temp": settings_extruder_temp,
|
||||
"settings_bed_temp": settings_bed_temp,
|
||||
"color_hex": color_hex,
|
||||
}
|
||||
assert_dicts_compatible(
|
||||
filament,
|
||||
{
|
||||
"id": added_filament["id"],
|
||||
"registered": added_filament["registered"],
|
||||
"name": name,
|
||||
"vendor": random_vendor,
|
||||
"material": material,
|
||||
"price": price,
|
||||
"density": density,
|
||||
"diameter": diameter,
|
||||
"weight": weight,
|
||||
"spool_weight": spool_weight,
|
||||
"article_number": article_number,
|
||||
"comment": comment,
|
||||
"settings_extruder_temp": settings_extruder_temp,
|
||||
"settings_bed_temp": settings_bed_temp,
|
||||
"color_hex": color_hex,
|
||||
},
|
||||
)
|
||||
|
||||
# Clean up
|
||||
httpx.delete(f"{URL}/api/v1/filament/{filament['id']}").raise_for_status()
|
||||
|
||||
@@ -4,6 +4,8 @@ from typing import Any
|
||||
|
||||
import httpx
|
||||
|
||||
from ..conftest import assert_dicts_compatible
|
||||
|
||||
URL = "http://spoolman:8000"
|
||||
|
||||
|
||||
@@ -66,23 +68,26 @@ def test_update_filament(random_vendor: dict[str, Any]):
|
||||
|
||||
# Verify
|
||||
filament = result.json()
|
||||
assert filament == {
|
||||
"id": added_filament["id"],
|
||||
"registered": added_filament["registered"],
|
||||
"name": new_name,
|
||||
"vendor": random_vendor,
|
||||
"material": new_material,
|
||||
"price": new_price,
|
||||
"density": new_density,
|
||||
"diameter": new_diameter,
|
||||
"weight": new_weight,
|
||||
"spool_weight": new_spool_weight,
|
||||
"article_number": new_article_number,
|
||||
"comment": new_comment,
|
||||
"settings_extruder_temp": new_settings_extruder_temp,
|
||||
"settings_bed_temp": new_settings_bed_temp,
|
||||
"color_hex": new_color_hex,
|
||||
}
|
||||
assert_dicts_compatible(
|
||||
filament,
|
||||
{
|
||||
"id": added_filament["id"],
|
||||
"registered": added_filament["registered"],
|
||||
"name": new_name,
|
||||
"vendor": random_vendor,
|
||||
"material": new_material,
|
||||
"price": new_price,
|
||||
"density": new_density,
|
||||
"diameter": new_diameter,
|
||||
"weight": new_weight,
|
||||
"spool_weight": new_spool_weight,
|
||||
"article_number": new_article_number,
|
||||
"comment": new_comment,
|
||||
"settings_extruder_temp": new_settings_extruder_temp,
|
||||
"settings_bed_temp": new_settings_bed_temp,
|
||||
"color_hex": new_color_hex,
|
||||
},
|
||||
)
|
||||
|
||||
# Clean up
|
||||
httpx.delete(f"{URL}/api/v1/filament/{filament['id']}").raise_for_status()
|
||||
|
||||
Reference in New Issue
Block a user