diff --git a/autotests/integration/writetransactiontest.cpp b/autotests/integration/writetransactiontest.cpp --- a/autotests/integration/writetransactiontest.cpp +++ b/autotests/integration/writetransactiontest.cpp @@ -46,6 +46,7 @@ void testAddDocument(); void testAddDocumentTwoDocuments(); void testAddAndRemoveOneDocument(); + void testAddAndReplaceOneDocument(); void testRemoveRecursively(); void testDocumentId(); @@ -184,6 +185,54 @@ QVERIFY(DBState::debugCompare(actualState, DBState())); } +void WriteTransactionTest::testAddAndReplaceOneDocument() +{ + const QByteArray url1(dir->path().toUtf8() + "/file1"); + touchFile(url1); + + Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); + Document doc2 = createDocument(url1, 6, 2, {"a", "abc", "xxx"}, {"file1", "yyy"}, {}); + quint64 id = doc1.id(); + doc2.setId(id); + + { + Transaction tr(db, Transaction::ReadWrite); + tr.addDocument(doc1); + tr.commit(); + } + + DBState state; + state.postingDb = {{"a", {id}}, {"abc", {id}}, {"dab", {id}}, {"file1", {id}} }; + state.positionDb = {}; + state.docTermsDb = {{id, {"a", "abc", "dab"} }}; + state.docFileNameTermsDb = {{id, {"file1"} }}; + state.docXAttrTermsDb = {}; + state.docTimeDb = {{id, DocumentTimeDB::TimeInfo(5, 1)}}; + state.mtimeDb = {{5, id}}; + + { + Transaction tr(db, Transaction::ReadOnly); + DBState actualState = DBState::fromTransaction(&tr); + QVERIFY(DBState::debugCompare(actualState, state)); + } + + { + Transaction tr(db, Transaction::ReadWrite); + tr.replaceDocument(doc2, DocumentOperation::Everything); + tr.commit(); + } + + state.postingDb = {{"a", {id}}, {"abc", {id}}, {"xxx", {id}}, {"file1", {id}}, {"yyy", {id}} }; + state.docTermsDb = {{id, {"a", "abc", "xxx"} }}; + state.docFileNameTermsDb = {{id, {"file1", "yyy"} }}; + state.docTimeDb = {{id, DocumentTimeDB::TimeInfo(6, 2)}}; + state.mtimeDb = {{6, id}}; + + Transaction tr(db, Transaction::ReadOnly); + DBState actualState = DBState::fromTransaction(&tr); + QVERIFY(DBState::debugCompare(actualState, state)); +} + void WriteTransactionTest::testRemoveRecursively() { QByteArray path = dir->path().toUtf8();