Wire measuring tools into identifiers and global search
The measuringtools plugin was missing from two cross-cutting surfaces: the asset-identifier matrix (no measuring_tool column or per-type keys - gauge lab reference is their primary identifier) and global search (results fell to a generic URL and gaugelabreference was never searched). Measuring tools now have identifier toggles, gated gauge-lab and maintenance-reference fields on their form and detail, a search domain toggle, gage-tag search, and proper labels, routes, and filter chips in search results. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -240,6 +240,74 @@ def test_list_filter_by_calibrationstatus(client, auth_headers):
|
||||
assert all(r['measuringtool']['calibrationstatus'] == 'overdue' for r in rows)
|
||||
|
||||
|
||||
# -- Maintenance reference identifier -----------------------------------------
|
||||
|
||||
def test_maintenancereference_roundtrip(client, auth_headers):
|
||||
"""Maintenance reference persists on create and update."""
|
||||
created = client.post('/api/measuringtools', headers=auth_headers, json={
|
||||
'assetnumber': 'MT-MNT-1', 'statusid': _status_id(client),
|
||||
'maintenancereference': 'MNT-9',
|
||||
})
|
||||
assert created.status_code == 201, created.get_json()
|
||||
assert created.get_json()['data']['maintenancereference'] == 'MNT-9'
|
||||
tool_id = created.get_json()['data']['measuringtool']['measuringtoolid']
|
||||
|
||||
updated = client.put(f'/api/measuringtools/{tool_id}', headers=auth_headers,
|
||||
json={'maintenancereference': 'MNT-10'})
|
||||
assert updated.status_code == 200
|
||||
assert updated.get_json()['data']['maintenancereference'] == 'MNT-10'
|
||||
|
||||
|
||||
# -- Global search ------------------------------------------------------------
|
||||
|
||||
def _mt_search_hits(client, auth_headers, term):
|
||||
resp = client.get(f'/api/search?q={term}', headers=auth_headers)
|
||||
assert resp.status_code == 200, resp.get_json()
|
||||
return [r for r in resp.get_json()['data']['results']
|
||||
if r.get('type') == 'measuring_tool']
|
||||
|
||||
|
||||
def test_search_finds_tool_by_assetnumber(mt_app, client, auth_headers, monkeypatch):
|
||||
"""A measuring tool appears in global search by asset number, routed right."""
|
||||
client.post('/api/measuringtools', headers=auth_headers, json={
|
||||
'assetnumber': 'MT-SEARCH-AN', 'statusid': _status_id(client)})
|
||||
pm = mt_app.extensions['plugin_manager']
|
||||
monkeypatch.setattr(pm.registry, 'is_enabled', lambda name: True)
|
||||
hits = _mt_search_hits(client, auth_headers, 'MT-SEARCH-AN')
|
||||
assert hits
|
||||
assert hits[0]['url'].startswith('/measuringtools/')
|
||||
|
||||
|
||||
def test_search_finds_tool_by_gaugelabreference(mt_app, client, auth_headers, monkeypatch):
|
||||
"""A gage-tag lookup by gaugelabreference finds the tool."""
|
||||
client.post('/api/measuringtools', headers=auth_headers, json={
|
||||
'assetnumber': 'MT-SEARCH-GL', 'statusid': _status_id(client),
|
||||
'gaugelabreference': 'GLREF-778'})
|
||||
pm = mt_app.extensions['plugin_manager']
|
||||
monkeypatch.setattr(pm.registry, 'is_enabled', lambda name: True)
|
||||
hits = _mt_search_hits(client, auth_headers, 'GLREF-778')
|
||||
assert hits
|
||||
assert hits[0]['url'].startswith('/measuringtools/')
|
||||
|
||||
|
||||
def test_search_excludes_tools_when_domain_disabled(mt_app, client, auth_headers, monkeypatch):
|
||||
"""search_measuring_tool_enabled=false hides measuring tools from search."""
|
||||
from shopdb.core.models import Setting
|
||||
client.post('/api/measuringtools', headers=auth_headers, json={
|
||||
'assetnumber': 'MT-SEARCH-OFF', 'statusid': _status_id(client),
|
||||
'gaugelabreference': 'GLREF-OFF-1'})
|
||||
pm = mt_app.extensions['plugin_manager']
|
||||
monkeypatch.setattr(pm.registry, 'is_enabled', lambda name: True)
|
||||
Setting.set('search_measuring_tool_enabled', False, valuetype='boolean',
|
||||
category='search')
|
||||
try:
|
||||
assert _mt_search_hits(client, auth_headers, 'MT-SEARCH-OFF') == []
|
||||
assert _mt_search_hits(client, auth_headers, 'GLREF-OFF-1') == []
|
||||
finally:
|
||||
Setting.set('search_measuring_tool_enabled', True, valuetype='boolean',
|
||||
category='search')
|
||||
|
||||
|
||||
# -- Report shape -------------------------------------------------------------
|
||||
|
||||
def test_calibration_report_shape(client, auth_headers):
|
||||
|
||||
Reference in New Issue
Block a user