948f21b02e
* chore: add type checking to test/tracing/, test/marshal/, and test/testing/ Partially addresses #10396 by extending mypy type checking to three more test directories. Fixes type errors including missing annotations on pytest fixtures, unhandled Optional returns from current_span(), incorrect generator fixture return types, and dynamic LogRecord attribute access. * address review comments from @bogdankostic * remove redundant assert tracer.current_span() is not None The assertion on current_span already covers this check. * replace getattr with direct attribute access (B009) The hasattr guard already ensures the attribute exists, so direct access is safe. Added type: ignore comments since LogRecord doesn't declare operation_name in its type stubs. * fix: address remaining PR review comments - Remove unnecessary type: ignore[attr-defined] where hasattr guards exist - Add type: ignore[func-returns-value] to delete_documents assertion * fix: reformat test_logging_tracer.py to pass fmt-check --------- Co-authored-by: bogdankostic <bogdankostic@web.de>
123 lines
3.9 KiB
Python
123 lines
3.9 KiB
Python
# SPDX-FileCopyrightText: 2022-present deepset GmbH <info@deepset.ai>
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
from haystack.core.component import component
|
|
from haystack.dataclasses import Document
|
|
from haystack.testing.factory import component_class, document_store_class
|
|
|
|
|
|
def test_document_store_class_default():
|
|
MyStore = document_store_class("MyStore")
|
|
store = MyStore()
|
|
assert store.count_documents() == 0
|
|
assert store.filter_documents() == []
|
|
assert store.write_documents([]) is None
|
|
assert store.delete_documents([]) is None # type: ignore[func-returns-value]
|
|
assert store.to_dict() == {"type": "haystack.testing.factory.MyStore", "init_parameters": {}}
|
|
|
|
|
|
def test_document_store_from_dict():
|
|
MyStore = document_store_class("MyStore")
|
|
|
|
store = MyStore.from_dict({"type": "haystack.testing.factory.MyStore", "init_parameters": {}})
|
|
assert isinstance(store, MyStore)
|
|
|
|
|
|
def test_document_store_class_with_documents():
|
|
doc = Document(id="fake_id", content="This is a document")
|
|
MyStore = document_store_class("MyStore", documents=[doc])
|
|
store = MyStore()
|
|
assert store.count_documents() == 1
|
|
assert store.filter_documents() == [doc]
|
|
|
|
|
|
def test_document_store_class_with_documents_count():
|
|
MyStore = document_store_class("MyStore", documents_count=100)
|
|
store = MyStore()
|
|
assert store.count_documents() == 100
|
|
assert store.filter_documents() == []
|
|
|
|
|
|
def test_document_store_class_with_documents_and_documents_count():
|
|
doc = Document(id="fake_id", content="This is a document")
|
|
MyStore = document_store_class("MyStore", documents=[doc], documents_count=100)
|
|
store = MyStore()
|
|
assert store.count_documents() == 100
|
|
assert store.filter_documents() == [doc]
|
|
|
|
|
|
def test_document_store_class_with_bases():
|
|
MyStore = document_store_class("MyStore", bases=(Exception,))
|
|
store = MyStore()
|
|
assert isinstance(store, Exception)
|
|
|
|
|
|
def test_document_store_class_with_extra_fields():
|
|
MyStore = document_store_class("MyStore", extra_fields={"my_field": 10})
|
|
store = MyStore()
|
|
assert store.my_field == 10 # type: ignore
|
|
|
|
|
|
def test_component_class_default():
|
|
MyComponent = component_class("MyComponent")
|
|
comp = MyComponent()
|
|
res = comp.run(value=1)
|
|
assert res == {"value": None}
|
|
|
|
res = comp.run(value="something")
|
|
assert res == {"value": None}
|
|
|
|
res = comp.run(non_existing_input=1)
|
|
assert res == {"value": None}
|
|
|
|
|
|
def test_component_class_is_registered():
|
|
MyComponent = component_class("MyComponent")
|
|
assert component.registry["haystack.testing.factory.MyComponent"] == MyComponent
|
|
|
|
|
|
def test_component_class_with_input_types():
|
|
MyComponent = component_class("MyComponent", input_types={"value": int})
|
|
comp = MyComponent()
|
|
res = comp.run(value=1)
|
|
assert res == {"value": None}
|
|
|
|
res = comp.run(value="something")
|
|
assert res == {"value": None}
|
|
|
|
|
|
def test_component_class_with_output_types():
|
|
MyComponent = component_class("MyComponent", output_types={"value": int})
|
|
comp = MyComponent()
|
|
|
|
res = comp.run(value=1)
|
|
assert res == {"value": None}
|
|
|
|
|
|
def test_component_class_with_output():
|
|
MyComponent = component_class("MyComponent", output={"value": 100})
|
|
comp = MyComponent()
|
|
res = comp.run(value=1)
|
|
assert res == {"value": 100}
|
|
|
|
|
|
def test_component_class_with_output_and_output_types():
|
|
MyComponent = component_class("MyComponent", output_types={"value": str}, output={"value": 100})
|
|
comp = MyComponent()
|
|
|
|
res = comp.run(value=1)
|
|
assert res == {"value": 100}
|
|
|
|
|
|
def test_component_class_with_bases():
|
|
MyComponent = component_class("MyComponent", bases=(Exception,))
|
|
comp = MyComponent()
|
|
assert isinstance(comp, Exception)
|
|
|
|
|
|
def test_component_class_with_extra_fields():
|
|
MyComponent = component_class("MyComponent", extra_fields={"my_field": 10})
|
|
comp = MyComponent()
|
|
assert comp.my_field == 10 # type: ignore
|