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:
Donkie
2024-01-16 21:21:49 +01:00
parent 7972f4d401
commit f8cc9f7eda
8 changed files with 183 additions and 151 deletions

View File

@@ -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()

View File

@@ -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]],
)

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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]))

View File

@@ -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()

View File

@@ -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):