Archive v1.0 MVP: 7 phases, 13 plans, 27/27 requirements. - Archive roadmap to milestones/v1.0-ROADMAP.md - Archive requirements to milestones/v1.0-REQUIREMENTS.md - Move milestone audit into milestones/ - Create MILESTONES.md with v1.0 entry - Evolve PROJECT.md: move shipped requirements to Validated, update Context with stack/LOC, log Key Decisions with outcomes - Collapse ROADMAP.md to one-line milestone summary - Update STATE.md to shipped status - Back-fill stale requirements-completed frontmatter on 02-01, 04-01, 05-01, 06-01 SUMMARY.md files Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
"""End-to-end guard: upload a driver through the HTTP endpoint, then export
|
|
a NinjaRMM package from the resulting Driver record. This prevents regressions
|
|
where DriverStore save path and packages.py driver lookup path diverge."""
|
|
import io
|
|
import json
|
|
import zipfile
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture
|
|
def driver_zip_bytes():
|
|
buf = io.BytesIO()
|
|
with zipfile.ZipFile(buf, "w", compression=zipfile.ZIP_DEFLATED) as zf:
|
|
zf.writestr("printer.inf", "[Version]\nSignature=$WINDOWS NT$\n")
|
|
zf.writestr("printer.cat", "FAKE_CAT")
|
|
return buf.getvalue()
|
|
|
|
|
|
def test_upload_then_ninja_export_finds_driver_on_disk(
|
|
client, tmp_data_dir, driver_zip_bytes
|
|
):
|
|
from imptune.db.models import Client, Driver, Printer
|
|
|
|
upload_resp = client.post(
|
|
"/drivers/upload",
|
|
files={"file": ("printer_driver.zip", driver_zip_bytes, "application/zip")},
|
|
)
|
|
assert upload_resp.status_code == 200
|
|
|
|
driver = Driver.select().order_by(Driver.id.desc()).first()
|
|
assert driver is not None
|
|
driver.driver_desc = json.dumps(["HP LaserJet Pro"])
|
|
driver.save()
|
|
|
|
tenant = Client.create(name="Acme Corp")
|
|
printer = Printer.create(
|
|
name="Round Trip Printer",
|
|
ip_address="192.168.1.50",
|
|
port_name="IP_192.168.1.50",
|
|
client=tenant,
|
|
driver=driver,
|
|
)
|
|
|
|
resp = client.get(f"/printers/{printer.id}/packages/ninja")
|
|
assert resp.status_code == 200, resp.text
|
|
assert resp.headers["content-type"] == "application/zip"
|
|
|
|
out = zipfile.ZipFile(io.BytesIO(resp.content))
|
|
names = out.namelist()
|
|
assert any(n.endswith("install.ps1") for n in names)
|
|
assert any("drivers/printer.inf" in n for n in names)
|