From 5eb014833160d0dbd1c27742a7fcddb0ede31859 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 3 Jan 2018 10:41:36 +0100 Subject: Demonstrate the problem with child indexes entering before parent indexes --- tests/clientapitest.cpp | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/tests/clientapitest.cpp b/tests/clientapitest.cpp index 2ebef5f..6e8403f 100644 --- a/tests/clientapitest.cpp +++ b/tests/clientapitest.cpp @@ -198,6 +198,7 @@ private slots: void testModelNested() { auto facade = setupFacade("dummyresource.instance1"); + facade->runAsync = true; auto folder = QSharedPointer::create("resource", "id", 0, QSharedPointer::create()); auto subfolder = QSharedPointer::create("resource", "subId", 0, QSharedPointer::create()); subfolder->setParent("id"); @@ -209,11 +210,43 @@ private slots: query.requestTree("parent"); auto model = Sink::Store::loadModel(query); + QObject::connect(model.data(), &QAbstractItemModel::rowsInserted, [&] (const QModelIndex &parent, int first, int last) { + for (int row = first; row <= last; row++) { + auto index = model->index(row, 0, parent); + QVERIFY(index.isValid()); + QVERIFY(index.data(Sink::Store::DomainObjectRole).value()); + } + }); QTRY_COMPARE(model->rowCount(), 1); - model->fetchMore(model->index(0, 0)); QTRY_COMPARE(model->rowCount(model->index(0, 0)), 1); } + void testModelNestedReverse() + { + auto facade = setupFacade("dummyresource.instance1"); + facade->runAsync = true; + auto folder = QSharedPointer::create("resource", "id", 0, QSharedPointer::create()); + auto subfolder = QSharedPointer::create("resource", "subId", 0, QSharedPointer::create()); + subfolder->setParent("id"); + facade->results << subfolder << folder; + + // Test + Sink::Query query; + query.resourceFilter("dummyresource.instance1"); + query.requestTree("parent"); + + auto model = Sink::Store::loadModel(query); + QObject::connect(model.data(), &QAbstractItemModel::rowsInserted, [&] (const QModelIndex &parent, int first, int last) { + for (int row = first; row <= last; row++) { + auto index = model->index(row, 0, parent); + QVERIFY(index.isValid()); + QVERIFY(index.data(Sink::Store::DomainObjectRole).value()); + } + }); + QTRY_COMPARE(model->rowCount(), 1); + QVERIFY(model->index(0, 0).data(Sink::Store::DomainObjectRole).value()); + QTRY_COMPARE(model->rowCount(model->index(0, 0)), 1); + } void testModelNestedLive() { -- cgit v1.2.3