Skip to content

Commit d7b44af

Browse files
committed
test(search): cover SearchState transitions in the search model
Add cases for placeholder, skeleton, results, nothing found and search error states, plus the derived boolean properties. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Camila Ayres <hello@camilasan.com>
1 parent e2f7da7 commit d7b44af

1 file changed

Lines changed: 111 additions & 0 deletions

File tree

test/testunifiedsearchlistmodel.cpp

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,117 @@ private slots:
626626
QVERIFY(!model->errorString().isEmpty());
627627
}
628628

629+
void testSearchStatePlaceholderWhenNoSearchTerm()
630+
{
631+
model->setSearchTerm(QStringLiteral(""));
632+
QVERIFY(model->rowCount() == 0);
633+
634+
QVERIFY(!model->hasSearchTerm());
635+
QVERIFY(!model->hasSearchError());
636+
QCOMPARE(model->searchState(), OCC::UnifiedSearchResultsListModel::SearchState::Placeholder);
637+
}
638+
639+
void testSearchStateSkeletonWhileSearching()
640+
{
641+
model->setSearchTerm(QStringLiteral(""));
642+
QVERIFY(model->rowCount() == 0);
643+
644+
QSignalSpy searchStateChanged(model.data(), &OCC::UnifiedSearchResultsListModel::searchStateChanged);
645+
646+
model->setSearchTerm(QStringLiteral("dis"));
647+
648+
// waiting for the edit timer to fire, nothing fetched yet
649+
QVERIFY(model->waitingForSearchTermEditEnd());
650+
QVERIFY(!model->isSearchInProgress());
651+
QVERIFY(model->hasSearchTerm());
652+
QCOMPARE(model->searchState(), OCC::UnifiedSearchResultsListModel::SearchState::Skeleton);
653+
QVERIFY(searchStateChanged.count() > 0);
654+
655+
QSignalSpy searchInProgressChanged(
656+
model.data(), &OCC::UnifiedSearchResultsListModel::isSearchInProgressChanged);
657+
658+
// search started but results have not arrived yet
659+
QVERIFY(searchInProgressChanged.wait());
660+
QVERIFY(model->isSearchInProgress());
661+
QVERIFY(model->rowCount() == 0);
662+
QCOMPARE(model->searchState(), OCC::UnifiedSearchResultsListModel::SearchState::Skeleton);
663+
664+
model->setSearchTerm(QStringLiteral(""));
665+
}
666+
667+
void testSearchStateResultsWhenResultsFound()
668+
{
669+
model->setSearchTerm(QStringLiteral(""));
670+
QVERIFY(model->rowCount() == 0);
671+
672+
QSignalSpy searchStateChanged(model.data(), &OCC::UnifiedSearchResultsListModel::searchStateChanged);
673+
QSignalSpy searchInProgressChanged(
674+
model.data(), &OCC::UnifiedSearchResultsListModel::isSearchInProgressChanged);
675+
676+
model->setSearchTerm(QStringLiteral("discuss"));
677+
678+
QVERIFY(searchInProgressChanged.wait());
679+
QVERIFY(model->isSearchInProgress());
680+
681+
QVERIFY(searchInProgressChanged.wait());
682+
QVERIFY(!model->isSearchInProgress());
683+
684+
QVERIFY(model->rowCount() > 0);
685+
QVERIFY(!model->hasSearchError());
686+
QVERIFY(!model->isFetchMoreInProgress());
687+
QCOMPARE(model->searchState(), OCC::UnifiedSearchResultsListModel::SearchState::Results);
688+
QVERIFY(searchStateChanged.count() > 0);
689+
690+
model->setSearchTerm(QStringLiteral(""));
691+
}
692+
693+
void testSearchStateNothingFoundWhenNoResults()
694+
{
695+
model->setSearchTerm(QStringLiteral(""));
696+
QVERIFY(model->rowCount() == 0);
697+
698+
QSignalSpy searchInProgressChanged(
699+
model.data(), &OCC::UnifiedSearchResultsListModel::isSearchInProgressChanged);
700+
701+
model->setSearchTerm(QStringLiteral("[empty]"));
702+
703+
QVERIFY(searchInProgressChanged.wait());
704+
QVERIFY(model->isSearchInProgress());
705+
706+
QVERIFY(searchInProgressChanged.wait());
707+
QVERIFY(!model->isSearchInProgress());
708+
709+
QVERIFY(model->rowCount() == 0);
710+
QVERIFY(model->hasSearchTerm());
711+
QVERIFY(!model->hasSearchError());
712+
QCOMPARE(model->searchState(), OCC::UnifiedSearchResultsListModel::SearchState::NothingFound);
713+
714+
model->setSearchTerm(QStringLiteral(""));
715+
}
716+
717+
void testSearchStateSearchErrorWhenSearchFails()
718+
{
719+
model->setSearchTerm(QStringLiteral(""));
720+
QVERIFY(model->rowCount() == 0);
721+
722+
QSignalSpy searchInProgressChanged(
723+
model.data(), &OCC::UnifiedSearchResultsListModel::isSearchInProgressChanged);
724+
725+
model->setSearchTerm(QStringLiteral("[HTTP500]"));
726+
727+
QVERIFY(searchInProgressChanged.wait());
728+
QVERIFY(model->isSearchInProgress());
729+
730+
QVERIFY(searchInProgressChanged.wait());
731+
QVERIFY(!model->isSearchInProgress());
732+
733+
QVERIFY(model->rowCount() == 0);
734+
QVERIFY(model->hasSearchError());
735+
QCOMPARE(model->searchState(), OCC::UnifiedSearchResultsListModel::SearchState::SearchError);
736+
737+
model->setSearchTerm(QStringLiteral(""));
738+
}
739+
629740
void cleanupTestCase()
630741
{
631742
FakeSearchResultsStorage::destroy();

0 commit comments

Comments
 (0)