mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 07:13:00 +00:00 
			
		
		
		
	Merge pull request #5531 from XiangRongLin/tests
Add instrumented tests for LocalPlaylistManager.createPlaylist
This commit is contained in:
		| @@ -0,0 +1,85 @@ | |||||||
|  | package org.schabi.newpipe.local.playlist | ||||||
|  |  | ||||||
|  | import androidx.room.Room | ||||||
|  | import androidx.test.core.app.ApplicationProvider | ||||||
|  | import org.junit.After | ||||||
|  | import org.junit.Before | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | import org.junit.rules.Timeout | ||||||
|  | import org.schabi.newpipe.database.AppDatabase | ||||||
|  | import org.schabi.newpipe.database.stream.model.StreamEntity | ||||||
|  | import org.schabi.newpipe.extractor.stream.StreamType | ||||||
|  | import org.schabi.newpipe.testUtil.TrampolineSchedulerRule | ||||||
|  | import java.util.concurrent.TimeUnit | ||||||
|  |  | ||||||
|  | class LocalPlaylistManagerTest { | ||||||
|  |  | ||||||
|  |     private lateinit var manager: LocalPlaylistManager | ||||||
|  |     private lateinit var database: AppDatabase | ||||||
|  |  | ||||||
|  |     @get:Rule | ||||||
|  |     val trampolineScheduler = TrampolineSchedulerRule() | ||||||
|  |  | ||||||
|  |     @get:Rule | ||||||
|  |     val timeout = Timeout(10, TimeUnit.SECONDS) | ||||||
|  |  | ||||||
|  |     @Before | ||||||
|  |     fun setup() { | ||||||
|  |         database = Room.inMemoryDatabaseBuilder( | ||||||
|  |                 ApplicationProvider.getApplicationContext(), | ||||||
|  |                 AppDatabase::class.java | ||||||
|  |         ) | ||||||
|  |                 .allowMainThreadQueries() | ||||||
|  |                 .build() | ||||||
|  |  | ||||||
|  |         manager = LocalPlaylistManager(database) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @After | ||||||
|  |     fun cleanUp() { | ||||||
|  |         database.close() | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     fun createPlaylist() { | ||||||
|  |         val stream = StreamEntity( | ||||||
|  |                 serviceId = 1, url = "https://newpipe.net/", title = "title", | ||||||
|  |                 streamType = StreamType.VIDEO_STREAM, duration = 1, uploader = "uploader" | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         val result = manager.createPlaylist("name", listOf(stream)) | ||||||
|  |  | ||||||
|  |         // This should not behave like this. | ||||||
|  |         // Currently list of all stream ids is returned instead of playlist id | ||||||
|  |         result.test().await().assertValue(listOf(1L)) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     fun createPlaylist_emptyPlaylistMustReturnEmpty() { | ||||||
|  |         val result = manager.createPlaylist("name", emptyList()) | ||||||
|  |  | ||||||
|  |         // This should not behave like this. | ||||||
|  |         // It should throw an error because currently the result is null | ||||||
|  |         result.test().await().assertComplete() | ||||||
|  |         manager.playlists.test().awaitCount(1).assertValue(emptyList()) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test() | ||||||
|  |     fun createPlaylist_nonExistentStreamsAreUpserted() { | ||||||
|  |         val stream = StreamEntity( | ||||||
|  |                 serviceId = 1, url = "https://newpipe.net/", title = "title", | ||||||
|  |                 streamType = StreamType.VIDEO_STREAM, duration = 1, uploader = "uploader" | ||||||
|  |         ) | ||||||
|  |         database.streamDAO().insert(stream) | ||||||
|  |         val upserted = StreamEntity( | ||||||
|  |                 serviceId = 1, url = "https://newpipe.net/2", title = "title2", | ||||||
|  |                 streamType = StreamType.VIDEO_STREAM, duration = 1, uploader = "uploader" | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         val result = manager.createPlaylist("name", listOf(stream, upserted)) | ||||||
|  |  | ||||||
|  |         result.test().await().assertComplete() | ||||||
|  |         database.streamDAO().all.test().awaitCount(1).assertValue(listOf(stream, upserted)) | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,37 @@ | |||||||
|  | package org.schabi.newpipe.testUtil | ||||||
|  |  | ||||||
|  | import io.reactivex.rxjava3.android.plugins.RxAndroidPlugins | ||||||
|  | import io.reactivex.rxjava3.plugins.RxJavaPlugins | ||||||
|  | import io.reactivex.rxjava3.schedulers.Schedulers | ||||||
|  | import org.junit.rules.TestRule | ||||||
|  | import org.junit.runner.Description | ||||||
|  | import org.junit.runners.model.Statement | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Always run on [Schedulers.trampoline]. | ||||||
|  |  * This executes the task in the current thread in FIFO manner. | ||||||
|  |  * This ensures that tasks are run quickly inside the tests | ||||||
|  |  * and not scheduled away to another thread for later execution | ||||||
|  |  */ | ||||||
|  | class TrampolineSchedulerRule : TestRule { | ||||||
|  |  | ||||||
|  |     private val scheduler = Schedulers.trampoline() | ||||||
|  |  | ||||||
|  |     override fun apply(base: Statement, description: Description): Statement = | ||||||
|  |             object : Statement() { | ||||||
|  |                 override fun evaluate() { | ||||||
|  |                     try { | ||||||
|  |                         RxJavaPlugins.setComputationSchedulerHandler { scheduler } | ||||||
|  |                         RxJavaPlugins.setIoSchedulerHandler { scheduler } | ||||||
|  |                         RxJavaPlugins.setNewThreadSchedulerHandler { scheduler } | ||||||
|  |                         RxJavaPlugins.setSingleSchedulerHandler { scheduler } | ||||||
|  |                         RxAndroidPlugins.setInitMainThreadSchedulerHandler { scheduler } | ||||||
|  |  | ||||||
|  |                         base.evaluate() | ||||||
|  |                     } finally { | ||||||
|  |                         RxJavaPlugins.reset() | ||||||
|  |                         RxAndroidPlugins.reset() | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 Stypox
					Stypox