add search function

This commit is contained in:
2026-04-19 13:00:11 +02:00
parent 5fdf3f4ab2
commit ea73b0c165
8 changed files with 380 additions and 1 deletions
+145
View File
@@ -562,3 +562,148 @@ def test_broken_image_processing_returns_400_and_keeps_image_fields_empty(client
assert updated_box.image_mime_type is None
assert updated_box.image_width is None
assert updated_box.image_height is None
def test_can_search_box_by_name(client, db_session):
box = Box(name="冬季衣物箱")
db_session.add(box)
db_session.commit()
response = client.get("/search?q=衣物")
assert response.status_code == 200
assert "冬季衣物箱" in response.text
assert "类型:Box" in response.text
def test_can_search_box_by_note(client, db_session):
box = Box(name="普通箱子", note="里面放厨房锅具")
db_session.add(box)
db_session.commit()
response = client.get("/search?q=锅具")
assert response.status_code == 200
assert "普通箱子" in response.text
def test_can_search_item_by_name(client, db_session):
box = Box(name="书房箱")
item = Item(name="电源延长线", box=box, is_container=False)
db_session.add_all([box, item])
db_session.commit()
response = client.get("/search?q=延长线")
assert response.status_code == 200
assert "电源延长线" in response.text
assert "位于箱子:书房箱" in response.text
def test_can_search_item_by_note(client, db_session):
box = Box(name="工具箱")
item = Item(name="杂项", note="放备用螺丝刀", box=box, is_container=False)
db_session.add_all([box, item])
db_session.commit()
response = client.get("/search?q=螺丝刀")
assert response.status_code == 200
assert "杂项" in response.text
def test_can_search_subitem_by_name(client, db_session):
box = Box(name="文件箱")
item = Item(name="文件袋", box=box, is_container=True)
subitem = SubItem(name="护照复印件", parent_item=item)
db_session.add_all([box, item, subitem])
db_session.commit()
response = client.get("/search?q=护照")
assert response.status_code == 200
assert "护照复印件" in response.text
assert "位于物品:文件袋 / 箱子:文件箱" in response.text
def test_can_search_subitem_by_note(client, db_session):
box = Box(name="电子箱")
item = Item(name="配件盒", box=box, is_container=True)
subitem = SubItem(name="接口", note="备用转接头", parent_item=item)
db_session.add_all([box, item, subitem])
db_session.commit()
response = client.get("/search?q=转接头")
assert response.status_code == 200
assert "接口" in response.text
def test_search_result_shows_item_box_info(client, db_session):
box = Box(name="客厅箱")
item = Item(name="相机", box=box, is_container=True)
db_session.add_all([box, item])
db_session.commit()
response = client.get("/search?q=相机")
assert response.status_code == 200
assert "位于箱子:客厅箱" in response.text
assert "容器" in response.text
assert "" in response.text
def test_search_result_shows_subitem_item_and_box_info(client, db_session):
box = Box(name="卧室箱")
item = Item(name="收纳袋", box=box, is_container=True)
subitem = SubItem(name="袜子", parent_item=item)
db_session.add_all([box, item, subitem])
db_session.commit()
response = client.get("/search?q=袜子")
assert response.status_code == 200
assert "位于物品:收纳袋 / 箱子:卧室箱" in response.text
def test_search_page_handles_empty_query(client):
response = client.get("/search")
assert response.status_code == 200
assert "输入关键词后,可以跨 Box、Item、SubItem 进行搜索。" in response.text
def test_search_page_handles_no_results(client):
response = client.get("/search?q=不存在的关键词")
assert response.status_code == 200
assert "没有找到匹配结果。" in response.text
def test_search_result_renders_thumbnail_link_when_image_exists(client, db_session):
box = Box(name="图片箱")
db_session.add(box)
db_session.commit()
client.post(
f"/boxes/{box.id}/update",
data={"name": box.name, "note": "", "room": "", "status": ""},
files={"image_file": make_image_upload()},
follow_redirects=False,
)
response = client.get("/search?q=图片箱")
assert response.status_code == 200
assert f'/boxes/{box.id}/image' in response.text
def test_search_result_without_image_does_not_break_template(client, db_session):
item = Item(name="无图物品", box=Box(name="普通箱"), is_container=False)
db_session.add(item)
db_session.commit()
response = client.get("/search?q=无图物品")
assert response.status_code == 200
assert "无图物品" in response.text