diff --git a/Project Academy/10. Room-test/java/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.java b/Project Academy/10. Room-test/java/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.java index cbef972f..a6ed0844 100644 --- a/Project Academy/10. Room-test/java/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.java +++ b/Project Academy/10. Room-test/java/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.java @@ -14,6 +14,7 @@ import com.dicoding.academies.utils.AppExecutors; import com.dicoding.academies.utils.DataDummy; import com.dicoding.academies.utils.LiveDataTestUtil; +import com.dicoding.academies.utils.TestExecutor; import com.dicoding.academies.vo.Resource; import org.junit.Rule; @@ -22,9 +23,11 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Executor; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -35,7 +38,9 @@ public class AcademyRepositoryTest { private RemoteDataSource remote = Mockito.mock(RemoteDataSource.class); private LocalDataSource local = Mockito.mock(LocalDataSource.class); - private AppExecutors appExecutors = Mockito.mock(AppExecutors.class); + private Executor executor = new TestExecutor(); + + private AppExecutors appExecutors = new AppExecutors(executor, executor, executor); private FakeAcademyRepository academyRepository = new FakeAcademyRepository(remote, local, appExecutors); @@ -108,4 +113,20 @@ public void getCourseWithModules() { assertNotNull(courseEntities.data.mCourse.getTitle()); assertEquals(courseResponses.get(0).getTitle(), courseEntities.data.mCourse.getTitle()); } -} \ No newline at end of file + + @Test + public void setCourseBookmark() { + CourseEntity dummy = DataDummy.generateDummyCourses().get(0); + + academyRepository.setCourseBookmark(dummy, true); + verify(local, times(1)).setCourseBookmark(dummy, true); + } + + @Test + public void setReadModule() { + ModuleEntity dummy = DataDummy.generateDummyModules("a").get(0); + + academyRepository.setReadModule(dummy); + verify(local, times(1)).setReadModule(dummy); + } +} diff --git a/Project Academy/10. Room-test/java/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.java b/Project Academy/10. Room-test/java/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.java index 0287e400..4ffda395 100644 --- a/Project Academy/10. Room-test/java/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.java +++ b/Project Academy/10. Room-test/java/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.java @@ -17,6 +17,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -53,4 +54,20 @@ public void getCourseWithModule() { verify(observer).onChanged(dummyCourseWithModule); } + + @Test + public void setBookmark() { + Resource dummyCourseWithModule = Resource.success(DataDummy.generateDummyCourseWithModules(dummyCourse, false)); + MutableLiveData> course = new MutableLiveData<>(); + course.setValue(dummyCourseWithModule); + + when(academyRepository.getCourseWithModules(courseId)).thenReturn(course); + viewModel.courseModule.observeForever(observer); + + doNothing().when(academyRepository).setCourseBookmark(dummyCourse, true); + + viewModel.setBookmark(); + + verify(academyRepository).setCourseBookmark(dummyCourse, true); + } } \ No newline at end of file diff --git a/Project Academy/10. Room-test/java/app/src/test/java/com/dicoding/academies/utils/TestExecutor.java b/Project Academy/10. Room-test/java/app/src/test/java/com/dicoding/academies/utils/TestExecutor.java new file mode 100644 index 00000000..c439bf63 --- /dev/null +++ b/Project Academy/10. Room-test/java/app/src/test/java/com/dicoding/academies/utils/TestExecutor.java @@ -0,0 +1,10 @@ +package com.dicoding.academies.utils; + +import java.util.concurrent.Executor; + +public class TestExecutor implements Executor { + @Override + public void execute(Runnable command) { + command.run(); + } +} \ No newline at end of file diff --git a/Project Academy/10. Room-test/kotlin/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.kt b/Project Academy/10. Room-test/kotlin/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.kt index d28e24b9..0ceeacd7 100644 --- a/Project Academy/10. Room-test/kotlin/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.kt +++ b/Project Academy/10. Room-test/kotlin/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.kt @@ -1,7 +1,6 @@ package com.dicoding.academies.data import androidx.arch.core.executor.testing.InstantTaskExecutorRule -import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.dicoding.academies.data.source.local.LocalDataSource import com.dicoding.academies.data.source.local.entity.CourseEntity @@ -16,8 +15,8 @@ import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Rule import org.junit.Test -import org.mockito.Mockito.`when` -import org.mockito.Mockito.mock +import org.mockito.Mockito.* +import java.util.concurrent.Executor class AcademyRepositoryTest { @@ -26,7 +25,9 @@ class AcademyRepositoryTest { private val remote = mock(RemoteDataSource::class.java) private val local = mock(LocalDataSource::class.java) - private val appExecutors = mock(AppExecutors::class.java) + + private val executor = Executor { it.run() } + private val appExecutors = AppExecutors(executor, executor, executor) private val academyRepository = FakeAcademyRepository(remote, local, appExecutors) @@ -99,4 +100,20 @@ class AcademyRepositoryTest { assertNotNull(courseEntities.data?.mCourse?.title) assertEquals(courseResponses[0].title, courseEntities.data?.mCourse?.title) } + + @Test + fun setCourseBookmark() { + val dummy = DataDummy.generateDummyCourses()[0] + + academyRepository.setCourseBookmark(dummy, true) + verify(local, times(1)).setCourseBookmark(dummy, true) + } + + @Test + fun setReadModule() { + val dummy = DataDummy.generateDummyModules("a")[0] + + academyRepository.setReadModule(dummy) + verify(local, times(1)).setReadModule(dummy) + } } \ No newline at end of file diff --git a/Project Academy/10. Room-test/kotlin/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.kt b/Project Academy/10. Room-test/kotlin/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.kt index 9ada204d..1aaa8715 100644 --- a/Project Academy/10. Room-test/kotlin/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.kt +++ b/Project Academy/10. Room-test/kotlin/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.kt @@ -7,11 +7,13 @@ import com.dicoding.academies.data.AcademyRepository import com.dicoding.academies.data.source.local.entity.CourseWithModule import com.dicoding.academies.utils.DataDummy import com.dicoding.academies.vo.Resource +import com.nhaarman.mockitokotlin2.doNothing import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock +import org.mockito.Mockito import org.mockito.Mockito.`when` import org.mockito.Mockito.verify import org.mockito.junit.MockitoJUnitRunner @@ -49,4 +51,20 @@ class DetailCourseViewModelTest { verify(observer).onChanged(dummyCourseWithModule) } + + @Test + fun setBookmark() { + val dummyCourseWithModule = Resource.success(DataDummy.generateDummyCourseWithModules(dummyCourse, false)) + val course = MutableLiveData>() + course.value = dummyCourseWithModule + + `when`(academyRepository.getCourseWithModules(courseId)).thenReturn(course) + viewModel.courseModule.observeForever(observer) + + doNothing().`when`(academyRepository).setCourseBookmark(dummyCourse, true) + + viewModel.setBookmark() + + verify(academyRepository).setCourseBookmark(dummyCourse, true) + } } \ No newline at end of file diff --git a/Project Academy/11. Pagination/java/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.java b/Project Academy/11. Pagination/java/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.java index cbef972f..a6ed0844 100644 --- a/Project Academy/11. Pagination/java/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.java +++ b/Project Academy/11. Pagination/java/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.java @@ -14,6 +14,7 @@ import com.dicoding.academies.utils.AppExecutors; import com.dicoding.academies.utils.DataDummy; import com.dicoding.academies.utils.LiveDataTestUtil; +import com.dicoding.academies.utils.TestExecutor; import com.dicoding.academies.vo.Resource; import org.junit.Rule; @@ -22,9 +23,11 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Executor; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -35,7 +38,9 @@ public class AcademyRepositoryTest { private RemoteDataSource remote = Mockito.mock(RemoteDataSource.class); private LocalDataSource local = Mockito.mock(LocalDataSource.class); - private AppExecutors appExecutors = Mockito.mock(AppExecutors.class); + private Executor executor = new TestExecutor(); + + private AppExecutors appExecutors = new AppExecutors(executor, executor, executor); private FakeAcademyRepository academyRepository = new FakeAcademyRepository(remote, local, appExecutors); @@ -108,4 +113,20 @@ public void getCourseWithModules() { assertNotNull(courseEntities.data.mCourse.getTitle()); assertEquals(courseResponses.get(0).getTitle(), courseEntities.data.mCourse.getTitle()); } -} \ No newline at end of file + + @Test + public void setCourseBookmark() { + CourseEntity dummy = DataDummy.generateDummyCourses().get(0); + + academyRepository.setCourseBookmark(dummy, true); + verify(local, times(1)).setCourseBookmark(dummy, true); + } + + @Test + public void setReadModule() { + ModuleEntity dummy = DataDummy.generateDummyModules("a").get(0); + + academyRepository.setReadModule(dummy); + verify(local, times(1)).setReadModule(dummy); + } +} diff --git a/Project Academy/11. Pagination/java/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.java b/Project Academy/11. Pagination/java/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.java index 0287e400..4ffda395 100644 --- a/Project Academy/11. Pagination/java/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.java +++ b/Project Academy/11. Pagination/java/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.java @@ -17,6 +17,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -53,4 +54,20 @@ public void getCourseWithModule() { verify(observer).onChanged(dummyCourseWithModule); } + + @Test + public void setBookmark() { + Resource dummyCourseWithModule = Resource.success(DataDummy.generateDummyCourseWithModules(dummyCourse, false)); + MutableLiveData> course = new MutableLiveData<>(); + course.setValue(dummyCourseWithModule); + + when(academyRepository.getCourseWithModules(courseId)).thenReturn(course); + viewModel.courseModule.observeForever(observer); + + doNothing().when(academyRepository).setCourseBookmark(dummyCourse, true); + + viewModel.setBookmark(); + + verify(academyRepository).setCourseBookmark(dummyCourse, true); + } } \ No newline at end of file diff --git a/Project Academy/11. Pagination/java/app/src/test/java/com/dicoding/academies/utils/TestExecutor.java b/Project Academy/11. Pagination/java/app/src/test/java/com/dicoding/academies/utils/TestExecutor.java new file mode 100644 index 00000000..c439bf63 --- /dev/null +++ b/Project Academy/11. Pagination/java/app/src/test/java/com/dicoding/academies/utils/TestExecutor.java @@ -0,0 +1,10 @@ +package com.dicoding.academies.utils; + +import java.util.concurrent.Executor; + +public class TestExecutor implements Executor { + @Override + public void execute(Runnable command) { + command.run(); + } +} \ No newline at end of file diff --git a/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.kt b/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.kt index d28e24b9..5b5fc58f 100644 --- a/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.kt +++ b/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.kt @@ -16,8 +16,8 @@ import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Rule import org.junit.Test -import org.mockito.Mockito.`when` -import org.mockito.Mockito.mock +import org.mockito.Mockito.* +import java.util.concurrent.Executor class AcademyRepositoryTest { @@ -26,7 +26,8 @@ class AcademyRepositoryTest { private val remote = mock(RemoteDataSource::class.java) private val local = mock(LocalDataSource::class.java) - private val appExecutors = mock(AppExecutors::class.java) + private val exercutor = Executor { it.run() } + private val appExecutors = AppExecutors(exercutor, exercutor, exercutor) private val academyRepository = FakeAcademyRepository(remote, local, appExecutors) @@ -99,4 +100,20 @@ class AcademyRepositoryTest { assertNotNull(courseEntities.data?.mCourse?.title) assertEquals(courseResponses[0].title, courseEntities.data?.mCourse?.title) } + + @Test + fun setCourseBookmark() { + val dummy = DataDummy.generateDummyCourses()[0] + + academyRepository.setCourseBookmark(dummy, true) + verify(local, times(1)).setCourseBookmark(dummy, true) + } + + @Test + fun setReadModule() { + val dummy = DataDummy.generateDummyModules("a")[0] + + academyRepository.setReadModule(dummy) + verify(local, times(1)).setReadModule(dummy) + } } \ No newline at end of file diff --git a/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/ui/bookmark/BookmarkViewModelTest.kt b/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/ui/bookmark/BookmarkViewModelTest.kt index 43559039..04e2b9a3 100644 --- a/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/ui/bookmark/BookmarkViewModelTest.kt +++ b/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/ui/bookmark/BookmarkViewModelTest.kt @@ -43,7 +43,7 @@ class BookmarkViewModelTest { `when`(academyRepository.getBookmarkedCourses()).thenReturn(courses) val courseEntities = viewModel.getBookmarks().value - verify(academyRepository).getBookmarkedCourses() + verify(academyRepository).getBookmarkedCourses() assertNotNull(courseEntities) assertEquals(5, courseEntities?.size) diff --git a/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.kt b/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.kt index 9ada204d..1aaa8715 100644 --- a/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.kt +++ b/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.kt @@ -7,11 +7,13 @@ import com.dicoding.academies.data.AcademyRepository import com.dicoding.academies.data.source.local.entity.CourseWithModule import com.dicoding.academies.utils.DataDummy import com.dicoding.academies.vo.Resource +import com.nhaarman.mockitokotlin2.doNothing import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock +import org.mockito.Mockito import org.mockito.Mockito.`when` import org.mockito.Mockito.verify import org.mockito.junit.MockitoJUnitRunner @@ -49,4 +51,20 @@ class DetailCourseViewModelTest { verify(observer).onChanged(dummyCourseWithModule) } + + @Test + fun setBookmark() { + val dummyCourseWithModule = Resource.success(DataDummy.generateDummyCourseWithModules(dummyCourse, false)) + val course = MutableLiveData>() + course.value = dummyCourseWithModule + + `when`(academyRepository.getCourseWithModules(courseId)).thenReturn(course) + viewModel.courseModule.observeForever(observer) + + doNothing().`when`(academyRepository).setCourseBookmark(dummyCourse, true) + + viewModel.setBookmark() + + verify(academyRepository).setCourseBookmark(dummyCourse, true) + } } \ No newline at end of file diff --git a/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/ui/reader/CourseReaderViewModelTest.kt b/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/ui/reader/CourseReaderViewModelTest.kt index d881bdc1..7b9e922d 100644 --- a/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/ui/reader/CourseReaderViewModelTest.kt +++ b/Project Academy/11. Pagination/kotlin/app/src/test/java/com/dicoding/academies/ui/reader/CourseReaderViewModelTest.kt @@ -45,7 +45,7 @@ class CourseReaderViewModelTest { viewModel.setSelectedModule(moduleId) val dummyModule = dummyModules[0] - dummyModule.contentEntity = ContentEntity("

"+dummyModule.title+"

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

") + dummyModule.contentEntity = ContentEntity("

" + dummyModule.title + "

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

") } @Test diff --git a/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.java b/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.java index d90636f8..d4048cc0 100644 --- a/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.java +++ b/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.java @@ -17,6 +17,7 @@ import com.dicoding.academies.utils.DataDummy; import com.dicoding.academies.utils.LiveDataTestUtil; import com.dicoding.academies.utils.PagedListUtil; +import com.dicoding.academies.utils.TestExecutor; import com.dicoding.academies.vo.Resource; import org.junit.Rule; @@ -24,10 +25,12 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Executor; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -38,7 +41,9 @@ public class AcademyRepositoryTest { private RemoteDataSource remote = mock(RemoteDataSource.class); private LocalDataSource local = mock(LocalDataSource.class); - private AppExecutors appExecutors = mock(AppExecutors.class); + private Executor executor = new TestExecutor(); + + private AppExecutors appExecutors = new AppExecutors(executor, executor, executor); private FakeAcademyRepository academyRepository = new FakeAcademyRepository(remote, local, appExecutors); @@ -111,4 +116,20 @@ public void getCourseWithModules() { assertNotNull(courseEntities.data.mCourse.getTitle()); assertEquals(courseResponses.get(0).getTitle(), courseEntities.data.mCourse.getTitle()); } + + @Test + public void setCourseBookmark() { + CourseEntity dummy = DataDummy.generateDummyCourses().get(0); + + academyRepository.setCourseBookmark(dummy, true); + verify(local, times(1)).setCourseBookmark(dummy, true); + } + + @Test + public void setReadModule() { + ModuleEntity dummy = DataDummy.generateDummyModules("a").get(0); + + academyRepository.setReadModule(dummy); + verify(local, times(1)).setReadModule(dummy); + } } \ No newline at end of file diff --git a/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/ui/bookmark/BookmarkViewModelTest.java b/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/ui/bookmark/BookmarkViewModelTest.java index 401d9c60..cb90af1a 100644 --- a/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/ui/bookmark/BookmarkViewModelTest.java +++ b/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/ui/bookmark/BookmarkViewModelTest.java @@ -7,6 +7,9 @@ import com.dicoding.academies.data.AcademyRepository; import com.dicoding.academies.data.source.local.entity.CourseEntity; +import com.dicoding.academies.data.source.local.entity.CourseWithModule; +import com.dicoding.academies.utils.DataDummy; +import com.dicoding.academies.vo.Resource; import org.junit.Before; import org.junit.Rule; @@ -19,6 +22,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -59,4 +64,14 @@ public void getBookmark() { viewModel.getBookmarks().observeForever(observer); verify(observer).onChanged(dummyCourses); } + + @Test + public void setBookmark() { + CourseEntity entity = DataDummy.generateDummyCourses().get(0); + doNothing().when(academyRepository).setCourseBookmark(entity, true); + + viewModel.setBookmark(entity); + + verify(academyRepository).setCourseBookmark(entity, true); + } } \ No newline at end of file diff --git a/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.java b/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.java index 466f28b4..476e8f90 100644 --- a/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.java +++ b/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.java @@ -20,6 +20,7 @@ import java.util.ArrayList; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -57,4 +58,21 @@ public void getCourseWithModule() { verify(observer).onChanged(dummyCourseWithModule); } + + @Test + public void setBookmark() { + Resource dummyCourseWithModule = Resource.success(DataDummy.generateDummyCourseWithModules(dummyCourse, false)); + MutableLiveData> course = new MutableLiveData<>(); + course.setValue(dummyCourseWithModule); + + when(academyRepository.getCourseWithModules(courseId)).thenReturn(course); + viewModel.courseModule.observeForever(observer); + + doNothing().when(academyRepository).setCourseBookmark(dummyCourse, true); + + viewModel.setBookmark(); + + verify(academyRepository).setCourseBookmark(dummyCourse, true); + } + } \ No newline at end of file diff --git a/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/utils/TestExecutor.java b/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/utils/TestExecutor.java new file mode 100644 index 00000000..c439bf63 --- /dev/null +++ b/Project Academy/12. Pagination-test/java/app/src/test/java/com/dicoding/academies/utils/TestExecutor.java @@ -0,0 +1,10 @@ +package com.dicoding.academies.utils; + +import java.util.concurrent.Executor; + +public class TestExecutor implements Executor { + @Override + public void execute(Runnable command) { + command.run(); + } +} \ No newline at end of file diff --git a/Project Academy/12. Pagination-test/kotlin/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.kt b/Project Academy/12. Pagination-test/kotlin/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.kt index 16025f1d..34254cc8 100644 --- a/Project Academy/12. Pagination-test/kotlin/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.kt +++ b/Project Academy/12. Pagination-test/kotlin/app/src/test/java/com/dicoding/academies/data/AcademyRepositoryTest.kt @@ -19,6 +19,7 @@ import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Rule import org.junit.Test +import org.mockito.Mockito import org.mockito.Mockito.`when` import org.mockito.Mockito.mock @@ -102,4 +103,20 @@ class AcademyRepositoryTest { assertNotNull(courseEntities.data?.mCourse?.title) assertEquals(courseResponses[0].title, courseEntities.data?.mCourse?.title) } + + @Test + fun setCourseBookmark() { + val dummy = DataDummy.generateDummyCourses()[0] + + academyRepository.setCourseBookmark(dummy, true) + verify(local, Mockito.times(1)).setCourseBookmark(dummy, true) + } + + @Test + fun setReadModule() { + val dummy = DataDummy.generateDummyModules("a")[0] + + academyRepository.setReadModule(dummy) + verify(local, Mockito.times(1)).setReadModule(dummy) + } } \ No newline at end of file diff --git a/Project Academy/12. Pagination-test/kotlin/app/src/test/java/com/dicoding/academies/ui/bookmark/BookmarkViewModelTest.kt b/Project Academy/12. Pagination-test/kotlin/app/src/test/java/com/dicoding/academies/ui/bookmark/BookmarkViewModelTest.kt index b46209c2..0afff03a 100644 --- a/Project Academy/12. Pagination-test/kotlin/app/src/test/java/com/dicoding/academies/ui/bookmark/BookmarkViewModelTest.kt +++ b/Project Academy/12. Pagination-test/kotlin/app/src/test/java/com/dicoding/academies/ui/bookmark/BookmarkViewModelTest.kt @@ -8,6 +8,7 @@ import androidx.paging.PositionalDataSource import com.dicoding.academies.data.AcademyRepository import com.dicoding.academies.data.source.local.entity.CourseEntity import com.dicoding.academies.utils.DataDummy +import com.nhaarman.mockitokotlin2.doNothing import org.junit.Assert import org.junit.Assert.assertEquals import org.junit.Before @@ -69,6 +70,23 @@ class BookmarkViewModelTest { Assert.assertTrue("size of data should be 0, actual is $actualValueDataSize", actualValueDataSize == 0) } + @Test + fun `setBookmark should add favorite to database`() { + val dummyCourse = DataDummy.generateDummyCourses()[0] + doNothing().`when`(academyRepository).setCourseBookmark(dummyCourse, true) + viewModel.setBookmark(dummyCourse) + verify(academyRepository).setCourseBookmark(dummyCourse, true) + } + + @Test + fun `setBookmark should remove favorite from database`(){ + val dummyCourse = DataDummy.generateDummyCourses()[0] + dummyCourse.bookmarked = true + doNothing().`when`(academyRepository).setCourseBookmark(dummyCourse, false) + viewModel.setBookmark(dummyCourse) + verify(academyRepository).setCourseBookmark(dummyCourse, false) + } + class PagedTestDataSources private constructor(private val items: List) : PositionalDataSource() { companion object { fun snapshot(items: List = listOf()): PagedList { diff --git a/Project Academy/12. Pagination-test/kotlin/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.kt b/Project Academy/12. Pagination-test/kotlin/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.kt index 2a2e380e..d7f201c5 100644 --- a/Project Academy/12. Pagination-test/kotlin/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.kt +++ b/Project Academy/12. Pagination-test/kotlin/app/src/test/java/com/dicoding/academies/ui/detail/DetailCourseViewModelTest.kt @@ -13,8 +13,7 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock -import org.mockito.Mockito.`when` -import org.mockito.Mockito.verify +import org.mockito.Mockito.* import org.mockito.junit.MockitoJUnitRunner @RunWith(MockitoJUnitRunner::class) @@ -56,20 +55,37 @@ class DetailCourseViewModelTest { } @Test - fun `setBookmark should be success trigger courseModule observer`() { + fun `setBookmark should not add favorite when courseModule is empty`() { + viewModel.setBookmark() + verify(academyRepository, times(0)).setCourseBookmark(dummyCourse, true) + } + + @Test + fun `setBookmark should add favorite when courseModule is not empty and not bookmarked`() { val expected = MutableLiveData>() - expected.value = Resource.success(DataDummy.generateDummyCourseWithModules(dummyCourse, true)) + expected.value = Resource.success(DataDummy.generateDummyCourseWithModules(dummyCourse, false)) `when`(academyRepository.getCourseWithModules(courseId)).thenReturn(expected) + viewModel.courseModule.observeForever(observer) + + doNothing().`when`(academyRepository).setCourseBookmark(dummyCourse, true) viewModel.setBookmark() - viewModel.courseModule.observeForever(observer) + verify(academyRepository, times(1)).setCourseBookmark(dummyCourse, true) + } - verify(observer).onChanged(expected.value) + @Test + fun `setBookmark should remove from favorite when courseModule is not empty and already bookmarked`() { + val expected = MutableLiveData>() + expected.value = Resource.success(DataDummy.generateDummyCourseWithModules(dummyCourse, true)) - val expectedValue = expected.value - val actualValue = viewModel.courseModule.value + `when`(academyRepository.getCourseWithModules(courseId)).thenReturn(expected) + viewModel.courseModule.observeForever(observer) - assertEquals(expectedValue, actualValue) + doNothing().`when`(academyRepository).setCourseBookmark(dummyCourse, false) + + viewModel.setBookmark() + verify(academyRepository, times(1)).setCourseBookmark(dummyCourse, false) } + } \ No newline at end of file