@@ -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