add search function
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user