diff --git a/tests_integration/tests/filament/test_add.py b/tests_integration/tests/filament/test_add.py index 13d3ff5..d5d1213 100644 --- a/tests_integration/tests/filament/test_add.py +++ b/tests_integration/tests/filament/test_add.py @@ -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() diff --git a/tests_integration/tests/filament/test_find.py b/tests_integration/tests/filament/test_find.py index a00c985..a1083ea 100644 --- a/tests_integration/tests/filament/test_find.py +++ b/tests_integration/tests/filament/test_find.py @@ -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]], ) diff --git a/tests_integration/tests/filament/test_get.py b/tests_integration/tests/filament/test_get.py index 604fc3c..c2c8261 100644 --- a/tests_integration/tests/filament/test_get.py +++ b/tests_integration/tests/filament/test_get.py @@ -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() diff --git a/tests_integration/tests/filament/test_update.py b/tests_integration/tests/filament/test_update.py index a1cff92..af15bbb 100644 --- a/tests_integration/tests/filament/test_update.py +++ b/tests_integration/tests/filament/test_update.py @@ -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() diff --git a/tests_integration/tests/spool/test_add.py b/tests_integration/tests/spool/test_add.py index 10ed187..edd81de 100644 --- a/tests_integration/tests/spool/test_add.py +++ b/tests_integration/tests/spool/test_add.py @@ -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,22 +50,25 @@ def test_add_spool_remaining_weight(random_filament: dict[str, Any]): ) spool = result.json() - assert spool == { - "id": spool["id"], - "registered": spool["registered"], - "first_used": "2023-01-02T11:00:00Z", - "last_used": "2023-01-02T11:00:00Z", - "filament": random_filament, - "remaining_weight": pytest.approx(remaining_weight), - "used_weight": pytest.approx(used_weight), - "remaining_length": pytest.approx(remaining_length), - "used_length": pytest.approx(used_length), - "location": location, - "lot_nr": lot_nr, - "comment": comment, - "archived": archived, - "price": price, - } + assert_dicts_compatible( + spool, + { + "id": spool["id"], + "registered": spool["registered"], + "first_used": "2023-01-02T11:00:00Z", + "last_used": "2023-01-02T11:00:00Z", + "filament": random_filament, + "remaining_weight": pytest.approx(remaining_weight), + "used_weight": pytest.approx(used_weight), + "remaining_length": pytest.approx(remaining_length), + "used_length": pytest.approx(used_length), + "location": location, + "lot_nr": lot_nr, + "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,21 +117,24 @@ def test_add_spool_used_weight(random_filament: dict[str, Any]): ) spool = result.json() - assert spool == { - "id": spool["id"], - "registered": spool["registered"], - "first_used": first_used, - "last_used": last_used, - "filament": random_filament, - "remaining_weight": pytest.approx(remaining_weight), - "used_weight": pytest.approx(used_weight), - "remaining_length": pytest.approx(remaining_length), - "used_length": pytest.approx(used_length), - "location": location, - "lot_nr": lot_nr, - "comment": comment, - "archived": archived, - } + assert_dicts_compatible( + spool, + { + "id": spool["id"], + "registered": spool["registered"], + "first_used": first_used, + "last_used": last_used, + "filament": random_filament, + "remaining_weight": pytest.approx(remaining_weight), + "used_weight": pytest.approx(used_weight), + "remaining_length": pytest.approx(remaining_length), + "used_length": pytest.approx(used_length), + "location": location, + "lot_nr": lot_nr, + "comment": comment, + "archived": archived, + }, + ) # Clean up httpx.delete(f"{URL}/api/v1/spool/{spool['id']}").raise_for_status() @@ -161,16 +167,19 @@ def test_add_spool_required(random_filament: dict[str, Any]): ) spool = result.json() - assert spool == { - "id": spool["id"], - "registered": spool["registered"], - "filament": random_filament, - "used_weight": pytest.approx(used_weight), - "remaining_weight": pytest.approx(remaining_weight), - "used_length": pytest.approx(used_length), - "remaining_length": pytest.approx(remaining_length), - "archived": False, - } + assert_dicts_compatible( + spool, + { + "id": spool["id"], + "registered": spool["registered"], + "filament": random_filament, + "used_weight": pytest.approx(used_weight), + "remaining_weight": pytest.approx(remaining_weight), + "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() diff --git a/tests_integration/tests/spool/test_find.py b/tests_integration/tests/spool/test_find.py index 4368695..0ba8b50 100644 --- a/tests_integration/tests/spool/test_find.py +++ b/tests_integration/tests/spool/test_find.py @@ -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])) diff --git a/tests_integration/tests/vendor/test_add.py b/tests_integration/tests/vendor/test_add.py index 547a60e..aceff76 100644 --- a/tests_integration/tests/vendor/test_add.py +++ b/tests_integration/tests/vendor/test_add.py @@ -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 == { - "id": vendor["id"], - "registered": vendor["registered"], - "name": name, - "comment": comment, - } + 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 == { - "id": vendor["id"], - "registered": vendor["registered"], - "name": name, - } + 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() diff --git a/tests_integration/tests/vendor/test_find.py b/tests_integration/tests/vendor/test_find.py index 49dff8a..f9e8cad 100644 --- a/tests_integration/tests/vendor/test_find.py +++ b/tests_integration/tests/vendor/test_find.py @@ -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):