Example #1
0
    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")]
Example #2
0
    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())
Example #3
0
    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)
Example #4
0
    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
Example #5
0
    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
Example #6
0
    def test_it_returns_the_first_doc(self, db_session, duplicate_docs):
        merged = merge_documents(db_session, duplicate_docs)

        assert merged == duplicate_docs[0]