test_filament_requirements_plate_nozzle.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. """A plate's filament requirements name the nozzle that plate prints each slot on."""
  2. from __future__ import annotations
  3. import json
  4. import zipfile
  5. from unittest.mock import patch
  6. import pytest
  7. from httpx import AsyncClient
  8. pytestmark = [pytest.mark.asyncio, pytest.mark.integration]
  9. # Slot 1 prints on group 0 on plate 1 and on group 1 on plate 2.
  10. SLICE_INFO = """<?xml version="1.0" encoding="UTF-8"?>
  11. <config>
  12. <plate>
  13. <metadata key="index" value="1"/>
  14. <filament id="1" type="PLA" color="#FF0000" used_g="5.0" group_id="0"/>
  15. </plate>
  16. <plate>
  17. <metadata key="index" value="2"/>
  18. <filament id="1" type="PLA" color="#FF0000" used_g="7.0" group_id="1"/>
  19. </plate>
  20. </config>"""
  21. async def test_each_plate_gets_its_own_nozzle(async_client: AsyncClient, printer_factory, archive_factory, tmp_path):
  22. from backend.app.core.config import settings
  23. path = tmp_path / "two-plates.3mf"
  24. with zipfile.ZipFile(path, "w") as zf:
  25. zf.writestr("Metadata/slice_info.config", SLICE_INFO)
  26. zf.writestr("Metadata/project_settings.config", json.dumps({"physical_extruder_map": ["1", "0"]}))
  27. printer = await printer_factory(model="H2D")
  28. archive = await archive_factory(printer.id, file_path="two-plates.3mf")
  29. with patch.object(settings, "base_dir", tmp_path):
  30. nozzles = {}
  31. for plate in (1, 2):
  32. response = await async_client.get(
  33. f"/api/v1/archives/{archive.id}/filament-requirements", params={"plate_id": plate}
  34. )
  35. assert response.status_code == 200, response.text
  36. nozzles[plate] = [f["nozzle_id"] for f in response.json()["filaments"]]
  37. assert nozzles == {1: [1], 2: [0]}