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,7 +47,9 @@ def test_add_filament(random_vendor: dict[str, Any]):
|
||||
|
||||
# Verify
|
||||
filament = result.json()
|
||||
assert filament == {
|
||||
assert_dicts_compatible(
|
||||
filament,
|
||||
{
|
||||
"id": filament["id"],
|
||||
"registered": filament["registered"],
|
||||
"name": name,
|
||||
@@ -61,7 +65,8 @@ def test_add_filament(random_vendor: dict[str, Any]):
|
||||
"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 == {
|
||||
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,7 +53,9 @@ def test_get_filament(random_vendor: dict[str, Any]):
|
||||
|
||||
# Verify
|
||||
filament = result.json()
|
||||
assert filament == {
|
||||
assert_dicts_compatible(
|
||||
filament,
|
||||
{
|
||||
"id": added_filament["id"],
|
||||
"registered": added_filament["registered"],
|
||||
"name": name,
|
||||
@@ -67,7 +71,8 @@ def test_get_filament(random_vendor: dict[str, Any]):
|
||||
"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,7 +68,9 @@ def test_update_filament(random_vendor: dict[str, Any]):
|
||||
|
||||
# Verify
|
||||
filament = result.json()
|
||||
assert filament == {
|
||||
assert_dicts_compatible(
|
||||
filament,
|
||||
{
|
||||
"id": added_filament["id"],
|
||||
"registered": added_filament["registered"],
|
||||
"name": new_name,
|
||||
@@ -82,7 +86,8 @@ def test_update_filament(random_vendor: dict[str, Any]):
|
||||
"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()
|
||||
|
||||
@@ -6,7 +6,7 @@ from typing import Any
|
||||
import httpx
|
||||
import pytest
|
||||
|
||||
from ..conftest import length_from_weight
|
||||
from ..conftest import assert_dicts_compatible, length_from_weight
|
||||
|
||||
URL = "http://spoolman:8000"
|
||||
|
||||
@@ -50,7 +50,9 @@ def test_add_spool_remaining_weight(random_filament: dict[str, Any]):
|
||||
)
|
||||
|
||||
spool = result.json()
|
||||
assert spool == {
|
||||
assert_dicts_compatible(
|
||||
spool,
|
||||
{
|
||||
"id": spool["id"],
|
||||
"registered": spool["registered"],
|
||||
"first_used": "2023-01-02T11:00:00Z",
|
||||
@@ -65,7 +67,8 @@ def test_add_spool_remaining_weight(random_filament: dict[str, Any]):
|
||||
"comment": comment,
|
||||
"archived": archived,
|
||||
"price": price,
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
# Verify that registered happened almost now (within 1 minute)
|
||||
diff = abs((datetime.now(tz=timezone.utc) - datetime.fromisoformat(spool["registered"])).total_seconds())
|
||||
@@ -114,7 +117,9 @@ def test_add_spool_used_weight(random_filament: dict[str, Any]):
|
||||
)
|
||||
|
||||
spool = result.json()
|
||||
assert spool == {
|
||||
assert_dicts_compatible(
|
||||
spool,
|
||||
{
|
||||
"id": spool["id"],
|
||||
"registered": spool["registered"],
|
||||
"first_used": first_used,
|
||||
@@ -128,7 +133,8 @@ def test_add_spool_used_weight(random_filament: dict[str, Any]):
|
||||
"lot_nr": lot_nr,
|
||||
"comment": comment,
|
||||
"archived": archived,
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
# Clean up
|
||||
httpx.delete(f"{URL}/api/v1/spool/{spool['id']}").raise_for_status()
|
||||
@@ -161,7 +167,9 @@ def test_add_spool_required(random_filament: dict[str, Any]):
|
||||
)
|
||||
|
||||
spool = result.json()
|
||||
assert spool == {
|
||||
assert_dicts_compatible(
|
||||
spool,
|
||||
{
|
||||
"id": spool["id"],
|
||||
"registered": spool["registered"],
|
||||
"filament": random_filament,
|
||||
@@ -170,7 +178,8 @@ def test_add_spool_required(random_filament: dict[str, Any]):
|
||||
"used_length": pytest.approx(used_length),
|
||||
"remaining_length": pytest.approx(remaining_length),
|
||||
"archived": False,
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
# Clean up
|
||||
httpx.delete(f"{URL}/api/v1/spool/{spool['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 spool_lists_equal(a: Iterable[dict[str, Any]], b: Iterable[dict[str, Any]]) -> bool:
|
||||
"""Compare two lists of spools where the order of the spools is not guaranteed."""
|
||||
return sorted(a, key=lambda x: x["id"]) == sorted(b, key=lambda x: x["id"])
|
||||
|
||||
|
||||
@dataclass
|
||||
class Fixture:
|
||||
spools: list[dict[str, Any]]
|
||||
@@ -101,7 +98,10 @@ def test_find_all_spools(spools: Fixture):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(spools_result, (spools.spools[0], spools.spools[1], spools.spools[3], spools.spools[4]))
|
||||
assert_lists_compatible(
|
||||
spools_result,
|
||||
(spools.spools[0], spools.spools[1], spools.spools[3], spools.spools[4]),
|
||||
)
|
||||
|
||||
|
||||
def test_find_all_spools_including_archived(spools: Fixture):
|
||||
@@ -111,7 +111,7 @@ def test_find_all_spools_including_archived(spools: Fixture):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(
|
||||
assert_lists_compatible(
|
||||
spools_result,
|
||||
(
|
||||
spools.spools[0],
|
||||
@@ -272,7 +272,7 @@ def test_find_spools_by_filament_name(spools: Fixture, field_name: str):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(spools_result, (spools.spools[0], spools.spools[1]))
|
||||
assert_lists_compatible(spools_result, (spools.spools[0], spools.spools[1]))
|
||||
|
||||
|
||||
def test_find_spools_by_empty_filament_name(spools: Fixture):
|
||||
@@ -285,7 +285,7 @@ def test_find_spools_by_empty_filament_name(spools: Fixture):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(spools_result, (spools.spools[3], spools.spools[4]))
|
||||
assert_lists_compatible(spools_result, (spools.spools[3], spools.spools[4]))
|
||||
|
||||
|
||||
@pytest.mark.parametrize("field_name", ["filament_id", "filament.id"])
|
||||
@@ -299,7 +299,7 @@ def test_find_spools_by_filament_id(spools: Fixture, field_name: str):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(spools_result, (spools.spools[0], spools.spools[1]))
|
||||
assert_lists_compatible(spools_result, (spools.spools[0], spools.spools[1]))
|
||||
|
||||
|
||||
def test_find_spools_by_multiple_filament_ids(spools: Fixture):
|
||||
@@ -315,7 +315,7 @@ def test_find_spools_by_multiple_filament_ids(spools: Fixture):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(spools_result, (spools.spools[0], spools.spools[1], spools.spools[3]))
|
||||
assert_lists_compatible(spools_result, (spools.spools[0], spools.spools[1], spools.spools[3]))
|
||||
|
||||
|
||||
@pytest.mark.parametrize("field_name", ["filament_material", "filament.material"])
|
||||
@@ -329,7 +329,7 @@ def test_find_spools_by_filament_material(spools: Fixture, field_name: str):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(spools_result, (spools.spools[0], spools.spools[1]))
|
||||
assert_lists_compatible(spools_result, (spools.spools[0], spools.spools[1]))
|
||||
|
||||
|
||||
def test_find_spools_by_empty_filament_material(spools: Fixture):
|
||||
@@ -342,7 +342,7 @@ def test_find_spools_by_empty_filament_material(spools: Fixture):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(spools_result, (spools.spools[3], spools.spools[4]))
|
||||
assert_lists_compatible(spools_result, (spools.spools[3], spools.spools[4]))
|
||||
|
||||
|
||||
@pytest.mark.parametrize("field_name", ["vendor_name", "filament.vendor.name"])
|
||||
@@ -356,7 +356,7 @@ def test_find_spools_by_filament_vendor_name(spools: Fixture, field_name: str):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(spools_result, (spools.spools[0], spools.spools[1]))
|
||||
assert_lists_compatible(spools_result, (spools.spools[0], spools.spools[1]))
|
||||
|
||||
|
||||
def test_find_spools_by_empty_filament_vendor_name(spools: Fixture):
|
||||
@@ -383,7 +383,7 @@ def test_find_spools_by_filament_vendor_id(spools: Fixture, field_name: str):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(spools_result, (spools.spools[0], spools.spools[1]))
|
||||
assert_lists_compatible(spools_result, (spools.spools[0], spools.spools[1]))
|
||||
|
||||
|
||||
def test_find_spools_by_multiple_vendor_ids(spools: Fixture):
|
||||
@@ -403,7 +403,10 @@ def test_find_spools_by_multiple_vendor_ids(spools: Fixture):
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert len(spools_result) == 4
|
||||
assert spool_lists_equal(spools_result, (spools.spools[0], spools.spools[1], spools.spools[2], spools.spools[4]))
|
||||
assert_lists_compatible(
|
||||
spools_result,
|
||||
(spools.spools[0], spools.spools[1], spools.spools[2], spools.spools[4]),
|
||||
)
|
||||
|
||||
|
||||
def test_find_spools_by_empty_filament_vendor_id(spools: Fixture):
|
||||
@@ -442,7 +445,7 @@ def test_find_spools_by_empty_location(spools: Fixture):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(spools_result, (spools.spools[3], spools.spools[4]))
|
||||
assert_lists_compatible(spools_result, (spools.spools[3], spools.spools[4]))
|
||||
|
||||
|
||||
def test_find_spools_by_empty_and_filled_location(spools: Fixture):
|
||||
@@ -455,7 +458,7 @@ def test_find_spools_by_empty_and_filled_location(spools: Fixture):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(spools_result, (spools.spools[0], spools.spools[3], spools.spools[4]))
|
||||
assert_lists_compatible(spools_result, (spools.spools[0], spools.spools[3], spools.spools[4]))
|
||||
|
||||
|
||||
def test_find_spools_by_lot_nr(spools: Fixture):
|
||||
@@ -481,4 +484,4 @@ def test_find_spools_by_empty_lot_nr(spools: Fixture):
|
||||
|
||||
# Verify
|
||||
spools_result = result.json()
|
||||
assert spool_lists_equal(spools_result, (spools.spools[3], spools.spools[4]))
|
||||
assert_lists_compatible(spools_result, (spools.spools[3], spools.spools[4]))
|
||||
|
||||
16
tests_integration/tests/vendor/test_add.py
vendored
16
tests_integration/tests/vendor/test_add.py
vendored
@@ -4,6 +4,8 @@ from datetime import datetime, timezone
|
||||
|
||||
import httpx
|
||||
|
||||
from ..conftest import assert_dicts_compatible
|
||||
|
||||
URL = "http://spoolman:8000"
|
||||
|
||||
|
||||
@@ -20,12 +22,15 @@ def test_add_vendor():
|
||||
|
||||
# Verify
|
||||
vendor = result.json()
|
||||
assert vendor == {
|
||||
assert_dicts_compatible(
|
||||
vendor,
|
||||
{
|
||||
"id": vendor["id"],
|
||||
"registered": vendor["registered"],
|
||||
"name": name,
|
||||
"comment": comment,
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
# Verify that registered happened almost now (within 1 minute)
|
||||
diff = abs((datetime.now(tz=timezone.utc) - datetime.fromisoformat(vendor["registered"])).total_seconds())
|
||||
@@ -47,11 +52,14 @@ def test_add_vendor_required():
|
||||
|
||||
# Verify
|
||||
vendor = result.json()
|
||||
assert vendor == {
|
||||
assert_dicts_compatible(
|
||||
vendor,
|
||||
{
|
||||
"id": vendor["id"],
|
||||
"registered": vendor["registered"],
|
||||
"name": name,
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
# Clean up
|
||||
httpx.delete(f"{URL}/api/v1/vendor/{vendor['id']}").raise_for_status()
|
||||
|
||||
9
tests_integration/tests/vendor/test_find.py
vendored
9
tests_integration/tests/vendor/test_find.py
vendored
@@ -7,14 +7,11 @@ from typing import Any
|
||||
import httpx
|
||||
import pytest
|
||||
|
||||
from ..conftest import assert_lists_compatible
|
||||
|
||||
URL = "http://spoolman:8000"
|
||||
|
||||
|
||||
def vendor_lists_equal(a: Iterable[dict[str, Any]], b: Iterable[dict[str, Any]]) -> bool:
|
||||
"""Compare two lists of vendors where the order of the vendors is not guaranteed."""
|
||||
return sorted(a, key=lambda x: x["id"]) == sorted(b, key=lambda x: x["id"])
|
||||
|
||||
|
||||
@dataclass
|
||||
class Fixture:
|
||||
vendors: list[dict[str, Any]]
|
||||
@@ -62,7 +59,7 @@ def test_find_all_vendors(vendors: Fixture):
|
||||
|
||||
# Verify
|
||||
vendors_result = result.json()
|
||||
assert vendor_lists_equal(vendors_result, vendors.vendors)
|
||||
assert_lists_compatible(vendors_result, vendors.vendors)
|
||||
|
||||
|
||||
def test_find_all_vendors_sort_asc(vendors: Fixture):
|
||||
|
||||
Reference in New Issue
Block a user