Move tests for write_documents from DocumentStoreBaseTests to separate class (#6334)

This commit is contained in:
Silvano Cerza 2023-11-17 19:25:16 +01:00 committed by GitHub
parent 326f51df9d
commit 53b77dda6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -43,7 +43,65 @@ class CountDocumentsTest:
assert docstore.count_documents() == 3
class DocumentStoreBaseTests(CountDocumentsTest):
class WriteDocumentsTest:
"""
Utility class to test a Document Store `write_documents` method.
To use it create a custom test class and override the `docstore` fixture to return your Document Store.
Example usage:
```python
class MyDocumentStoreTest(WriteDocumentsTest):
@pytest.fixture
def docstore(self):
return MyDocumentStore()
```
"""
@pytest.mark.unit
def test_write(self, docstore: DocumentStore):
doc = Document(content="test doc")
docstore.write_documents([doc])
assert docstore.filter_documents(filters={"id": doc.id}) == [doc]
@pytest.mark.unit
def test_write_duplicate_fail(self, docstore: DocumentStore):
doc = Document(content="test doc")
docstore.write_documents([doc])
with pytest.raises(DuplicateDocumentError, match=f"ID '{doc.id}' already exists."):
docstore.write_documents(documents=[doc], policy=DuplicatePolicy.FAIL)
assert docstore.filter_documents(filters={"id": doc.id}) == [doc]
@pytest.mark.unit
def test_write_duplicate_skip(self, docstore: DocumentStore):
doc = Document(content="test doc")
docstore.write_documents([doc])
docstore.write_documents(documents=[doc], policy=DuplicatePolicy.SKIP)
assert docstore.filter_documents(filters={"id": doc.id}) == [doc]
@pytest.mark.unit
def test_write_duplicate_overwrite(self, docstore: DocumentStore):
doc1 = Document(content="test doc 1")
doc2 = Document(content="test doc 2")
object.__setattr__(doc2, "id", doc1.id) # Make two docs with different content but same ID
docstore.write_documents([doc2])
assert docstore.filter_documents(filters={"id": doc1.id}) == [doc2]
docstore.write_documents(documents=[doc1], policy=DuplicatePolicy.OVERWRITE)
assert docstore.filter_documents(filters={"id": doc1.id}) == [doc1]
@pytest.mark.unit
def test_write_not_docs(self, docstore: DocumentStore):
with pytest.raises(ValueError):
docstore.write_documents(["not a document for sure"]) # type: ignore
@pytest.mark.unit
def test_write_not_list(self, docstore: DocumentStore):
with pytest.raises(ValueError):
docstore.write_documents("not a list actually") # type: ignore
class DocumentStoreBaseTests(CountDocumentsTest, WriteDocumentsTest):
@pytest.fixture
def docstore(self) -> DocumentStore:
raise NotImplementedError()
@ -559,48 +617,6 @@ class DocumentStoreBaseTests(CountDocumentsTest):
)
]
@pytest.mark.unit
def test_write(self, docstore: DocumentStore):
doc = Document(content="test doc")
docstore.write_documents([doc])
assert docstore.filter_documents(filters={"id": doc.id}) == [doc]
@pytest.mark.unit
def test_write_duplicate_fail(self, docstore: DocumentStore):
doc = Document(content="test doc")
docstore.write_documents([doc])
with pytest.raises(DuplicateDocumentError, match=f"ID '{doc.id}' already exists."):
docstore.write_documents(documents=[doc], policy=DuplicatePolicy.FAIL)
assert docstore.filter_documents(filters={"id": doc.id}) == [doc]
@pytest.mark.unit
def test_write_duplicate_skip(self, docstore: DocumentStore):
doc = Document(content="test doc")
docstore.write_documents([doc])
docstore.write_documents(documents=[doc], policy=DuplicatePolicy.SKIP)
assert docstore.filter_documents(filters={"id": doc.id}) == [doc]
@pytest.mark.unit
def test_write_duplicate_overwrite(self, docstore: DocumentStore):
doc1 = Document(content="test doc 1")
doc2 = Document(content="test doc 2")
object.__setattr__(doc2, "id", doc1.id) # Make two docs with different content but same ID
docstore.write_documents([doc2])
assert docstore.filter_documents(filters={"id": doc1.id}) == [doc2]
docstore.write_documents(documents=[doc1], policy=DuplicatePolicy.OVERWRITE)
assert docstore.filter_documents(filters={"id": doc1.id}) == [doc1]
@pytest.mark.unit
def test_write_not_docs(self, docstore: DocumentStore):
with pytest.raises(ValueError):
docstore.write_documents(["not a document for sure"]) # type: ignore
@pytest.mark.unit
def test_write_not_list(self, docstore: DocumentStore):
with pytest.raises(ValueError):
docstore.write_documents("not a list actually") # type: ignore
@pytest.mark.unit
def test_delete_empty(self, docstore: DocumentStore):
with pytest.raises(MissingDocumentError):