summaryrefslogtreecommitdiffstats
path: root/src/test/searchqueryparsertest.cpp
diff options
context:
space:
mode:
authorgramanas <anastasis.gramm2@gmail.com>2017-06-05 02:07:39 +0300
committergramanas <anastasis.gramm2@gmail.com>2017-06-05 02:10:54 +0300
commita4c407f0747a01bcaefc47f91c5bf7d6132198e8 (patch)
treec54a8efb3e6f3691e7720412f049b398c5a27f5a /src/test/searchqueryparsertest.cpp
parent590940d285b33aed96fdeb1ff135cef6c53a4f35 (diff)
Add test to check crate filter with crate filter and negation
Diffstat (limited to 'src/test/searchqueryparsertest.cpp')
-rw-r--r--src/test/searchqueryparsertest.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/test/searchqueryparsertest.cpp b/src/test/searchqueryparsertest.cpp
index c373e6afd8..392974a6bb 100644
--- a/src/test/searchqueryparsertest.cpp
+++ b/src/test/searchqueryparsertest.cpp
@@ -810,3 +810,65 @@ TEST_F(SearchQueryParserTest, CrateFilterWithOther){
") AND ((artist LIKE '%asdf%') OR (album_artist LIKE '%asdf%'))"),
qPrintable(pQuery->toSql()));
}
+
+TEST_F(SearchQueryParserTest, CrateFilterWithCrateFilterAndNegation){
+ // User's search term
+ QString searchTermA = "testA";
+ QString searchTermB = "testB";
+
+ // Parse the user query
+ auto pQueryA(m_parser.parseQuery(QString("crate: %1 crate: %2").arg(searchTermA, searchTermB),
+ QStringList(), ""));
+
+ // locations for test tracks
+ const QString kTrackALocationTest(QDir::currentPath() %
+ "/src/test/id3-test-data/cover-test-jpg.mp3");
+ const QString kTrackBLocationTest(QDir::currentPath() %
+ "/src/test/id3-test-data/cover-test-png.mp3");
+
+ // Create new crates and add them to the collection
+ Crate testCrateA;
+ testCrateA.setName(searchTermA);
+ CrateId testCrateAId;
+ collection()->insertCrate(testCrateA, &testCrateAId);
+ Crate testCrateB;
+ testCrateB.setName(searchTermB);
+ CrateId testCrateBId;
+ collection()->insertCrate(testCrateB, &testCrateBId);
+
+ // Add the tracks in the collection
+ TrackId trackAId = addTrackToCollection(kTrackALocationTest);
+ TrackPointer pTrackA(Track::newDummy(kTrackALocationTest, trackAId));
+ TrackId trackBId = addTrackToCollection(kTrackBLocationTest);
+ TrackPointer pTrackB(Track::newDummy(kTrackBLocationTest, trackBId));
+
+ // Add trackA and trackB to crate A
+ QList<TrackId> trackIdsA;
+ trackIdsA << trackAId << trackBId;
+ collection()->addCrateTracks(testCrateAId, trackIdsA);
+
+ // Add trackA to crate B
+ QList<TrackId> trackIdsB;
+ trackIdsB << trackAId;
+ collection()->addCrateTracks(testCrateBId, trackIdsB);
+
+ EXPECT_TRUE(pQueryA->match(pTrackA));
+ EXPECT_FALSE(pQueryA->match(pTrackB));
+
+ EXPECT_STREQ(
+ qPrintable("(" + m_crateFilterQuery.arg(searchTermA) +
+ ") AND (" + m_crateFilterQuery.arg(searchTermB) + ")"),
+ qPrintable(pQueryA->toSql()));
+
+ // parse again to test negation
+ auto pQueryB(m_parser.parseQuery(QString("crate: %1 -crate: %2").arg(searchTermA, searchTermB),
+ QStringList(), ""));
+
+ EXPECT_FALSE(pQueryB->match(pTrackA));
+ EXPECT_TRUE(pQueryB->match(pTrackB));
+
+ EXPECT_STREQ(
+ qPrintable("(" + m_crateFilterQuery.arg(searchTermA) +
+ ") AND (NOT (" + m_crateFilterQuery.arg(searchTermB) + "))"),
+ qPrintable(pQueryB->toSql()));
+}