From 2aa978117f00d70fed06fd5fb3bdc5bdf37f5a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ho=C3=A0ng=20Minh=20=C4=90=E1=BB=A9c?= Date: Mon, 16 Dec 2024 00:37:35 +0700 Subject: [PATCH] update ui test --- .idea/androidTestResultsUserPreferences.xml | 111 ++++++++++++ .idea/deploymentTargetSelector.xml | 15 ++ app/build.gradle.kts | 1 + .../components_test/ArtistCardTest.kt | 70 +++++++- .../components_test/FriendCardTest.kt | 113 ++++++++++++ .../components_test/NavigationDrawerTest.kt | 53 ------ .../harmonyhub/home_test/HomeScreenTest.kt | 80 ++------- .../library_test/AlbumScreenTest.kt | 122 +++++++++++++ .../library_test/ArtistScreenTest.kt | 163 +++++++++--------- .../ArtistsFollowingScreenTest.kt | 129 -------------- .../library_test/ChartsScreenTest.kt | 153 ++++++++++++++++ .../library_test/LibraryScreenTest.kt | 109 ------------ .../library_test/PlaylistScreenTest.kt | 100 ----------- .../library_test/PlaylistSongListTest.kt | 133 -------------- .../harmonyhub/library_test/SongListTest.kt | 112 ------------ .../profile_test/ProfileScreenTest.kt | 96 ----------- gradle/libs.versions.toml | 2 + 17 files changed, 677 insertions(+), 885 deletions(-) create mode 100644 app/src/androidTest/java/com/example/harmonyhub/components_test/FriendCardTest.kt delete mode 100644 app/src/androidTest/java/com/example/harmonyhub/components_test/NavigationDrawerTest.kt create mode 100644 app/src/androidTest/java/com/example/harmonyhub/library_test/AlbumScreenTest.kt delete mode 100644 app/src/androidTest/java/com/example/harmonyhub/library_test/ArtistsFollowingScreenTest.kt create mode 100644 app/src/androidTest/java/com/example/harmonyhub/library_test/ChartsScreenTest.kt delete mode 100644 app/src/androidTest/java/com/example/harmonyhub/library_test/LibraryScreenTest.kt delete mode 100644 app/src/androidTest/java/com/example/harmonyhub/library_test/PlaylistScreenTest.kt delete mode 100644 app/src/androidTest/java/com/example/harmonyhub/library_test/PlaylistSongListTest.kt delete mode 100644 app/src/androidTest/java/com/example/harmonyhub/library_test/SongListTest.kt delete mode 100644 app/src/androidTest/java/com/example/harmonyhub/profile_test/ProfileScreenTest.kt diff --git a/.idea/androidTestResultsUserPreferences.xml b/.idea/androidTestResultsUserPreferences.xml index 985b896..ed1f2f0 100644 --- a/.idea/androidTestResultsUserPreferences.xml +++ b/.idea/androidTestResultsUserPreferences.xml @@ -3,6 +3,19 @@ @@ -161,6 +188,19 @@ + + + + + + + @@ -259,6 +299,7 @@ + @@ -291,6 +332,19 @@ + + + + + + + @@ -311,6 +365,7 @@ + @@ -330,6 +385,19 @@ + + + + + + + @@ -337,6 +405,7 @@ + @@ -383,6 +452,19 @@ + + + + + + + @@ -442,6 +524,7 @@ + @@ -468,6 +551,7 @@ + @@ -565,6 +649,19 @@ + + + + + + + @@ -604,6 +701,19 @@ + + + + + + + @@ -650,6 +760,7 @@ + diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index ff1b812..08aa25a 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -13,6 +13,21 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a82d0be..fac21f6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -71,6 +71,7 @@ dependencies { implementation(libs.firebase.auth) implementation(libs.firebase.auth.ktx) implementation(libs.firebase.firestore) + implementation(libs.androidx.navigation.testing) testImplementation(libs.junit) androidTestImplementation("org.mockito:mockito-core:4.9.0") androidTestImplementation(libs.androidx.junit) diff --git a/app/src/androidTest/java/com/example/harmonyhub/components_test/ArtistCardTest.kt b/app/src/androidTest/java/com/example/harmonyhub/components_test/ArtistCardTest.kt index 7bfbc5e..63bad46 100644 --- a/app/src/androidTest/java/com/example/harmonyhub/components_test/ArtistCardTest.kt +++ b/app/src/androidTest/java/com/example/harmonyhub/components_test/ArtistCardTest.kt @@ -1,22 +1,86 @@ package com.example.harmonyhub.components_test -import androidx.compose.ui.test.assert import androidx.compose.ui.test.assertIsDisplayed -import androidx.compose.ui.test.hasText import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick +import androidx.test.ext.junit.runners.AndroidJUnit4 import com.example.harmonyhub.ui.components.ArtistsCard +import com.example.harmonyhub.ui.theme.HarmonyHubTheme import org.junit.Rule import org.junit.Test +import org.junit.runner.RunWith - +@RunWith(AndroidJUnit4::class) class ArtistsCardTest { @get:Rule val composeTestRule = createComposeRule() + @Test + fun artistsCard_DisplaysArtistInfoCorrectly() { + // Arrange: Khởi tạo dữ liệu giả + val artistName = "Taylor Swift" + val artistImg = "https://example.com/taylor_swift.jpg" + + composeTestRule.setContent { + HarmonyHubTheme { + ArtistsCard( + artistName = artistName, + artistImg = artistImg, + onArtistCardClick = {} + ) + } + } + + // Act & Assert: Kiểm tra tên nghệ sĩ hiển thị chính xác + composeTestRule.onNodeWithText(artistName).assertIsDisplayed() + + // Act & Assert: Kiểm tra hình ảnh có mô tả đúng + composeTestRule.onNodeWithContentDescription("Photo").assertIsDisplayed() + } + + @Test + fun artistsCard_HandlesClickAction() { + // Arrange: Biến để kiểm tra sự kiện click + var clicked = false + composeTestRule.setContent { + HarmonyHubTheme { + ArtistsCard( + artistName = "Ed Sheeran", + artistImg = "https://example.com/ed_sheeran.jpg", + onArtistCardClick = { clicked = true } + ) + } + } + // Act: Nhấn vào thẻ nghệ sĩ + composeTestRule.onNodeWithContentDescription("Photo").performClick() + + // Assert: Kiểm tra biến `clicked` thay đổi sau khi click + assert(clicked) + } + + @Test + fun artistsCard_ShowsPlaceholderWhenImageFailsToLoad() { + // Arrange: Dùng một đường dẫn hình ảnh không hợp lệ + val artistName = "Adele" + val invalidArtistImg = "https://example.com/invalid_image.jpg" + + composeTestRule.setContent { + HarmonyHubTheme { + ArtistsCard( + artistName = artistName, + artistImg = invalidArtistImg, + onArtistCardClick = {} + ) + } + } + + // Act & Assert: Kiểm tra hiển thị hình ảnh lỗi + composeTestRule.onNodeWithContentDescription("Photo").assertIsDisplayed() + } } + diff --git a/app/src/androidTest/java/com/example/harmonyhub/components_test/FriendCardTest.kt b/app/src/androidTest/java/com/example/harmonyhub/components_test/FriendCardTest.kt new file mode 100644 index 0000000..0ef2c92 --- /dev/null +++ b/app/src/androidTest/java/com/example/harmonyhub/components_test/FriendCardTest.kt @@ -0,0 +1,113 @@ +package com.example.harmonyhub.components_test + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Person +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.example.harmonyhub.R +import com.example.harmonyhub.ui.components.Friend +import com.example.harmonyhub.ui.components.FriendCard +import com.example.harmonyhub.ui.theme.HarmonyHubTheme +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class FriendCardTest { + + @get:Rule + val composeTestRule = createComposeRule() + + @Test + fun friendCard_DisplaysFriendInfoCorrectly() { + val friend = Friend( + name = "John Doe", + email = "john.doe@example.com", + imageResId = R.drawable.ic_broken_image + ) + + composeTestRule.setContent { + HarmonyHubTheme { + FriendCard( + friend = friend, + screenType = "Friends", + onMoreClick = {}, + onAcceptClick = {}, + onRejectClick = {} + ) + } + } + + // Kiểm tra hiển thị tên và email + composeTestRule.onNodeWithText("John Doe").assertIsDisplayed() + composeTestRule.onNodeWithText("john.doe@example.com").assertIsDisplayed() + + // Kiểm tra nút "More Options" + composeTestRule.onNodeWithContentDescription("More Options").assertIsDisplayed() + } + + @Test + fun friendCard_ButtonsWorkCorrectly_AcceptReject() { + val friend = Friend( + name = "Jane Smith", + email = "jane.smith@example.com", + imageResId = R.drawable.ic_broken_image + ) + var acceptClicked = false + var rejectClicked = false + + composeTestRule.setContent { + HarmonyHubTheme { + FriendCard( + friend = friend, + screenType = "Requests", + onMoreClick = {}, + onAcceptClick = { acceptClicked = true }, + onRejectClick = { rejectClicked = true } + ) + } + } + + // Kiểm tra nút "Accept" + composeTestRule.onNodeWithContentDescription("Accept").assertIsDisplayed() + composeTestRule.onNodeWithContentDescription("Accept").performClick() + assert(acceptClicked) + + // Kiểm tra nút "Reject" + composeTestRule.onNodeWithContentDescription("Reject").assertIsDisplayed() + composeTestRule.onNodeWithContentDescription("Reject").performClick() + assert(rejectClicked) + } + + @Test + fun friendCard_HidesAcceptRejectButtons_WhenScreenTypeIsFriends() { + val friend = Friend( + name = "Emily Johnson", + email = "emily.johnson@example.com", + imageResId = R.drawable.ic_broken_image + ) + + composeTestRule.setContent { + HarmonyHubTheme { + FriendCard( + friend = friend, + screenType = "Friends", + onMoreClick = {}, + onAcceptClick = {}, + onRejectClick = {} + ) + } + } + + // Kiểm tra nút "More Options" có hiển thị + composeTestRule.onNodeWithContentDescription("More Options").assertIsDisplayed() + + // Đảm bảo các nút "Accept" và "Reject" không xuất hiện + composeTestRule.onNodeWithContentDescription("Accept").assertDoesNotExist() + composeTestRule.onNodeWithContentDescription("Reject").assertDoesNotExist() + } +} diff --git a/app/src/androidTest/java/com/example/harmonyhub/components_test/NavigationDrawerTest.kt b/app/src/androidTest/java/com/example/harmonyhub/components_test/NavigationDrawerTest.kt deleted file mode 100644 index 40e1285..0000000 --- a/app/src/androidTest/java/com/example/harmonyhub/components_test/NavigationDrawerTest.kt +++ /dev/null @@ -1,53 +0,0 @@ -package com.example.harmonyhub.components_test - -import androidx.compose.material3.Text -import androidx.compose.material3.TextButton -import androidx.compose.ui.test.assertIsDisplayed -import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.test.onNodeWithText -import androidx.compose.ui.test.performClick -import com.example.harmonyhub.ui.components.AppScaffoldWithDrawer -import org.junit.Rule -import org.junit.Test - -class NavigationDrawerTest { - @get:Rule - val composeTestRule = createComposeRule() - -// @Test -// fun testDrawerBehavior() { -// var profileClicked = false -// var settingsClicked = false -// var logoutClicked = false -// -// composeTestRule.setContent { -// AppScaffoldWithDrawer( -// onProfileClicked = { profileClicked = true }, -// onSettingsClicked = { settingsClicked = true }, -// onLogoutClicked = { logoutClicked = true }, -// content = { onOpenDrawer -> -// TextButton(onClick = onOpenDrawer) { -// Text("Mở Drawer") -// } -// } -// ) -// } -// -// // Kiểm tra Drawer mở khi nhấn "Mở Drawer" -// composeTestRule.onNodeWithText("Mở Drawer").performClick() -// composeTestRule.onNodeWithText("Hồ sơ").assertIsDisplayed() -// -// // Kiểm tra callback khi nhấn "Hồ sơ" -// composeTestRule.onNodeWithText("Hồ sơ").performClick() -// assert(profileClicked) -// -// // Kiểm tra callback khi nhấn "Cài đặt" -// composeTestRule.onNodeWithText("Cài đặt").performClick() -// assert(settingsClicked) -// -// // Kiểm tra callback khi nhấn "Đăng xuất" -// composeTestRule.onNodeWithText("Đăng xuất").performClick() -// assert(logoutClicked) -// } -} - diff --git a/app/src/androidTest/java/com/example/harmonyhub/home_test/HomeScreenTest.kt b/app/src/androidTest/java/com/example/harmonyhub/home_test/HomeScreenTest.kt index b17bfd2..1880a50 100644 --- a/app/src/androidTest/java/com/example/harmonyhub/home_test/HomeScreenTest.kt +++ b/app/src/androidTest/java/com/example/harmonyhub/home_test/HomeScreenTest.kt @@ -1,16 +1,13 @@ package com.example.harmonyhub.home_test -import androidx.activity.compose.setContent -import androidx.compose.ui.test.* +import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.performClick import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.example.harmonyhub.data.network.AlbumOut -import com.example.harmonyhub.data.network.ArtistOut -import com.example.harmonyhub.data.network.ChartOut -import com.example.harmonyhub.data.network.ResponseHomeScreenData import com.example.harmonyhub.ui.home.ErrorScreen import com.example.harmonyhub.ui.home.LoadingScreen -import com.example.harmonyhub.ui.home.MainHomeScreen import com.example.harmonyhub.ui.theme.HarmonyHubTheme import org.junit.Rule import org.junit.Test @@ -29,13 +26,13 @@ class HomeScreenTest { LoadingScreen() } } - composeTestRule - .onNodeWithTag("Circular Progress Indicator") - .assertExists() + + composeTestRule.onNodeWithTag("Circular Progress Indicator") + .assertIsDisplayed() } @Test - fun errorScreen_isDisplayed_and_refreshButtonWorks() { + fun errorScreen_isDisplayed_andRefreshButtonWorks() { var refreshClicked = false composeTestRule.setContent { @@ -44,66 +41,15 @@ class HomeScreenTest { } } - // Kiểm tra rằng hình ảnh lỗi kết nối được hiển thị - composeTestRule - .onNodeWithTag("Error") - .assertExists("Connection error image not displayed") + // Kiểm tra màn hình lỗi hiển thị + composeTestRule.onNodeWithTag("Error") + .assertIsDisplayed() - // Nhấn nút refresh và kiểm tra lambda đã được gọi chưa - composeTestRule - .onNodeWithContentDescription("Refresh") + // Nhấn nút refresh và kiểm tra sự kiện + composeTestRule.onNodeWithContentDescription("Refresh") .performClick() assert(refreshClicked) } - -// @Test -// fun homeScreen_displaysUserName_andGenres() { -// composeTestRule.setContent { -// HarmonyHubTheme { -// MainHomeScreen( -// onSearchButtonClicked = {}, -// onPlayButtonClicked = {}, -// onLibraryButtonClicked = {}, -// onProfileButtonClicked = {}, -// onLogoutButtonClicked = {}, -// onSettingsButtonClicked = {}, -// nameUser = "Test User", -// resPopularItem = fakeResponseData(), // Sử dụng dữ liệu giả lập -// navController = null -// ) -// } -// } -// -// // Kiểm tra tên người dùng có hiển thị không -// composeTestRule -// .onNodeWithText("Test User") -// .assertIsDisplayed() -// -// // Kiểm tra xem tiêu đề "Thể loại" có hiển thị không -// composeTestRule -// .onNodeWithText("Thể loại") -// .assertIsDisplayed() -// -// // Kiểm tra "V-Pop" xuất hiện trong danh sách thể loại -// composeTestRule -// .onNodeWithText("V-Pop") -// .assertIsDisplayed() -// } } -// Hàm tạo dữ liệu giả lập -private fun fakeResponseData(): ResponseHomeScreenData { - return ResponseHomeScreenData( - listPopularArtist = mutableListOf( - ArtistOut(id = "1", name = "Sơn Tùng M-TP", image = "artist1.png"), - ArtistOut(id = "2", name = "IU", image = "artist2.png") - ), - listPopularAlbums = mutableListOf( - AlbumOut(id = "1", name = "Sky Tour", image = "album1.png", listArtist = emptyList()) - ), - listChart = mutableListOf( - ChartOut(id = "1", name = "Top Hits", image = "chart1.png") - ) - ) -} diff --git a/app/src/androidTest/java/com/example/harmonyhub/library_test/AlbumScreenTest.kt b/app/src/androidTest/java/com/example/harmonyhub/library_test/AlbumScreenTest.kt new file mode 100644 index 0000000..6e9f01b --- /dev/null +++ b/app/src/androidTest/java/com/example/harmonyhub/library_test/AlbumScreenTest.kt @@ -0,0 +1,122 @@ +package com.example.harmonyhub.library_test + +import androidx.compose.ui.test.* +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.example.harmonyhub.ui.components.Song +import com.example.harmonyhub.ui.library.AlbumScreen +import com.example.harmonyhub.ui.theme.HarmonyHubTheme +import org.junit.Rule +import org.junit.Test + +class AlbumScreenTest { + + @get:Rule + val composeTestRule = createComposeRule() + + @Test + fun albumScreen_DisplaysCorrectAlbumName() { + // Arrange + composeTestRule.setContent { + HarmonyHubTheme { + AlbumScreen( + idAlbum = "1", + onSongClick = {}, + onBackButtonClicked = {}, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {} + ) + } + } + } + + @Test + fun albumScreen_DisplaysSongList() { + // Arrange + composeTestRule.setContent { + HarmonyHubTheme { + AlbumScreen( + idAlbum = "1", + onSongClick = {}, + onBackButtonClicked = {}, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {} + ) + } + } + } + + @Test + fun albumScreen_BackButtonWorks() { + // Arrange + var backButtonClicked = false + composeTestRule.setContent { + HarmonyHubTheme { + AlbumScreen( + idAlbum = "1", + onSongClick = {}, + onBackButtonClicked = { backButtonClicked = true }, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {} + ) + } + } + + // Act + composeTestRule.onNodeWithContentDescription("Back") + .performClick() + + // Assert + assert(backButtonClicked) // Verifies that the back button was clicked + } + + @Test + fun albumScreen_ShowsBottomSheetWhenMoreClicked() { + // Arrange + var isBottomSheetVisible = false + composeTestRule.setContent { + HarmonyHubTheme { + AlbumScreen( + idAlbum = "1", + onSongClick = {}, + onBackButtonClicked = {}, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {} + ) + } + } + // Assert + composeTestRule.onNodeWithTag("BottomSheet") + } + + @Test + fun albumScreen_HandlesNoSongs() { + // Arrange + val emptySongs = emptyList() + composeTestRule.setContent { + HarmonyHubTheme { + AlbumScreen( + idAlbum = "1", + onSongClick = {}, + onBackButtonClicked = {}, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {} + ) + } + } + + // Act & Assert + composeTestRule.onNodeWithText("No songs available") + } +} diff --git a/app/src/androidTest/java/com/example/harmonyhub/library_test/ArtistScreenTest.kt b/app/src/androidTest/java/com/example/harmonyhub/library_test/ArtistScreenTest.kt index 6fc8f71..3d8e934 100644 --- a/app/src/androidTest/java/com/example/harmonyhub/library_test/ArtistScreenTest.kt +++ b/app/src/androidTest/java/com/example/harmonyhub/library_test/ArtistScreenTest.kt @@ -1,92 +1,89 @@ package com.example.harmonyhub.library_test -import androidx.activity.compose.setContent -import androidx.compose.ui.test.* +import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick import androidx.test.ext.junit.runners.AndroidJUnit4 import com.example.harmonyhub.ui.library.ArtistScreen -import com.example.harmonyhub.ui.theme.HarmonyHubTheme import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith -//@RunWith(AndroidJUnit4::class) -//class ArtistScreenTest { -// -// @get:Rule -// val composeTestRule = createComposeRule() -// -// @Test -// fun artistScreen_displaysArtistName_andControls() { -// composeTestRule.setContent { -// HarmonyHubTheme { -// ArtistScreen( -// artist = "Jack - J97", -// onSongClick = {} -// ) -// } -// } -// -// // Kiểm tra tên nghệ sĩ được hiển thị -// composeTestRule -// .onNodeWithTag("Song Name") -// .assertIsDisplayed() -// -// // Kiểm tra nút "Follow" được hiển thị -// composeTestRule -// .onNodeWithText("Follow") -// .assertIsDisplayed() -// -// // Kiểm tra nút "Play" được hiển thị -// composeTestRule -// .onNodeWithContentDescription("Play") -// .assertIsDisplayed() -// -// // Kiểm tra nút "Share" được hiển thị -// composeTestRule -// .onNodeWithContentDescription("Share") -// .assertIsDisplayed() -// } -// -// @Test -// fun artistScreen_displaysSongsList() { -// composeTestRule.setContent { -// HarmonyHubTheme { -// ArtistScreen( -// artist = "Jack - J97", -// onSongClick = {} -// ) -// } -// } -// -// // Kiểm tra tiêu đề "Popular releases" được hiển thị -// composeTestRule -// .onNodeWithTag("Song List") -// .assertIsDisplayed() -// -// // Kiểm tra danh sách bài hát được hiển thị -// val songTitles = listOf("Thiên Lý Ơi") // Mock tên bài hát -// songTitles.forEach { title -> -// composeTestRule -// .onNodeWithText(title) -// .assertIsDisplayed() -// } -// } -// -// @Test -// fun artistScreen_displaysNoSongsMessage_whenEmpty() { -// composeTestRule.setContent { -// HarmonyHubTheme { -// ArtistScreen( -// artist = "Unknown Artist", -// onSongClick = {} -// ) -// } -// } -// -// // Kiểm tra thông báo "No songs available" được hiển thị khi không có bài hát -// composeTestRule -// .onNodeWithText("No songs available") -// .assertIsDisplayed() -// } -//} +@RunWith(AndroidJUnit4::class) +class ArtistScreenTest { + + @get:Rule + val composeTestRule = createComposeRule() + + @Test + fun artistScreen_backButtonWorks() { + var backClicked = false + composeTestRule.setContent { + ArtistScreen( + myArtist = "Kendrick Lamar", + onSongClick = {}, + onBackButtonClicked = { backClicked = true }, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {}, + onAlbumClicked = {} + ) + } + + // Kiểm tra nút Back hoạt động + composeTestRule.onNodeWithContentDescription("Back").performClick() + assert(backClicked) + } + + @Test + fun artistScreen_followButtonWorks() { + composeTestRule.setContent { + ArtistScreen( + myArtist = "Kendrick Lamar", + onSongClick = {}, + onBackButtonClicked = {}, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {}, + onAlbumClicked = {} + ) + } + + // Kiểm tra nút Follow hiển thị + composeTestRule.onNodeWithText("Follow").assertIsDisplayed() + + // Click nút Follow + composeTestRule.onNodeWithText("Follow").performClick() + } + + + @Test + fun artistScreen_displaysPopularReleasesAndAlbums() { + composeTestRule.setContent { + ArtistScreen( + myArtist = "Kendrick Lamar", + onSongClick = {}, + onBackButtonClicked = {}, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {}, + onAlbumClicked = {} + ) + } + + // Kiểm tra danh sách "Popular releases" + composeTestRule.onNodeWithText("Popular releases").assertIsDisplayed() + + // Kiểm tra một bài hát cụ thể hiển thị + composeTestRule.onNodeWithText("wacced out murals").assertIsDisplayed() + + // Kiểm tra danh sách "Albums" + composeTestRule.onNodeWithText("Albums").assertIsDisplayed() + } +} diff --git a/app/src/androidTest/java/com/example/harmonyhub/library_test/ArtistsFollowingScreenTest.kt b/app/src/androidTest/java/com/example/harmonyhub/library_test/ArtistsFollowingScreenTest.kt deleted file mode 100644 index 70ad368..0000000 --- a/app/src/androidTest/java/com/example/harmonyhub/library_test/ArtistsFollowingScreenTest.kt +++ /dev/null @@ -1,129 +0,0 @@ -package com.example.harmonyhub.library_test - -import androidx.compose.ui.test.* -import androidx.compose.ui.test.junit4.createComposeRule -import org.junit.Rule -import org.junit.Test -import com.example.harmonyhub.ui.library.ArtistsFollowingScreen -import com.example.harmonyhub.ui.theme.HarmonyHubTheme - -//class ArtistsFollowingScreenTest { -// -// @get:Rule -// val composeTestRule = createComposeRule() -// -// @Test -// fun testArtistsFollowingScreenUI() { -// // Thiết lập test với dữ liệu nghệ sĩ mẫu -// composeTestRule.setContent { -// HarmonyHubTheme { -// ArtistsFollowingScreen( -// onBackButtonClicked = {} -// ) -// } -// } -// -// // Kiểm tra xem tiêu đề "Nghệ sĩ đang theo dõi" có hiển thị không -// composeTestRule.onNodeWithText("Nghệ sĩ đang theo dõi") -// .assertIsDisplayed() -// -// // Kiểm tra xem nút quay lại có hiển thị không -// composeTestRule.onNodeWithContentDescription("Back") -// .assertIsDisplayed() -// -// // Kiểm tra xem nút "Thêm nghệ sĩ" có hiển thị không -// composeTestRule.onNodeWithContentDescription("Add") -// .assertIsDisplayed() -// -// // Kiểm tra xem ô tìm kiếm có hiển thị không -// composeTestRule.onNodeWithText("Tìm kiếm nghệ sĩ...") -// .assertIsDisplayed() -// -// // Kiểm tra xem danh sách nghệ sĩ có hiển thị không (ví dụ, kiểm tra 3 nghệ sĩ đầu tiên) -// composeTestRule.onNodeWithText("The Chainsmokers") -// .assertIsDisplayed() -// composeTestRule.onNodeWithText("Sia") -// .assertIsDisplayed() -// composeTestRule.onNodeWithText("Adele") -// .assertIsDisplayed() -// -// // Kiểm tra xem số lượng nghệ sĩ hiện tại có đúng không -// composeTestRule.onNodeWithText("3 nghệ sĩ") -// .assertIsDisplayed() -// -// // Kiểm tra xem nút "Xóa tất cả" có hiển thị không -// composeTestRule.onNodeWithText("Xóa tất cả") -// .assertIsDisplayed() -// } -// -// @Test -// fun testSearchFunctionality() { -// // Thiết lập test với dữ liệu nghệ sĩ mẫu -// composeTestRule.setContent { -// HarmonyHubTheme { -// ArtistsFollowingScreen( -// onBackButtonClicked = {} -// ) -// } -// } -// -// // Nhập từ khóa tìm kiếm "Sia" -// composeTestRule.onNodeWithText("Tìm kiếm nghệ sĩ...") -// .performTextInput("Sia") -// -// // Kiểm tra xem kết quả tìm kiếm có đúng số lượng không (1 nghệ sĩ) -// composeTestRule.onNodeWithText("1 nghệ sĩ") -// .assertIsDisplayed() -// -// // Kiểm tra xem "Xóa tất cả" có hiển thị đúng không -// composeTestRule.onNodeWithText("Xóa tất cả") -// .assertIsDisplayed() -// } -// -// @Test -// fun testClearSearchFunctionality() { -// // Thiết lập test với dữ liệu nghệ sĩ mẫu -// composeTestRule.setContent { -// HarmonyHubTheme { -// ArtistsFollowingScreen( -// onBackButtonClicked = {} -// ) -// } -// } -// -// // Nhập từ khóa tìm kiếm -// composeTestRule.onNodeWithText("Tìm kiếm nghệ sĩ...") -// .performTextInput("Sia") -// -// // Nhấn vào biểu tượng "Clear" để xóa từ khóa tìm kiếm -// composeTestRule.onNodeWithContentDescription("Clear") -// .performClick() -// -// // Kiểm tra xem ô tìm kiếm có được làm sạch không -// composeTestRule.onNodeWithText("Tìm kiếm nghệ sĩ...") -// .assertIsDisplayed() -// } -// -// @Test -// fun testAddArtistButtonAction() { -// var addArtistClicked = false -// // Thiết lập test với dữ liệu nghệ sĩ mẫu -// composeTestRule.setContent { -// HarmonyHubTheme { -// ArtistsFollowingScreen( -// onBackButtonClicked = {} -// ) -// } -// } -// -// // Mô phỏng hành động khi nhấn vào nút "Thêm nghệ sĩ" -// composeTestRule.onNodeWithContentDescription("Add") -// .performClick() -// -// // Kiểm tra xem hành động thêm nghệ sĩ có được thực hiện chưa -// addArtistClicked = true -// -// // Kiểm tra xem biến addArtistClicked có thành true không -// assert(addArtistClicked) -// } -//} diff --git a/app/src/androidTest/java/com/example/harmonyhub/library_test/ChartsScreenTest.kt b/app/src/androidTest/java/com/example/harmonyhub/library_test/ChartsScreenTest.kt new file mode 100644 index 0000000..7dd1f5a --- /dev/null +++ b/app/src/androidTest/java/com/example/harmonyhub/library_test/ChartsScreenTest.kt @@ -0,0 +1,153 @@ +package com.example.harmonyhub.library_test + +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.performClick +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.hasText +import androidx.compose.ui.test.isDisplayed +import androidx.compose.ui.test.isEnabled +import androidx.compose.ui.test.onNodeWithContentDescription +import com.example.harmonyhub.ui.library.ChartsScreen +import org.junit.Rule +import org.junit.Test + +class ChartsScreenTest { + + @get:Rule + val composeTestRule = createComposeRule() + + @Test + fun testChartsScreen_DisplayAlbumName() { + // Arrange + composeTestRule.setContent { + ChartsScreen( + idCharts = "1", + onSongClick = {}, + onBackButtonClicked = {}, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {} + ) + } + + // Assert + composeTestRule.onNodeWithText("Top Songs - Global").assertIsDisplayed() + } + + @Test + fun testChartsScreen_SongListVisible() { + // Arrange + composeTestRule.setContent { + ChartsScreen( + idCharts = "1", + onSongClick = {}, + onBackButtonClicked = {}, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {} + ) + } + + // Assert + composeTestRule.onNodeWithTag("Song List").assertIsDisplayed() + } + + @Test + fun testChartsScreen_SongClick() { + // Arrange + var songClicked = false + composeTestRule.setContent { + ChartsScreen( + idCharts = "1", + onSongClick = { songClicked = true }, + onBackButtonClicked = {}, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {} + ) + } + + // Act + composeTestRule.onNodeWithText("Die With A Smile").performClick() + + // Assert + assert(songClicked) { "Song click was not handled properly" } + } + + @Test + fun testBackButtonClick() { + // Arrange + var backClicked = false + composeTestRule.setContent { + ChartsScreen( + idCharts = "1", + onSongClick = {}, + onBackButtonClicked = { backClicked = true }, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {} + ) + } + + // Act + composeTestRule.onNodeWithContentDescription("Back").performClick() + + // Assert + assert(backClicked) { "Back button click was not handled properly" } + } + + @Test + fun testSongMoreOptions() { + // Arrange + var bottomSheetVisible = false + composeTestRule.setContent { + ChartsScreen( + idCharts = "1", + onSongClick = {}, + onBackButtonClicked = {}, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {} + ) + } + + // Act + composeTestRule.onNodeWithText("Die With A Smile") + + composeTestRule.onNodeWithContentDescription("More Options") + + } + + @Test + fun testBottomSheetClose() { + // Arrange + var bottomSheetVisible = false + composeTestRule.setContent { + ChartsScreen( + idCharts = "1", + onSongClick = {}, + onBackButtonClicked = {}, + onAddToPlaylistClicked = {}, + onAddToFavoriteClicked = {}, + onShareClicked = {}, + onDownloadClicked = {} + ) + } + + // Act + composeTestRule.onNodeWithText("Die With A Smile") + composeTestRule.onNodeWithText("More Options") + + composeTestRule.onNodeWithContentDescription("Dismiss") + + // Assert + composeTestRule.onNodeWithText("Add to Playlist").assertDoesNotExist() + } +} diff --git a/app/src/androidTest/java/com/example/harmonyhub/library_test/LibraryScreenTest.kt b/app/src/androidTest/java/com/example/harmonyhub/library_test/LibraryScreenTest.kt deleted file mode 100644 index c246fd0..0000000 --- a/app/src/androidTest/java/com/example/harmonyhub/library_test/LibraryScreenTest.kt +++ /dev/null @@ -1,109 +0,0 @@ -package com.example.harmonyhub.library_test - -import androidx.compose.ui.test.* -import androidx.compose.ui.test.junit4.createComposeRule -import org.junit.Rule -import org.junit.Test -import com.example.harmonyhub.data.SongRepository -import com.example.harmonyhub.ui.library.LibraryScreen -import com.example.harmonyhub.ui.theme.HarmonyHubTheme - -class LibraryScreenTest { - - @get:Rule - val composeTestRule = createComposeRule() - -// @Test -// fun testLibraryScreenDisplaysCorrectly() { -// composeTestRule.setContent { -// HarmonyHubTheme { -// LibraryScreen( -// onPlaySongClicked = {}, -// onProfileButtonClicked = {}, -// onViewAllRecentCLicked = {}, -// onFavoriteButtonClicked = {}, -// onDownloadButtonClicked = {}, -// onPlaylistButtonClicked = {}, -// onArtistsFollowingButtonClicked = {}, -// onLogoutButtonClicked = {}, -// onSettingsButtonClicked = {} -// ) -// } -// } -// -// // Act & Assert -// // Kiểm tra tiêu đề màn hình "Thư viện" -// composeTestRule.onNodeWithText("Thư viện").assertIsDisplayed() -// -// // Kiểm tra "Xem tất cả" có hiển thị không -// composeTestRule.onNodeWithText("Xem tất cả").assertIsDisplayed() -// -// // Kiểm tra danh sách các thẻ LibraryCard -// composeTestRule.onNodeWithText("Đã thích").assertIsDisplayed() -// composeTestRule.onNodeWithText("Tải xuống").assertIsDisplayed() -// composeTestRule.onNodeWithText("Playlists").assertIsDisplayed() -// composeTestRule.onNodeWithText("Nghệ sĩ").assertIsDisplayed() -// -// // Kiểm tra xem có đúng 5 bài hát được hiển thị -// composeTestRule.onAllNodesWithTag("SongCard").assertCountEquals(5) -// } - -// @Test -// fun testClickViewAllRecent() { -// // Arrange -// composeTestRule.setContent { -// HarmonyHubTheme { -// LibraryScreen( -// onPlaySongClicked = {}, -// onProfileButtonClicked = {}, -// onViewAllRecentCLicked = { -// // Kiểm tra xem phương thức có được gọi khi nhấp vào "Xem tất cả" -// println("Xem tất cả đã được nhấn!") -// }, -// onFavoriteButtonClicked = {}, -// onDownloadButtonClicked = {}, -// onPlaylistButtonClicked = {}, -// onArtistsFollowingButtonClicked = {}, -// onLogoutButtonClicked = {}, -// onSettingsButtonClicked = {} -// ) -// } -// } -// -// // Act -// // Nhấp vào "Xem tất cả" -// composeTestRule.onNodeWithText("Xem tất cả").performClick() -// -// } - -// @Test -// fun testClickSongCard() { -// // Arrange -// val songId = SongRepository.allSongs.first().id -// composeTestRule.setContent { -// HarmonyHubTheme { -// LibraryScreen( -// onPlaySongClicked = { id -> -// // Kiểm tra id bài hát đã được gửi khi nhấp vào -// assert(id == songId) -// }, -// onProfileButtonClicked = {}, -// onViewAllRecentCLicked = {}, -// onFavoriteButtonClicked = {}, -// onDownloadButtonClicked = {}, -// onPlaylistButtonClicked = {}, -// onArtistsFollowingButtonClicked = {}, -// onLogoutButtonClicked = {}, -// onSettingsButtonClicked = {} -// ) -// } -// } -// -// // Act -// // Nhấp vào card của bài hát -// composeTestRule.onNodeWithTag("SongCard").performClick() -// -// // Assert: Đã gọi onPlaySongClicked với đúng ID bài hát -// // (Kiểm tra assert trong phương thức xử lý đã được gọi) -// } -} diff --git a/app/src/androidTest/java/com/example/harmonyhub/library_test/PlaylistScreenTest.kt b/app/src/androidTest/java/com/example/harmonyhub/library_test/PlaylistScreenTest.kt deleted file mode 100644 index b88f1e1..0000000 --- a/app/src/androidTest/java/com/example/harmonyhub/library_test/PlaylistScreenTest.kt +++ /dev/null @@ -1,100 +0,0 @@ -//package com.example.harmonyhub.library_test -// -//import androidx.compose.ui.test.* -//import androidx.compose.ui.test.junit4.createComposeRule -//import com.example.harmonyhub.ui.library.PlaylistsScreen -//import org.junit.Rule -//import org.junit.Test -// -//class PlaylistsScreenTest { -// -// @get:Rule -// val composeTestRule = createComposeRule() -// -// @Test -// fun test_PlaylistsScreen_InitialState() { -// // Set up the composable for testing -// composeTestRule.setContent { -// PlaylistsScreen( -// onBackButtonClicked = {}, -// onPlaylistClicked = {} -// ) -// } -// -// // Verify that the title text "Danh sách phát của tôi" is displayed -// composeTestRule.onNodeWithText("Danh sách phát của tôi").assertIsDisplayed() -// -// // Verify that the add button is displayed -// composeTestRule.onNodeWithContentDescription("Add").assertIsDisplayed() -// -// // Verify that the search field is displayed -// composeTestRule.onNodeWithText("Tìm kiếm danh sách phát...").assertIsDisplayed() -// -// // Verify that the "Xóa tất cả" text is displayed -// composeTestRule.onNodeWithText("Xóa tất cả").assertIsDisplayed() -// -// // Verify that at least one playlist item is displayed -// composeTestRule.onNodeWithText("Playlist 1").assertIsDisplayed() -// } -// -// @Test -// fun test_SearchFunctionality() { -// composeTestRule.setContent { -// PlaylistsScreen( -// onBackButtonClicked = {}, -// onPlaylistClicked = {} -// ) -// } -// -// // Type into the search bar -// composeTestRule.onNodeWithText("Tìm kiếm danh sách phát...").performTextInput("Playlist 1") -// -// // Verify that other playlists are not displayed -// composeTestRule.onNodeWithText("Playlist 2").assertDoesNotExist() -// } -// -// @Test -// fun test_AddPlaylistDialog() { -// composeTestRule.setContent { -// PlaylistsScreen( -// onBackButtonClicked = {}, -// onPlaylistClicked = {} -// ) -// } -// -// // Click on the add button to open the dialog -// composeTestRule.onNodeWithContentDescription("Add").performClick() -// -// // Verify that the dialog is displayed -// composeTestRule.onNodeWithText("Tạo playlist mới").assertIsDisplayed() -// -// // Type a new playlist name -// composeTestRule.onNodeWithText("Tên playlist").performTextInput("New Playlist") -// -// // Verify that the "OK" button is enabled -// composeTestRule.onNodeWithText("OK").assertIsEnabled().performClick() -// -// } -// -// @Test -// fun test_DismissAddPlaylistDialog() { -// composeTestRule.setContent { -// PlaylistsScreen( -// onBackButtonClicked = {}, -// onPlaylistClicked = {} -// ) -// } -// -// // Click on the add button to open the dialog -// composeTestRule.onNodeWithContentDescription("Add").performClick() -// -// // Verify that the dialog is displayed -// composeTestRule.onNodeWithText("Tạo playlist mới").assertIsDisplayed() -// -// // Click the "Cancel" button -// composeTestRule.onNodeWithText("Hủy").performClick() -// -// // Verify that the dialog is dismissed -// composeTestRule.onNodeWithText("Tạo playlist mới").assertDoesNotExist() -// } -//} diff --git a/app/src/androidTest/java/com/example/harmonyhub/library_test/PlaylistSongListTest.kt b/app/src/androidTest/java/com/example/harmonyhub/library_test/PlaylistSongListTest.kt deleted file mode 100644 index eb14749..0000000 --- a/app/src/androidTest/java/com/example/harmonyhub/library_test/PlaylistSongListTest.kt +++ /dev/null @@ -1,133 +0,0 @@ -//package com.example.harmonyhub.library_test -// -//import androidx.compose.ui.test.* -//import androidx.compose.ui.test.junit4.createComposeRule -//import com.example.harmonyhub.ui.library.PlaylistSongListScreen -//import com.example.harmonyhub.ui.theme.HarmonyHubTheme -//import org.junit.Rule -//import org.junit.Test -// -//class PlaylistSongListScreenTest { -// -// @get:Rule -// val composeTestRule = createComposeRule() -// -// @Test -// fun testPlaylistSongListScreenDisplaysCorrectly() { -// // Arrange -// val playlistName = "My Playlist" -// -// composeTestRule.setContent { -// HarmonyHubTheme { -// PlaylistSongListScreen( -// playlistName = playlistName, -// onBackButtonClicked = {}, -// onAddButtonClicked = {} -// ) -// } -// } -// -// // Act & Assert -// // Kiểm tra tiêu đề playlist -// composeTestRule.onNodeWithText(playlistName).assertIsDisplayed() -// -// // Kiểm tra ô tìm kiếm -// composeTestRule.onNodeWithText("Tìm kiếm bài hát...").assertIsDisplayed() -// -// // Kiểm tra các nút Play và Share -// composeTestRule.onNodeWithContentDescription("Play").assertIsDisplayed() -// composeTestRule.onNodeWithContentDescription("Share").assertIsDisplayed() -// -// } -// -// @Test -// fun testSearchFunctionality() { -// // Arrange -// val playlistName = "My Playlist" -// val searchQuery = "Song 1" // Example song title to search -// -// composeTestRule.setContent { -// HarmonyHubTheme { -// PlaylistSongListScreen( -// playlistName = playlistName, -// onBackButtonClicked = {}, -// onAddButtonClicked = {} -// ) -// } -// } -// -// // Act: Nhập vào ô tìm kiếm -// composeTestRule.onNodeWithText("Tìm kiếm bài hát...").performTextInput(searchQuery) -// } -// -// @Test -// fun testClearSearchQuery() { -// // Arrange -// val playlistName = "My Playlist" -// val searchQuery = "Song 1" -// -// composeTestRule.setContent { -// HarmonyHubTheme { -// PlaylistSongListScreen( -// playlistName = playlistName, -// onBackButtonClicked = {}, -// onAddButtonClicked = {} -// ) -// } -// } -// -// // Act: Nhập vào ô tìm kiếm và sau đó xóa -// composeTestRule.onNodeWithText("Tìm kiếm bài hát...").performTextInput(searchQuery) -// composeTestRule.onNodeWithContentDescription("Clear").performClick() -// -// // Assert: Kiểm tra ô tìm kiếm đã được làm sạch -// composeTestRule.onNodeWithText("").assertExists() -// } -// -// @Test -// fun testAddButtonFunctionality() { -// // Arrange -// val playlistName = "My Playlist" -// composeTestRule.setContent { -// HarmonyHubTheme { -// PlaylistSongListScreen( -// playlistName = playlistName, -// onBackButtonClicked = {}, -// onAddButtonClicked = { -// // Kiểm tra xem phương thức onAddButtonClicked có được gọi -// println("Add button clicked!") -// } -// ) -// } -// } -// -// // Act: Nhấp vào nút thêm -// composeTestRule.onNodeWithContentDescription("Add").performClick() -// -// // Assert: Kiểm tra phương thức đã được gọi (xem trên log) -// // Không có assert cụ thể vì đây chỉ là việc kiểm tra chức năng -// } -// -// @Test -// fun testBackButtonFunctionality() { -// // Arrange -// val playlistName = "My Playlist" -// composeTestRule.setContent { -// HarmonyHubTheme { -// PlaylistSongListScreen( -// playlistName = playlistName, -// onBackButtonClicked = { -// // Kiểm tra phương thức onBackButtonClicked được gọi -// println("Back button clicked!") -// }, -// onAddButtonClicked = {} -// ) -// } -// } -// -// // Act: Nhấp vào nút quay lại -// composeTestRule.onNodeWithContentDescription("Back").performClick() -// -// // Assert: Kiểm tra phương thức đã được gọi (xem trên log) -// } -//} diff --git a/app/src/androidTest/java/com/example/harmonyhub/library_test/SongListTest.kt b/app/src/androidTest/java/com/example/harmonyhub/library_test/SongListTest.kt deleted file mode 100644 index c1f6131..0000000 --- a/app/src/androidTest/java/com/example/harmonyhub/library_test/SongListTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -//package com.example.harmonyhub.library_test -// -//import androidx.compose.material.icons.Icons -//import androidx.compose.material.icons.filled.MoreVert -//import androidx.compose.ui.test.* -//import androidx.compose.ui.test.junit4.createComposeRule -//import com.example.harmonyhub.ui.components.Song -//import com.example.harmonyhub.ui.library.SongList -//import org.junit.Rule -//import org.junit.Test -// -//class SongListTest { -// -// @get:Rule -// val composeTestRule = createComposeRule() -// -// private val dummySongs = listOf( -// Song("1", "Song A", "Artist A", "image1.jpg", "url1"), -// Song("2", "Song B", "Artist B", "image2.jpg", "url2"), -// Song("3", "Song C", "Artist C", "image3.jpg", "url3") -// ) -// -// @Test -// fun verify_ui_components_display() { -// composeTestRule.setContent { -// SongList( -// title = "Library", -// more = Icons.Default.MoreVert, -// songs = dummySongs, -// onBackButtonClicked = {} -// ) -// } -// -// // Kiểm tra tiêu đề "Library" -// composeTestRule.onNodeWithText("Library").assertExists() -// -// // Kiểm tra thanh tìm kiếm có placeholder đúng -// composeTestRule.onNodeWithText("Tìm kiếm bài hát...").assertExists() -// -// // Kiểm tra danh sách bài hát hiển thị đầy đủ -// composeTestRule.onNodeWithText("Song A").assertExists() -// composeTestRule.onNodeWithText("Artist A").assertExists() -// -// composeTestRule.onNodeWithText("Song B").assertExists() -// composeTestRule.onNodeWithText("Artist B").assertExists() -// -// composeTestRule.onNodeWithText("Song C").assertExists() -// composeTestRule.onNodeWithText("Artist C").assertExists() -// } -// -// @Test -// fun search_functionality_works_correctly() { -// composeTestRule.setContent { -// SongList( -// title = "Library", -// more = Icons.Default.MoreVert, -// songs = dummySongs, -// onBackButtonClicked = {} -// ) -// } -// -// // Nhập từ khóa tìm kiếm -// composeTestRule.onNodeWithText("Tìm kiếm bài hát...").performTextInput("Song B") -// -// composeTestRule.onNodeWithText("Song A").assertDoesNotExist() -// composeTestRule.onNodeWithText("Song C").assertDoesNotExist() -// -// } -// -// @Test -// fun clear_search_works_correctly() { -// composeTestRule.setContent { -// SongList( -// title = "Library", -// more = Icons.Default.MoreVert, -// songs = dummySongs, -// onBackButtonClicked = {} -// ) -// } -// -// // Nhập từ khóa tìm kiếm -// composeTestRule.onNodeWithText("Tìm kiếm bài hát...").performTextInput("Song B") -// -// // Nhấn nút "Clear" -// composeTestRule.onNodeWithContentDescription("Clear").performClick() -// -// // Kiểm tra lại tất cả bài hát đều hiển thị -// composeTestRule.onNodeWithText("Song A").assertExists() -// composeTestRule.onNodeWithText("Song B").assertExists() -// composeTestRule.onNodeWithText("Song C").assertExists() -// } -// -// @Test -// fun back_button_triggers_callback() { -// var backClicked = false -// -// composeTestRule.setContent { -// SongList( -// title = "Library", -// more = Icons.Default.MoreVert, -// songs = dummySongs, -// onBackButtonClicked = { backClicked = true } -// ) -// } -// -// // Nhấn nút back -// composeTestRule.onNodeWithContentDescription("Back").performClick() -// -// // Kiểm tra callback đã được gọi -// assert(backClicked) -// } -//} diff --git a/app/src/androidTest/java/com/example/harmonyhub/profile_test/ProfileScreenTest.kt b/app/src/androidTest/java/com/example/harmonyhub/profile_test/ProfileScreenTest.kt deleted file mode 100644 index 1df0ea1..0000000 --- a/app/src/androidTest/java/com/example/harmonyhub/profile_test/ProfileScreenTest.kt +++ /dev/null @@ -1,96 +0,0 @@ -package com.example.harmonyhub.profile_test - -import androidx.compose.ui.test.* -import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.test.junit4.ComposeTestRule -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.action.ViewActions.click -import androidx.test.espresso.assertion.ViewAssertions.doesNotExist -import androidx.test.espresso.assertion.ViewAssertions.matches -import androidx.test.espresso.matcher.ViewMatchers.isDisplayed -import androidx.test.espresso.matcher.ViewMatchers.withId -import androidx.test.espresso.matcher.ViewMatchers.withText -import androidx.test.ext.junit.rules.ActivityScenarioRule -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.example.harmonyhub.MainActivity -import com.example.harmonyhub.domain.repository.UserDataRepo -import com.example.harmonyhub.presentation.viewmodel.UserDataViewModel -import com.example.harmonyhub.ui.profile.ProfileScreen -import org.junit.Before -import org.junit.Rule -import org.junit.Test - - -class ProfileScreenTest { - - @get:Rule - val composeTestRule = createComposeRule() - -// @Test -// fun testProfileScreen() { -// // Thiết lập UI cho màn hình Profile -// composeTestRule.setContent { -// ProfileScreen( -// onBackButtonClicked = {}, -// onFriendsButtonClicked = {}, -// userDataViewModel = hiltViewModel() -// ) -// } -// -// // Kiểm tra các phần tử UI -// composeTestRule.onNodeWithText("Thông tin cá nhân").assertIsDisplayed() -// composeTestRule.onNodeWithContentDescription("Back").assertIsDisplayed() -// composeTestRule.onNodeWithText("Email").assertIsDisplayed() -// composeTestRule.onNodeWithText("Người theo dõi").assertIsDisplayed() -// composeTestRule.onNodeWithText("Đang theo dõi").assertIsDisplayed() -// -// // Kiểm tra hình ảnh đại diện có hiển thị -// composeTestRule.onNodeWithContentDescription("Profile").assertIsDisplayed() -// -// // Kiểm tra chức năng mở hộp thoại thay đổi ảnh -// composeTestRule.onNodeWithContentDescription("Profile").performClick() -// composeTestRule.onNodeWithText("Thay đổi ảnh đại diện").assertIsDisplayed() -// } - -// @Test -// fun testBackButton() { -// // Thiết lập UI cho màn hình Profile -// composeTestRule.setContent { -// ProfileScreen( -// onBackButtonClicked = { /* mock back action */ }, -// onFriendsButtonClicked = {}, -// userDataViewModel = hiltViewModel() -// ) -// } -// -// // Kiểm tra chức năng nhấn nút quay lại -// composeTestRule.onNodeWithContentDescription("Back").performClick() -// } - -// @Test -// fun testImageChangeDialog() { -// // Thiết lập UI cho màn hình Profile -// composeTestRule.setContent { -// ProfileScreen( -// onBackButtonClicked = {}, -// onFriendsButtonClicked = {}, -// userDataViewModel = hiltViewModel() -// ) -// } -// -// // Mở hộp thoại thay đổi ảnh -// composeTestRule.onNodeWithContentDescription("Profile").performClick() -// -// // Kiểm tra rằng hộp thoại thay đổi ảnh đã hiển thị -// composeTestRule.onNodeWithText("Thay đổi ảnh đại diện").assertIsDisplayed() -// -// // Kiểm tra các nút trong hộp thoại -// composeTestRule.onNodeWithText("Lưu").assertIsDisplayed() -// composeTestRule.onNodeWithText("Hủy").assertIsDisplayed() -// } -} - - diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b3dff38..864fd0c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,6 +14,7 @@ googleGmsGoogleServices = "4.4.2" firebaseAuth = "23.1.0" firebaseAuthKtx = "23.1.0" firebaseFirestore = "25.1.1" +navigationTesting = "2.8.5" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -35,6 +36,7 @@ androidx-navigation-runtime-ktx = { group = "androidx.navigation", name = "navig firebase-auth = { group = "com.google.firebase", name = "firebase-auth", version.ref = "firebaseAuth" } firebase-auth-ktx = { group = "com.google.firebase", name = "firebase-auth-ktx", version.ref = "firebaseAuthKtx" } firebase-firestore = { group = "com.google.firebase", name = "firebase-firestore", version.ref = "firebaseFirestore" } +androidx-navigation-testing = { group = "androidx.navigation", name = "navigation-testing", version.ref = "navigationTesting" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" }