From 466db83375c5f33c686f2b02baa06e4331eefead Mon Sep 17 00:00:00 2001
From: Stypox <stypox@pm.me>
Date: Thu, 27 Jan 2022 14:43:51 +0100
Subject: [PATCH] Improve HistoryRecordManager tests (#7700)

* Improve HistoryRecordManager tests

* Improve shuffle as requested
---
 .../local/history/HistoryRecordManagerTest.kt | 44 ++++++++++++++-----
 1 file changed, 34 insertions(+), 10 deletions(-)

diff --git a/app/src/androidTest/java/org/schabi/newpipe/local/history/HistoryRecordManagerTest.kt b/app/src/androidTest/java/org/schabi/newpipe/local/history/HistoryRecordManagerTest.kt
index c32a43b2a..24be0f868 100644
--- a/app/src/androidTest/java/org/schabi/newpipe/local/history/HistoryRecordManagerTest.kt
+++ b/app/src/androidTest/java/org/schabi/newpipe/local/history/HistoryRecordManagerTest.kt
@@ -97,14 +97,23 @@ class HistoryRecordManagerTest {
         assertThat(database.searchHistoryDAO().all.blockingFirst()).isEmpty()
     }
 
-    @Test
-    fun getRelatedSearches_emptyQuery() {
+    private fun insertShuffledRelatedSearches(relatedSearches: Collection<SearchHistoryEntry>) {
+
+        // shuffle to make sure the order of items returned by queries depends only on
+        // SearchHistoryEntry.creationDate, not on the actual insertion time, so that we can
+        // verify that the `ORDER BY` clause does its job
+        database.searchHistoryDAO().insertAll(relatedSearches.shuffled())
+
         // make sure all entries were inserted
-        database.searchHistoryDAO().insertAll(RELATED_SEARCHES_ENTRIES)
         assertEquals(
-            RELATED_SEARCHES_ENTRIES.size,
+            relatedSearches.size,
             database.searchHistoryDAO().all.blockingFirst().size
         )
+    }
+
+    @Test
+    fun getRelatedSearches_emptyQuery() {
+        insertShuffledRelatedSearches(RELATED_SEARCHES_ENTRIES)
 
         // make sure correct number of searches is returned and in correct order
         val searches = manager.getRelatedSearches("", 6, 4).blockingFirst()
@@ -117,14 +126,29 @@ class HistoryRecordManagerTest {
     }
 
     @Test
-    fun getRelatedSearched_nonEmptyQuery() {
-        // make sure all entries were inserted
-        database.searchHistoryDAO().insertAll(RELATED_SEARCHES_ENTRIES)
-        assertEquals(
-            RELATED_SEARCHES_ENTRIES.size,
-            database.searchHistoryDAO().all.blockingFirst().size
+    fun getRelatedSearches_emptyQuery_manyDuplicates() {
+        insertShuffledRelatedSearches(
+            listOf(
+                SearchHistoryEntry(time.minusSeconds(9), 3, "A"),
+                SearchHistoryEntry(time.minusSeconds(8), 3, "AB"),
+                SearchHistoryEntry(time.minusSeconds(7), 3, "A"),
+                SearchHistoryEntry(time.minusSeconds(6), 3, "A"),
+                SearchHistoryEntry(time.minusSeconds(5), 3, "BA"),
+                SearchHistoryEntry(time.minusSeconds(4), 3, "A"),
+                SearchHistoryEntry(time.minusSeconds(3), 3, "A"),
+                SearchHistoryEntry(time.minusSeconds(2), 0, "A"),
+                SearchHistoryEntry(time.minusSeconds(1), 2, "AA"),
+            )
         )
 
+        val searches = manager.getRelatedSearches("", 9, 3).blockingFirst()
+        assertThat(searches).containsExactly("AA", "A", "BA")
+    }
+
+    @Test
+    fun getRelatedSearched_nonEmptyQuery() {
+        insertShuffledRelatedSearches(RELATED_SEARCHES_ENTRIES)
+
         // make sure correct number of searches is returned and in correct order
         val searches = manager.getRelatedSearches("A", 3, 5).blockingFirst()
         assertThat(searches).containsExactly(