bambuddy/backend/tests/integration
maziggy 41ad1d65c7 feat(skip-objects): select items directly on the build plate
Pairs the top-down plate preview with the slicer's per-object pick mask
(Metadata/pick_N.png), whose pixel colours encode the same identify_id the
firmware's skip command takes, so a click resolves to a real object rather
than an inferred bounding box. Several objects can be selected before one
confirmation; selected and already-skipped items are highlighted on the
plate; the checklist stays available when no mask exists.

view=pick serves only the active plate's mask and 404s otherwise, unlike
every other view. A render returned in a mask's place would be decoded as
object IDs — dark pixels yield small integers that collide with real ones —
and a click would then skip an arbitrary object, mid-print, irreversibly.
The 404 is what tells the UI to fall back to the checklist.

Click mapping goes through the contained rect, since the canvas paints at
mask resolution under object-contain; clicks on a letterbox bar are rejected
rather than clamped onto whichever object touches the border. Confirming
names the object when one is selected and counts them when several are,
which is what plates of identically-named clones need.

No printer-control command path was added or changed; the layer, permission
and existing skip-command guards are untouched.
2026-07-22 12:32:14 +02:00
..
__init__.py Add comprehensive automated testing infrastructure 2025-12-11 10:03:40 +01:00
test_advanced_auth_api.py feat: Two-Factor Authentication (TOTP, Email OTP) and OIDC/SSO – full implementation with admin UI (#933) 2026-04-13 13:24:28 +02:00
test_ams_history_api.py - Add interactive API Browser to Settings > API Keys 2026-01-02 15:00:21 +01:00
test_ams_labels_api.py Add tests, docs, and lint fix for AMS Info Card feature (#570) 2026-03-05 08:46:39 +01:00
test_api_key_cloud_access.py fix(api-keys): slice + slicer-presets routes resolve cloud token via key owner (#1182 follow-up) 2026-05-02 08:10:47 +02:00
test_archive_purge_api.py fix(archives): bulk and auto purge now honour the soft / hard delete choice from #1343 (#1390 follow-up) 2026-05-17 10:54:28 +02:00
test_archives_api.py Resolved conflicts 2026-06-14 10:52:41 +02:00
test_auth_api.py fix(auth): expose /api/v1/system/appliance through the auth middleware allowlist 2026-06-25 15:19:28 +02:00
test_auth_apikey_rbac.py fix(auth): let API keys manage projects via new can_manage_projects scope (#1893) 2026-07-05 09:58:16 +02:00
test_available_filaments.py Show filament subtypes in all mapping dropdowns (#624) 2026-03-06 08:35:06 +01:00
test_background_dispatch_api.py feat: Unify print dispatch through the scheduler (#1625) 2026-06-26 12:31:48 +02:00
test_camera_api.py fix(camera): release DB connection before streaming, not after (#2572) 2026-07-16 08:38:42 +02:00
test_camwall_api.py feat(camwall): serve the Cam Wall at /camwall, and on a token-authenticated kiosk 2026-07-11 13:38:15 +02:00
test_client_ip.py feat: Two-Factor Authentication (TOTP, Email OTP) and OIDC/SSO – full implementation with admin UI (#933) 2026-04-13 13:24:28 +02:00
test_cloud_auth.py fix(cloud): stop reporting an expired Bambu Cloud sign-in as connected (issue #2562) 2026-07-14 11:29:56 +02:00
test_cloud_token_auth_migration.py fix(cloud): log expected preset misses at DEBUG, keep real faults at WARNING 2026-07-10 08:24:20 +02:00
test_color_catalog_extras.py fix(queue): extend Charcoal-style label fix to Specific-Printer panel (#1718 round 3) 2026-06-11 14:49:52 +02:00
test_color_map_api.py refactor(colors): color_catalog is the single source of truth (#857) 2026-04-11 12:10:45 +02:00
test_cost_statistics.py fix(cost): top-up untracked filament at default rate so multi-color 2026-05-15 15:43:37 +02:00
test_discovery_api.py Auto-detect subnet for printer discovery 2026-02-08 12:17:20 +01:00
test_drying_screen_only.py fix(drying): P1 AMS drying is screen-only — stop offering it (#2533) 2026-07-11 09:33:52 +02:00
test_endpoint_auth.py refactor(api): rename /filaments/ to /filament-catalog/ for clarity (#427) 2026-02-18 11:58:17 +01:00
test_external_folders_api.py Fix external-folder scan deleting README.md records; index markdown (#2520) 2026-07-09 07:20:55 +02:00
test_external_links_api.py - Add interactive API Browser to Settings > API Keys 2026-01-02 15:00:21 +01:00
test_filaments_api.py refactor(api): rename /filaments/ to /filament-catalog/ for clarity (#427) 2026-02-18 11:58:17 +01:00
test_gcode_viewer.py fix(docker): copy gcode_viewer assets into the production image (issue #1218) 2026-05-06 14:23:39 +02:00
test_github_backup_api.py security(github-backup): refuse to save against a non-private repository 2026-05-17 15:30:05 +02:00
test_groups_api.py feat(auth): permission-delegated Settings + Group editor routes; fix group-edit cache stale-read (#1083) 2026-04-22 19:10:18 +02:00
test_inventory_assign.py fix(inventory): broadcast assignment change when auto-unlink clears a stale slot (#2575) 2026-07-17 07:26:24 +02:00
test_inventory_bulk.py feat(inventory): batch / mass edit on the Filament tab (#1795) 2026-06-23 11:34:15 +02:00
test_inventory_csv.py feat(inventory): CSV import/export for the inventory page (#1576) (#1659) 2026-06-08 09:30:16 +02:00
test_inventory_from_slot_no_tag.py fix(inventory): stop popping the unknown-tag modal for slots with no RFID 2026-06-25 09:57:15 +02:00
test_labels.py feat(labels): scannable QR on 203 dpi thermal printers + monochrome mode (#1870) 2026-07-07 10:31:19 +02:00
test_ldap_group_sync.py fix(auth): preserve manually-assigned groups across LDAP logins (#1292) 2026-05-12 16:12:58 +02:00
test_ldap_provision.py chore(tests): allowlist GitGuardian-flagged test fixtures in test_ldap_provision 2026-05-15 12:15:39 +02:00
test_library_api.py fix(auth): API keys with Manage Library can curate library files (#1832) 2026-06-27 09:47:35 +02:00
test_library_slice_api.py feat(slicer): add "slice as designed" mode honouring a 3MF's embedded settings (#2611) 2026-07-20 10:50:15 +02:00
test_library_tags_api.py feat(file-manager): user-authored tags for cross-cutting filtering (#1268) 2026-06-22 12:27:58 +02:00
test_library_trash_api.py Tool: Bandit B108 2026-05-11 13:30:27 +02:00
test_local_login_gate.py feat(auth): SSO autologin + disable local username/password login (#1589) 2026-06-25 14:54:27 +02:00
test_locations_api.py feat(inventory): structured storage locations catalog (#1505) 2026-06-17 11:33:23 +02:00
test_long_lived_tokens_api.py feat(#1108): long-lived camera-stream tokens + fix(#1089) audit-pass tweaks 2026-04-25 10:44:37 +02:00
test_maintenance_api.py fix(maintenance): #1596 persist wiki_url on Custom Type create + correct 2026-06-02 14:58:10 +02:00
test_makerworld_apikey_auth.py fix(cloud): stop reporting an expired Bambu Cloud sign-in as connected (issue #2562) 2026-07-14 11:29:56 +02:00
test_metrics_api.py Add Prometheus metrics endpoint for external monitoring (#161) 2026-01-27 16:49:28 +01:00
test_mfa_api.py fix(oidc): #1569 populate User.email from standard 'email' claim when email_claim is preferred_username 2026-06-02 10:23:21 +02:00
test_notifications_api.py Add notification for no spool assigned for active trays, improve usage tracker logic in edge cases (#789) 2026-03-24 11:31:32 +01:00
test_obico_api.py fix(obico): revert POST-bytes approach — Obico /p/ is GET-only 2026-04-18 08:50:46 +02:00
test_oidc_icon_api.py Post work PR #1333 2026-05-15 08:57:03 +02:00
test_oidc_icon_blob_roundtrip.py fix(backup): preserve NOT NULL/DEFAULT/FK/UNIQUE in Postgres→SQLite backup (#2526) 2026-07-09 09:02:34 +02:00
test_oidc_icon_deferred_load.py feat(auth): proxy OIDC provider icons server-side (#1333) (#1342) 2026-05-15 08:50:37 +02:00
test_oidc_relogin.py fix(auth): cleanup orphan OIDC/MFA rows when user is deleted (#1285) (#1295) 2026-05-13 13:23:21 +02:00
test_orca_cloud_device.py feat(orca-cloud): pair via RFC 8628 device flow, replacing the paste-based sign-in 2026-07-17 08:16:35 +02:00
test_overlay_status_api.py fix(overlay): authenticate the OBS overlay with a token when login is enabled (#2613) 2026-07-20 13:04:35 +02:00
test_ownership_permissions.py Security hardening (maziggy/bambuddy-security #5) 2026-07-16 07:50:51 +02:00
test_pending_upload_display_name.py Tool: Bandit B108 2026-05-11 13:30:27 +02:00
test_pipeline_runs_api.py fix(permissions): self-heal Administrators to ALL_PERMISSIONS on upgrade + Pipelines runs dashboard polish 2026-06-28 11:18:18 +02:00
test_print_lifecycle.py fix(scheduler): raise plate-clear gate for every terminal status (#1171) 2026-05-01 08:13:52 +02:00
test_print_queue_api.py feat(print-options): add "Auto" state to bed levelling, flow & nozzle-offset calibration 2026-07-20 17:55:56 +02:00
test_printers_api.py feat(skip-objects): select items directly on the build plate 2026-07-22 12:32:14 +02:00
test_projects_api.py fix(projects): carry tags, due date and priority in the list payload (#2536) 2026-07-13 08:59:36 +02:00
test_queue_start_user_attribution.py test(security-fixtures): nosec B104/B108 on new 0.2.4.6 test code 2026-06-09 13:32:15 +02:00
test_read_permission_backfill_migration.py fix(permissions): self-heal Administrators to ALL_PERMISSIONS on upgrade + Pipelines runs dashboard polish 2026-06-28 11:18:18 +02:00
test_security.py fix(security): GHSA-6mf4-q26m-47pv — fail-closed on auth-probe DB errors (CVSS 9.8) 2026-05-30 13:49:09 +02:00
test_security_headers.py fix(csp): nonce-based script-src so Cloudflare-injected scripts pass (#1460 follow-up) 2026-05-23 12:28:58 +02:00
test_session_policy.py feat(auth): admin-configurable session lifetime ceiling (#1706) 2026-06-16 12:00:27 +02:00
test_settings_api.py feat(print-options): add "Auto" state to bed levelling, flow & nozzle-offset calibration 2026-07-20 17:55:56 +02:00
test_settings_api_key_scrubbing.py fix(spoolbuddy): lower /update permission to INVENTORY_UPDATE so kiosk's own Settings -> Update button works 2026-05-08 14:28:41 +02:00
test_settings_electricity_price.py fix(api-keys): expose narrowly-scoped "Update electricity price" toggle (#1356) 2026-05-15 13:12:41 +02:00
test_settings_ui_preferences.py feat(humidity): per-filament humidity threshold for auto-drying + alarms (#1605) 2026-06-21 11:55:37 +02:00
test_sjf_scheduling.py chore(tests): suppress B108 on dummy /tmp test fixtures 2026-04-19 09:48:10 +02:00
test_slicer_pipelines_api.py feat(slicer): Slicer Pipelines — save & reuse a preset bundle in one click (#1425 PR A) 2026-06-27 13:56:18 +02:00
test_smart_plugs_api.py Add REST/Webhook smart plug type (#472) 2026-04-01 10:06:01 +02:00
test_sponsor_prompt_api.py feat(sponsor-prompt): in-app toast at earned milestones 2026-06-20 15:50:58 +02:00
test_spool_by_tag_lookup.py feat(inventory): by-tag spool lookup, readable with Manage-Inventory keys (#1663) (#1700) 2026-06-22 10:14:31 +02:00
test_spool_reset_usage.py refactor(inventory): rename /reset-usage to /reset-consumed-counter to match what it actually does (issue #1644) 2026-06-05 09:22:05 +02:00
test_spoolbuddy.py fix(spoolbuddy): route weight sync by inventory mode exclusively (#1530) 2026-05-26 10:36:37 +02:00
test_spoolbuddy_spoolman_nfc.py Feature/spoolman inventory UI (#1241) 2026-05-08 11:52:42 +02:00
test_spoolman_ams_sync.py Feature/spoolman inventory UI (#1241) 2026-05-08 11:52:42 +02:00
test_spoolman_api.py fix(spoolman): decide spool assignability from the slot-assignment ledger, not extra.tag (#1122) 2026-05-21 09:33:47 +02:00
test_spoolman_filament_patch.py Feature/spoolman inventory UI (#1241) 2026-05-08 11:52:42 +02:00
test_spoolman_inventory_api.py feat(inventory): structured storage locations catalog (#1505) 2026-06-17 11:33:23 +02:00
test_spoolman_inventory_bulk.py feat(inventory): batch / mass edit on the Filament tab (#1795) 2026-06-23 11:34:15 +02:00
test_spoolman_k_profiles.py feat(inventory): structured storage locations catalog (#1505) 2026-06-17 11:33:23 +02:00
test_spoolman_slot_assignment_mqtt.py feat(inventory): structured storage locations catalog (#1505) 2026-06-17 11:33:23 +02:00
test_spoolman_slot_assignments.py fix(spool-assignments): union both assignment tables in the missing-spool check + symmetric mode-switch clear (#1473) 2026-05-21 09:15:10 +02:00
test_spoolman_slot_concurrency.py fix(spoolman): clear stale fallback-tag links on assign + link, prefer slot-assignment over tag-link in UI (#1457) 2026-05-20 11:00:54 +02:00
test_spoolman_tracking_slot_fallback.py fix(spoolman): per-print weight tracker falls back to local slot-assignment table for tag-less spools (#1459) 2026-05-20 11:16:56 +02:00
test_static_html_cache_headers.py fix(tests): make SPA cache-header tests work without a built frontend 2026-05-05 14:35:08 +02:00
test_stats_reconciled_duration_2592.py fix(stats): don't bank the disconnect gap as print time on reconnect (#2592) 2026-07-18 09:58:21 +02:00
test_support_api.py feat(system): log-health scanner + Add/Edit-Printer setup pre-flight 2026-05-22 16:31:16 +02:00
test_system_api.py feat(system): NTP-gate state on /api/v1/system/appliance 2026-06-22 14:23:30 +02:00
test_tailscale_api.py feat(virtual-printer): add Tailscale opt-out toggle (closes #701 point 3) (#1070) 2026-04-24 09:59:09 +02:00
test_timelapse_scan_session.py fix(db): stop holding pooled connections across FTP/camera/SMTP work (#2572) 2026-07-18 09:10:08 +02:00
test_trace_middleware.py feat(observability): trace ID column on every log line + X-Trace-Id header 2026-04-26 10:01:17 +02:00
test_updates_api.py fix(updates): switch Windows installer installs to release-asset update flow 2026-06-21 10:25:57 +02:00
test_user_notifications_api.py Post work PR #693 2026-03-17 12:24:36 +01:00
test_users_auth_cleanup.py fix(auth): cleanup orphan OIDC/MFA rows when user is deleted (#1285) (#1295) 2026-05-13 13:23:21 +02:00
test_users_groups_privilege_escalation.py test(users/groups): generate privilege-escalation test password at runtime 2026-06-12 13:27:17 +02:00
test_virtual_printer_api.py feat(gcode-injection): per-VP opt-in auto-print injection toggle (#1516) (#1656) 2026-06-19 11:29:07 +02:00
test_webhook_printer_status.py fix(webhook): #1584 PrinterState dataclass attribute access in status / stop / cancel 2026-06-02 12:57:51 +02:00
test_webhook_start_print.py feat(print-options): add "Auto" state to bed levelling, flow & nozzle-offset calibration 2026-07-20 17:55:56 +02:00