Skip to content

Commit 6526ff1

Browse files
committed
Add tests
1 parent bb5390d commit 6526ff1

3 files changed

Lines changed: 197 additions & 3 deletions

File tree

app/src/androidTest/java/org/schabi/newpipe/database/DatabaseMigrationTest.kt

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import org.junit.Assert.assertNull
1313
import org.junit.Rule
1414
import org.junit.Test
1515
import org.junit.runner.RunWith
16+
import org.schabi.newpipe.database.playlist.model.PlaylistEntity
17+
import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity
1618
import org.schabi.newpipe.extractor.stream.StreamType
1719

1820
@RunWith(AndroidJUnit4::class)
@@ -21,13 +23,17 @@ class DatabaseMigrationTest {
2123
private const val DEFAULT_SERVICE_ID = 0
2224
private const val DEFAULT_URL = "https://www.youtube.com/watch?v=cDphUib5iG4"
2325
private const val DEFAULT_TITLE = "Test Title"
26+
private const val DEFAULT_NAME = "Test Name"
2427
private val DEFAULT_TYPE = StreamType.VIDEO_STREAM
2528
private const val DEFAULT_DURATION = 480L
2629
private const val DEFAULT_UPLOADER_NAME = "Uploader Test"
2730
private const val DEFAULT_THUMBNAIL = "https://example.com/example.jpg"
2831

29-
private const val DEFAULT_SECOND_SERVICE_ID = 0
32+
private const val DEFAULT_SECOND_SERVICE_ID = 1
3033
private const val DEFAULT_SECOND_URL = "https://www.youtube.com/watch?v=ncQU6iBn5Fc"
34+
35+
private const val DEFAULT_THIRD_SERVICE_ID = 2
36+
private const val DEFAULT_THIRD_URL = "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
3137
}
3238

3339
@get:Rule
@@ -123,6 +129,90 @@ class DatabaseMigrationTest {
123129
assertNull(secondStreamFromMigratedDatabase.isUploadDateApproximation)
124130
}
125131

132+
@Test
133+
fun migrateDatabaseFrom5to6() {
134+
val databaseInV5 = testHelper.createDatabase(AppDatabase.DATABASE_NAME, Migrations.DB_VER_5)
135+
136+
val localUid1: Long
137+
val localUid2: Long
138+
val remoteUid1: Long
139+
val remoteUid2: Long
140+
databaseInV5.run {
141+
localUid1 = insert(
142+
"playlists", SQLiteDatabase.CONFLICT_FAIL,
143+
ContentValues().apply {
144+
put("name", DEFAULT_NAME + "1")
145+
put("thumbnail_url", DEFAULT_THUMBNAIL)
146+
}
147+
)
148+
localUid2 = insert(
149+
"playlists", SQLiteDatabase.CONFLICT_FAIL,
150+
ContentValues().apply {
151+
put("name", DEFAULT_NAME + "2")
152+
put("thumbnail_url", DEFAULT_THUMBNAIL)
153+
}
154+
)
155+
delete(
156+
"playlists", "uid = ?",
157+
Array(1) { localUid1 }
158+
)
159+
remoteUid1 = insert(
160+
"remote_playlists", SQLiteDatabase.CONFLICT_FAIL,
161+
ContentValues().apply {
162+
put("service_id", DEFAULT_SERVICE_ID)
163+
put("url", DEFAULT_URL)
164+
}
165+
)
166+
remoteUid2 = insert(
167+
"remote_playlists", SQLiteDatabase.CONFLICT_FAIL,
168+
ContentValues().apply {
169+
put("service_id", DEFAULT_SECOND_SERVICE_ID)
170+
put("url", DEFAULT_SECOND_URL)
171+
}
172+
)
173+
delete(
174+
"remote_playlists", "uid = ?",
175+
Array(1) { remoteUid2 }
176+
)
177+
close()
178+
}
179+
180+
testHelper.runMigrationsAndValidate(
181+
AppDatabase.DATABASE_NAME, Migrations.DB_VER_6,
182+
true, Migrations.MIGRATION_5_6
183+
)
184+
185+
val migratedDatabaseV6 = getMigratedDatabase()
186+
var localListFromDB = migratedDatabaseV6.playlistDAO().all.blockingFirst()
187+
var remoteListFromDB = migratedDatabaseV6.playlistRemoteDAO().all.blockingFirst()
188+
189+
assertEquals(1, localListFromDB.size)
190+
assertEquals(localUid2, localListFromDB[0].uid)
191+
assertEquals(0, localListFromDB[0].displayIndex)
192+
assertEquals(1, remoteListFromDB.size)
193+
assertEquals(remoteUid1, remoteListFromDB[0].uid)
194+
assertEquals(0, remoteListFromDB[0].displayIndex)
195+
196+
val localUid3 = migratedDatabaseV6.playlistDAO().insert(
197+
PlaylistEntity(DEFAULT_NAME + "3", DEFAULT_THUMBNAIL, -1)
198+
)
199+
val remoteUid3 = migratedDatabaseV6.playlistRemoteDAO().insert(
200+
PlaylistRemoteEntity(
201+
DEFAULT_THIRD_SERVICE_ID, DEFAULT_NAME, DEFAULT_THIRD_URL,
202+
DEFAULT_THUMBNAIL, DEFAULT_UPLOADER_NAME, -1, 10
203+
)
204+
)
205+
206+
localListFromDB = migratedDatabaseV6.playlistDAO().all.blockingFirst()
207+
remoteListFromDB = migratedDatabaseV6.playlistRemoteDAO().all.blockingFirst()
208+
assertEquals(2, localListFromDB.size)
209+
assertEquals(localUid3, localListFromDB[1].uid)
210+
assertEquals(-1, localListFromDB[1].displayIndex)
211+
assertEquals(2, remoteListFromDB.size)
212+
assertEquals(remoteUid3, remoteListFromDB[1].uid)
213+
assertEquals(-1, remoteListFromDB[1].displayIndex)
214+
}
215+
126216
private fun getMigratedDatabase(): AppDatabase {
127217
val database: AppDatabase = Room.databaseBuilder(
128218
ApplicationProvider.getApplicationContext(),

app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ private void checkDisplayIndexModified(@NonNull final List<PlaylistLocalItem> re
385385
}
386386
}
387387

388-
if (isDisplayIndexModified) {
388+
if (debounceSaver != null && isDisplayIndexModified) {
389389
debounceSaver.saveChanges();
390390
}
391391
}
@@ -588,4 +588,3 @@ private void showDeleteDialog(final String name, final PlaylistLocalItem item) {
588588
.show();
589589
}
590590
}
591-
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package org.schabi.newpipe.database.playlist;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertTrue;
5+
6+
import org.junit.Test;
7+
import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
public class PlaylistLocalItemTest {
13+
@Test
14+
public void emptyPlaylists() {
15+
final List<PlaylistMetadataEntry> localPlaylists = new ArrayList<>();
16+
final List<PlaylistRemoteEntity> remotePlaylists = new ArrayList<>();
17+
final List<PlaylistLocalItem> mergedPlaylists =
18+
PlaylistLocalItem.merge(localPlaylists, remotePlaylists);
19+
20+
assertEquals(0, mergedPlaylists.size());
21+
}
22+
23+
@Test
24+
public void onlyLocalPlaylists() {
25+
final List<PlaylistMetadataEntry> localPlaylists = new ArrayList<>();
26+
final List<PlaylistRemoteEntity> remotePlaylists = new ArrayList<>();
27+
localPlaylists.add(new PlaylistMetadataEntry(1, "name1", "", 2, 1));
28+
localPlaylists.add(new PlaylistMetadataEntry(2, "name2", "", 1, 1));
29+
localPlaylists.add(new PlaylistMetadataEntry(3, "name3", "", 0, 1));
30+
final List<PlaylistLocalItem> mergedPlaylists =
31+
PlaylistLocalItem.merge(localPlaylists, remotePlaylists);
32+
33+
assertEquals(3, mergedPlaylists.size());
34+
assertEquals(0, mergedPlaylists.get(0).getDisplayIndex());
35+
assertEquals(1, mergedPlaylists.get(1).getDisplayIndex());
36+
assertEquals(2, mergedPlaylists.get(2).getDisplayIndex());
37+
}
38+
39+
@Test
40+
public void onlyRemotePlaylists() {
41+
final List<PlaylistMetadataEntry> localPlaylists = new ArrayList<>();
42+
final List<PlaylistRemoteEntity> remotePlaylists = new ArrayList<>();
43+
remotePlaylists.add(new PlaylistRemoteEntity(
44+
1, "name1", "url1", "", "", 2, 1L));
45+
remotePlaylists.add(new PlaylistRemoteEntity(
46+
2, "name2", "url2", "", "", 1, 1L));
47+
remotePlaylists.add(new PlaylistRemoteEntity(
48+
3, "name3", "url3", "", "", 0, 1L));
49+
final List<PlaylistLocalItem> mergedPlaylists =
50+
PlaylistLocalItem.merge(localPlaylists, remotePlaylists);
51+
52+
assertEquals(3, mergedPlaylists.size());
53+
assertEquals(0, mergedPlaylists.get(0).getDisplayIndex());
54+
assertEquals(1, mergedPlaylists.get(1).getDisplayIndex());
55+
assertEquals(2, mergedPlaylists.get(2).getDisplayIndex());
56+
}
57+
58+
@Test
59+
public void sameIndexWithDifferentName() {
60+
final List<PlaylistMetadataEntry> localPlaylists = new ArrayList<>();
61+
final List<PlaylistRemoteEntity> remotePlaylists = new ArrayList<>();
62+
localPlaylists.add(new PlaylistMetadataEntry(1, "name1", "", 0, 1));
63+
localPlaylists.add(new PlaylistMetadataEntry(2, "name2", "", 1, 1));
64+
remotePlaylists.add(new PlaylistRemoteEntity(
65+
1, "name3", "url1", "", "", 0, 1L));
66+
remotePlaylists.add(new PlaylistRemoteEntity(
67+
2, "name4", "url2", "", "", 1, 1L));
68+
final List<PlaylistLocalItem> mergedPlaylists =
69+
PlaylistLocalItem.merge(localPlaylists, remotePlaylists);
70+
71+
assertEquals(4, mergedPlaylists.size());
72+
assertTrue(mergedPlaylists.get(0) instanceof PlaylistMetadataEntry);
73+
assertEquals("name1", ((PlaylistMetadataEntry) mergedPlaylists.get(0)).name);
74+
assertTrue(mergedPlaylists.get(1) instanceof PlaylistRemoteEntity);
75+
assertEquals("name3", ((PlaylistRemoteEntity) mergedPlaylists.get(1)).getName());
76+
assertTrue(mergedPlaylists.get(2) instanceof PlaylistMetadataEntry);
77+
assertEquals("name2", ((PlaylistMetadataEntry) mergedPlaylists.get(2)).name);
78+
assertTrue(mergedPlaylists.get(3) instanceof PlaylistRemoteEntity);
79+
assertEquals("name4", ((PlaylistRemoteEntity) mergedPlaylists.get(3)).getName());
80+
}
81+
82+
@Test
83+
public void sameNameWithDifferentIndex() {
84+
final List<PlaylistMetadataEntry> localPlaylists = new ArrayList<>();
85+
final List<PlaylistRemoteEntity> remotePlaylists = new ArrayList<>();
86+
localPlaylists.add(new PlaylistMetadataEntry(1, "name1", "", 1, 1));
87+
localPlaylists.add(new PlaylistMetadataEntry(2, "name2", "", 3, 1));
88+
remotePlaylists.add(new PlaylistRemoteEntity(
89+
1, "name1", "url1", "", "", 0, 1L));
90+
remotePlaylists.add(new PlaylistRemoteEntity(
91+
2, "name2", "url2", "", "", 2, 1L));
92+
final List<PlaylistLocalItem> mergedPlaylists =
93+
PlaylistLocalItem.merge(localPlaylists, remotePlaylists);
94+
95+
assertEquals(4, mergedPlaylists.size());
96+
assertTrue(mergedPlaylists.get(0) instanceof PlaylistRemoteEntity);
97+
assertEquals("name1", ((PlaylistRemoteEntity) mergedPlaylists.get(0)).getName());
98+
assertTrue(mergedPlaylists.get(1) instanceof PlaylistMetadataEntry);
99+
assertEquals("name1", ((PlaylistMetadataEntry) mergedPlaylists.get(1)).name);
100+
assertTrue(mergedPlaylists.get(2) instanceof PlaylistRemoteEntity);
101+
assertEquals("name2", ((PlaylistRemoteEntity) mergedPlaylists.get(2)).getName());
102+
assertTrue(mergedPlaylists.get(3) instanceof PlaylistMetadataEntry);
103+
assertEquals("name2", ((PlaylistMetadataEntry) mergedPlaylists.get(3)).name);
104+
}
105+
}

0 commit comments

Comments
 (0)