def test_it_logs_when_its_called(self, caplog, db_session, duplicate_docs): caplog.set_level(logging.INFO) merge_documents(db_session, duplicate_docs) assert caplog.record_tuples == [("h.models.document._document", 20, "Merging 3 documents")]
def test_it_deletes_all_but_the_first(self, db_session, duplicate_docs): merge_documents(db_session, duplicate_docs) db_session.flush() assert not (db_session.query(Document).filter( Document.id.in_([duplicate_docs[1].id, duplicate_docs[2].id ])).count())
def test_it_raises_retryable_error_when_flush_fails( self, db_session, duplicate_docs, monkeypatch): def err(): raise sa.exc.IntegrityError(None, None, None) monkeypatch.setattr(db_session, "flush", err) with pytest.raises(ConcurrentUpdateError): merge_documents(db_session, duplicate_docs)
def test_it_moves_annotations_to_the_first(self, db_session, duplicate_docs): merge_documents(db_session, duplicate_docs) db_session.flush() for document, expected_count in zip(duplicate_docs, (3, 0, 0)): count = (db_session.query( models.Annotation).filter_by(document_id=document.id).count()) assert count == expected_count
def test_it_moves_sub_items_to_the_first(self, db_session, duplicate_docs, datetime, updated, sub_item): items = [] for doc in duplicate_docs[1:]: items.extend(getattr(doc, sub_item)) master = merge_documents(db_session, duplicate_docs, updated=updated) db_session.flush() assert [len(getattr(doc, sub_item)) for doc in duplicate_docs] == [3, 0, 0] expected_date = updated if updated else datetime.utcnow.return_value for item in items: assert item.document == master assert item.updated == expected_date
def test_it_returns_the_first_doc(self, db_session, duplicate_docs): merged = merge_documents(db_session, duplicate_docs) assert merged == duplicate_docs[0]