ui tests
This commit is contained in:
		
							parent
							
								
									74526bc984
								
							
						
					
					
						commit
						860fb5fac1
					
				
					 20 changed files with 1492 additions and 49 deletions
				
			
		
							
								
								
									
										338
									
								
								.idea/androidTestResultsUserPreferences.xml
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										338
									
								
								.idea/androidTestResultsUserPreferences.xml
									
										
									
										generated
									
									
									
								
							|  | @ -3,6 +3,19 @@ | ||||||
|   <component name="AndroidTestResultsUserPreferences"> |   <component name="AndroidTestResultsUserPreferences"> | ||||||
|     <option name="androidTestResultsTableState"> |     <option name="androidTestResultsTableState"> | ||||||
|       <map> |       <map> | ||||||
|  |         <entry key="-2044973516"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|         <entry key="-1837850877"> |         <entry key="-1837850877"> | ||||||
|           <value> |           <value> | ||||||
|             <AndroidTestResultsTableState> |             <AndroidTestResultsTableState> | ||||||
|  | @ -16,6 +29,32 @@ | ||||||
|             </AndroidTestResultsTableState> |             </AndroidTestResultsTableState> | ||||||
|           </value> |           </value> | ||||||
|         </entry> |         </entry> | ||||||
|  |         <entry key="-1681729085"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="-1581714358"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|         <entry key="-1481613533"> |         <entry key="-1481613533"> | ||||||
|           <value> |           <value> | ||||||
|             <AndroidTestResultsTableState> |             <AndroidTestResultsTableState> | ||||||
|  | @ -44,6 +83,45 @@ | ||||||
|             </AndroidTestResultsTableState> |             </AndroidTestResultsTableState> | ||||||
|           </value> |           </value> | ||||||
|         </entry> |         </entry> | ||||||
|  |         <entry key="-1285939142"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="-1276338630"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="-1258568374"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|         <entry key="-1161392067"> |         <entry key="-1161392067"> | ||||||
|           <value> |           <value> | ||||||
|             <AndroidTestResultsTableState> |             <AndroidTestResultsTableState> | ||||||
|  | @ -57,6 +135,266 @@ | ||||||
|             </AndroidTestResultsTableState> |             </AndroidTestResultsTableState> | ||||||
|           </value> |           </value> | ||||||
|         </entry> |         </entry> | ||||||
|  |         <entry key="-1079552584"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="-1045932662"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="-575726278"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="-269932762"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="-37490609"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="22559516"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="170823802"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="226104554"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="487145018"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="619060798"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="642418831"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="822092471"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="1072291594"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="1104400266"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="1132914986"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="1254913002"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="1298910724"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="1303027710"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="1404776915"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|  |         <entry key="1472661094"> | ||||||
|  |           <value> | ||||||
|  |             <AndroidTestResultsTableState> | ||||||
|  |               <option name="preferredColumnWidths"> | ||||||
|  |                 <map> | ||||||
|  |                   <entry key="Duration" value="90" /> | ||||||
|  |                   <entry key="Pixel_XL_API_30" value="120" /> | ||||||
|  |                   <entry key="Tests" value="360" /> | ||||||
|  |                 </map> | ||||||
|  |               </option> | ||||||
|  |             </AndroidTestResultsTableState> | ||||||
|  |           </value> | ||||||
|  |         </entry> | ||||||
|         <entry key="1663472220"> |         <entry key="1663472220"> | ||||||
|           <value> |           <value> | ||||||
|             <AndroidTestResultsTableState> |             <AndroidTestResultsTableState> | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ plugins { | ||||||
|     id 'com.google.dagger.hilt.android' |     id 'com.google.dagger.hilt.android' | ||||||
| 
 | 
 | ||||||
|     // Protobuf |     // Protobuf | ||||||
|     id 'com.google.protobuf' version '0.8.17' |     id 'com.google.protobuf' version '0.9.0' | ||||||
| 
 | 
 | ||||||
|     // Firebase |     // Firebase | ||||||
|     id 'com.google.gms.google-services' |     id 'com.google.gms.google-services' | ||||||
|  |  | ||||||
							
								
								
									
										74
									
								
								app/src/androidTest/java/be/ugent/sel/studeez/FabTest.kt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								app/src/androidTest/java/be/ugent/sel/studeez/FabTest.kt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,74 @@ | ||||||
|  | package be.ugent.sel.studeez | ||||||
|  | 
 | ||||||
|  | import androidx.compose.material.FloatingActionButton | ||||||
|  | import androidx.compose.ui.test.hasClickAction | ||||||
|  | import androidx.compose.ui.test.junit4.createComposeRule | ||||||
|  | import androidx.compose.ui.test.onNodeWithContentDescription | ||||||
|  | import androidx.compose.ui.test.performClick | ||||||
|  | import be.ugent.sel.studeez.common.composable.AddButtonActions | ||||||
|  | import be.ugent.sel.studeez.common.composable.ExpandedAddButton | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | 
 | ||||||
|  | class FabTest { | ||||||
|  |     @get:Rule | ||||||
|  |     val composeTestRule = createComposeRule() | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun expandFabTest() { | ||||||
|  |         var expand = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             FloatingActionButton( | ||||||
|  |                 onClick = {expand = true} | ||||||
|  |             ) {} | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNode(hasClickAction()) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(expand) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun fabTest() { | ||||||
|  |         var task = false | ||||||
|  |         var session = false | ||||||
|  |         var friend = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             ExpandedAddButton( | ||||||
|  |                 addButtonActions = AddButtonActions( | ||||||
|  |                     {task = true}, | ||||||
|  |                     {friend = true}, | ||||||
|  |                     {session = true} | ||||||
|  |                 ) | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithContentDescription("Session") | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithContentDescription("Task") | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithContentDescription("Friend") | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(task) | ||||||
|  |         assert(session) | ||||||
|  |         assert(friend) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -1,6 +1,9 @@ | ||||||
| package be.ugent.sel.studeez | package be.ugent.sel.studeez | ||||||
| 
 | 
 | ||||||
| import androidx.compose.ui.test.junit4.createComposeRule | import androidx.compose.ui.test.junit4.createComposeRule | ||||||
|  | import androidx.compose.ui.test.onAllNodesWithContentDescription | ||||||
|  | import androidx.compose.ui.test.onAllNodesWithText | ||||||
|  | import androidx.compose.ui.test.onNodeWithContentDescription | ||||||
| import androidx.compose.ui.test.onNodeWithText | import androidx.compose.ui.test.onNodeWithText | ||||||
| import androidx.compose.ui.test.performClick | import androidx.compose.ui.test.performClick | ||||||
| import be.ugent.sel.studeez.common.composable.drawer.DrawerActions | import be.ugent.sel.studeez.common.composable.drawer.DrawerActions | ||||||
|  | @ -8,6 +11,7 @@ import be.ugent.sel.studeez.common.composable.feed.FeedUiState | ||||||
| import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions | import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions | ||||||
| import be.ugent.sel.studeez.data.local.models.FeedEntry | import be.ugent.sel.studeez.data.local.models.FeedEntry | ||||||
| import be.ugent.sel.studeez.screens.home.HomeScreen | import be.ugent.sel.studeez.screens.home.HomeScreen | ||||||
|  | import org.junit.Assert | ||||||
| import org.junit.Rule | import org.junit.Rule | ||||||
| import org.junit.Test | import org.junit.Test | ||||||
| 
 | 
 | ||||||
|  | @ -16,20 +20,31 @@ class HomeScreenTest { | ||||||
|     val composeTestRule = createComposeRule() |     val composeTestRule = createComposeRule() | ||||||
| 
 | 
 | ||||||
|     @Test |     @Test | ||||||
|     fun sessionRecapTestt() { |     fun homeScreenTest() { | ||||||
|         var saveCalled = false |         var continueTask = false | ||||||
| 
 | 
 | ||||||
|         composeTestRule.setContent { |         composeTestRule.setContent { | ||||||
|             HomeScreen( |             HomeScreen( | ||||||
|                 open = {}, |                 open = {}, | ||||||
|                 drawerActions = DrawerActions({}, {}, {}, {}, {}), |                 drawerActions = DrawerActions({}, {}, {}, {}, {}), | ||||||
|                 navigationBarActions = NavigationBarActions({false}, {}, {}, {}, {}, {}, {}, {}), |                 navigationBarActions = NavigationBarActions({false}, {}, {}, {}, {}, {}, {}, {}), | ||||||
|                 feedUiState = FeedUiState.Succes(mapOf()), |                 feedUiState = FeedUiState.Succes(mapOf( | ||||||
|                 continueTask = {_, _ -> }, |                     "08 May 2023" to listOf( | ||||||
|  |                         FeedEntry( | ||||||
|  |                             argb_color = 0xFFABD200, | ||||||
|  |                             subJectName = "Test Subject", | ||||||
|  |                             taskName = "Test Task", | ||||||
|  |                             totalStudyTime = 600, | ||||||
|  |                         ) | ||||||
|  |                     ) | ||||||
|  |                 )), | ||||||
|  |                 continueTask = {_, _ -> continueTask = true }, | ||||||
|                 onEmptyFeedHelp = {} |                 onEmptyFeedHelp = {} | ||||||
|             ) |             ) | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|         composeTestRule |         composeTestRule | ||||||
|             .onNodeWithText( |             .onNodeWithText( | ||||||
|                 "continue", |                 "continue", | ||||||
|  | @ -38,5 +53,155 @@ class HomeScreenTest { | ||||||
|             ) |             ) | ||||||
|             .assertExists() |             .assertExists() | ||||||
|             .performClick() |             .performClick() | ||||||
|  | 
 | ||||||
|  |         Assert.assertTrue(continueTask) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun drawerTest() { | ||||||
|  |         var homebuttontest = false | ||||||
|  |         var timersbuttontest = false | ||||||
|  |         var settingsbuttontest = false | ||||||
|  |         var logoutbuttontest = false | ||||||
|  |         var aboutbuttontest = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             HomeScreen( | ||||||
|  |                 open = {}, | ||||||
|  |                 drawerActions = DrawerActions( | ||||||
|  |                     {homebuttontest = true}, | ||||||
|  |                     {timersbuttontest = true}, | ||||||
|  |                     {settingsbuttontest = true}, | ||||||
|  |                     {logoutbuttontest = true}, | ||||||
|  |                     {aboutbuttontest = true} | ||||||
|  |                 ), | ||||||
|  |                 navigationBarActions = NavigationBarActions({false}, {}, {}, {}, {}, {}, {}, {}), | ||||||
|  |                 feedUiState = FeedUiState.Succes(mapOf()), | ||||||
|  |                 continueTask = {_, _ -> }, | ||||||
|  |                 onEmptyFeedHelp = {} | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onAllNodesWithText( | ||||||
|  |                 "home", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             )[2] // Third node has the button | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 "timer", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 "settings", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 "log out", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 "about", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         Assert.assertTrue(homebuttontest) | ||||||
|  |         Assert.assertTrue(timersbuttontest) | ||||||
|  |         Assert.assertTrue(settingsbuttontest) | ||||||
|  |         Assert.assertTrue(logoutbuttontest) | ||||||
|  |         Assert.assertTrue(aboutbuttontest) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun navigationbarTest() { | ||||||
|  |         var hometest = false | ||||||
|  |         var tasktest = false | ||||||
|  |         var sessiontest = false | ||||||
|  |         var profiletest = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             HomeScreen( | ||||||
|  |                 open = {}, | ||||||
|  |                 drawerActions = DrawerActions({}, {}, {}, {}, {}), | ||||||
|  |                 navigationBarActions = NavigationBarActions( | ||||||
|  |                     {false}, | ||||||
|  |                     {hometest = true}, | ||||||
|  |                     {tasktest = true}, | ||||||
|  |                     {sessiontest = true}, | ||||||
|  |                     {profiletest = true}, | ||||||
|  |                     {}, {}, {} | ||||||
|  |                 ), | ||||||
|  |                 feedUiState = FeedUiState.Succes(mapOf()), | ||||||
|  |                 continueTask = {_, _ -> }, | ||||||
|  |                 onEmptyFeedHelp = {} | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onAllNodesWithContentDescription( | ||||||
|  |                 "Home", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             )[0] // Third node has the button | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithContentDescription( | ||||||
|  |                 "tasks", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithContentDescription( | ||||||
|  |                 "session", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithContentDescription( | ||||||
|  |                 "profile", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         Assert.assertTrue(hometest) | ||||||
|  |         Assert.assertTrue(tasktest) | ||||||
|  |         Assert.assertTrue(sessiontest) | ||||||
|  |         Assert.assertTrue(profiletest) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -0,0 +1,68 @@ | ||||||
|  | package be.ugent.sel.studeez | ||||||
|  | 
 | ||||||
|  | import androidx.compose.ui.test.junit4.createComposeRule | ||||||
|  | import androidx.compose.ui.test.onAllNodesWithText | ||||||
|  | import androidx.compose.ui.test.onNodeWithText | ||||||
|  | import androidx.compose.ui.test.performClick | ||||||
|  | import be.ugent.sel.studeez.screens.log_in.LoginScreen | ||||||
|  | import be.ugent.sel.studeez.screens.log_in.LoginScreenActions | ||||||
|  | import be.ugent.sel.studeez.screens.log_in.LoginUiState | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | 
 | ||||||
|  | class LoginScreenTest { | ||||||
|  |     @get:Rule | ||||||
|  |     val composeTestRule = createComposeRule() | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun loginScreenTest() { | ||||||
|  |         var login = false | ||||||
|  |         var signup = false | ||||||
|  |         var forgot_password = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             LoginScreen( | ||||||
|  |                 uiState = LoginUiState(), | ||||||
|  |                 loginScreenActions = LoginScreenActions( | ||||||
|  |                     {}, {}, | ||||||
|  |                     {signup = true}, | ||||||
|  |                     {login = true}, | ||||||
|  |                     {forgot_password = true} | ||||||
|  |                 ) | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onAllNodesWithText( | ||||||
|  |                 text = "Sign in", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             )[0] // The first object is the button | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "Forgot", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "Sign up", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(signup) | ||||||
|  |         assert(login) | ||||||
|  |         assert(forgot_password) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,68 @@ | ||||||
|  | package be.ugent.sel.studeez | ||||||
|  | 
 | ||||||
|  | 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 be.ugent.sel.studeez.screens.profile.EditProfileActions | ||||||
|  | import be.ugent.sel.studeez.screens.profile.EditProfileScreen | ||||||
|  | import be.ugent.sel.studeez.screens.profile.ProfileEditUiState | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | 
 | ||||||
|  | class ProfileEditScreenTest { | ||||||
|  |     @get:Rule | ||||||
|  |     val composeTestRule = createComposeRule() | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun profileEditScreenTest() { | ||||||
|  |         var edit_save = false | ||||||
|  |         var edit_cancel = false | ||||||
|  |         var goback = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             EditProfileScreen( | ||||||
|  |                 goBack = {goback = true}, | ||||||
|  |                 uiState = ProfileEditUiState(), | ||||||
|  |                 editProfileActions = EditProfileActions( | ||||||
|  |                     {}, | ||||||
|  |                     {edit_save = true}, | ||||||
|  |                     {edit_cancel = true} | ||||||
|  |                 ) | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "save", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "delete", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithContentDescription( | ||||||
|  |                 label = "go back", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(edit_cancel) | ||||||
|  |         assert(edit_save) | ||||||
|  |         assert(goback) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,42 @@ | ||||||
|  | package be.ugent.sel.studeez | ||||||
|  | 
 | ||||||
|  | import androidx.compose.ui.test.junit4.createComposeRule | ||||||
|  | import androidx.compose.ui.test.onNodeWithContentDescription | ||||||
|  | import androidx.compose.ui.test.performClick | ||||||
|  | import be.ugent.sel.studeez.common.composable.drawer.DrawerActions | ||||||
|  | import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions | ||||||
|  | import be.ugent.sel.studeez.screens.profile.ProfileActions | ||||||
|  | import be.ugent.sel.studeez.screens.profile.ProfileScreen | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | 
 | ||||||
|  | class ProfileScreenTest { | ||||||
|  |     @get:Rule | ||||||
|  |     val composeTestRule = createComposeRule() | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun profileScreenTest() { | ||||||
|  |         var edit = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             ProfileScreen( | ||||||
|  |                 profileActions = ProfileActions({null}, {edit = true}), | ||||||
|  |                 drawerActions = DrawerActions({}, {}, {}, {}, {}), | ||||||
|  |                 navigationBarActions = NavigationBarActions({ false }, {}, {}, {}, {}, {}, {}, {}) | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithContentDescription( | ||||||
|  |                 label = "edit profile", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(edit) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,75 @@ | ||||||
|  | package be.ugent.sel.studeez | ||||||
|  | 
 | ||||||
|  | import androidx.compose.ui.Modifier | ||||||
|  | import androidx.compose.ui.test.junit4.createComposeRule | ||||||
|  | import androidx.compose.ui.test.onNodeWithText | ||||||
|  | import androidx.compose.ui.test.performClick | ||||||
|  | import be.ugent.sel.studeez.data.local.models.SessionReport | ||||||
|  | import be.ugent.sel.studeez.screens.session_recap.SessionRecapActions | ||||||
|  | import be.ugent.sel.studeez.screens.session_recap.SessionRecapScreen | ||||||
|  | import com.google.firebase.Timestamp | ||||||
|  | import org.junit.Assert | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class SessionRecapScreenTest { | ||||||
|  |     @get:Rule | ||||||
|  |     val composeTestRule = createComposeRule() | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun sessionRecapTest() { | ||||||
|  |         var saveCalled = false | ||||||
|  |         var discardCalled = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             SessionRecapScreen( | ||||||
|  |                 Modifier, | ||||||
|  |                 SessionRecapActions( | ||||||
|  |                     { | ||||||
|  |                         SessionReport( | ||||||
|  |                             "", | ||||||
|  |                             0, | ||||||
|  |                             Timestamp(0, 0), | ||||||
|  |                             "") | ||||||
|  |                     }, | ||||||
|  |                     { saveCalled = true }, | ||||||
|  |                     { discardCalled = true } | ||||||
|  |                 ) | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 "You studied", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 "save", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 "discard", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         Assert.assertTrue(saveCalled) | ||||||
|  |         Assert.assertTrue(discardCalled) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -1,13 +1,15 @@ | ||||||
| package be.ugent.sel.studeez | package be.ugent.sel.studeez | ||||||
| 
 | 
 | ||||||
| import androidx.compose.ui.Modifier |  | ||||||
| import androidx.compose.ui.test.junit4.createComposeRule | import androidx.compose.ui.test.junit4.createComposeRule | ||||||
| import androidx.compose.ui.test.onNodeWithText | import androidx.compose.ui.test.onNodeWithText | ||||||
| import androidx.compose.ui.test.performClick | import androidx.compose.ui.test.performClick | ||||||
| import be.ugent.sel.studeez.data.local.models.SessionReport | import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalCustomTimer | ||||||
| import be.ugent.sel.studeez.screens.session_recap.SessionRecapActions | import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer | ||||||
| import be.ugent.sel.studeez.screens.session_recap.SessionRecapScreen | import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalPomodoroTimer | ||||||
| import com.google.firebase.Timestamp | import be.ugent.sel.studeez.screens.session.SessionActions | ||||||
|  | import be.ugent.sel.studeez.screens.session.sessionScreens.BreakSessionScreen | ||||||
|  | import be.ugent.sel.studeez.screens.session.sessionScreens.CustomSessionScreen | ||||||
|  | import be.ugent.sel.studeez.screens.session.sessionScreens.EndlessSessionScreen | ||||||
| import org.junit.Assert | import org.junit.Assert | ||||||
| import org.junit.Rule | import org.junit.Rule | ||||||
| import org.junit.Test | import org.junit.Test | ||||||
|  | @ -18,55 +20,100 @@ class SessionScreenTest { | ||||||
|     val composeTestRule = createComposeRule() |     val composeTestRule = createComposeRule() | ||||||
| 
 | 
 | ||||||
|     @Test |     @Test | ||||||
|     fun sessionRecapTest() { |     fun customSessionScreenTest() { | ||||||
|         var saveCalled = false |         var endSession = false | ||||||
|         var discardCalled = false |  | ||||||
| 
 | 
 | ||||||
|         composeTestRule.setContent { |         composeTestRule.setContent { | ||||||
|             SessionRecapScreen( |             CustomSessionScreen( | ||||||
|                 Modifier, |                 functionalTimer = FunctionalCustomTimer(0), | ||||||
|                 SessionRecapActions( |                 mediaplayer = null | ||||||
|                     { |             ).invoke( | ||||||
|                         SessionReport( |                 open = {}, | ||||||
|                             "", |                 sessionActions = SessionActions( | ||||||
|                             0, |                     {FunctionalCustomTimer(0)}, | ||||||
|                             Timestamp(0, 0), |                     { "" }, | ||||||
|                             "") |                     {}, {}, {endSession = true} | ||||||
|                     }, |  | ||||||
|                     { saveCalled = true }, |  | ||||||
|                     { discardCalled = true } |  | ||||||
|                 ) |                 ) | ||||||
|             ) |             ) | ||||||
|         } |         } | ||||||
|         composeTestRule | 
 | ||||||
|             .onNodeWithText( |         composeTestRule.waitForIdle() | ||||||
|                 "You studied", |  | ||||||
|                 substring = true, |  | ||||||
|                 ignoreCase = true |  | ||||||
|             ) |  | ||||||
|             .assertExists() |  | ||||||
| 
 | 
 | ||||||
|         composeTestRule |         composeTestRule | ||||||
|             .onNodeWithText( |             .onNodeWithText( | ||||||
|                 "save", |                 "end session", | ||||||
|                 substring = true, |                 substring = true, | ||||||
|                 ignoreCase = true |                 ignoreCase = true | ||||||
|             ) |             ) | ||||||
|             .assertExists() |             .assertExists() | ||||||
|             .performClick() |             .performClick() | ||||||
| 
 | 
 | ||||||
|         composeTestRule |  | ||||||
|             .onNodeWithText( |  | ||||||
|                 "discard", |  | ||||||
|                 substring = true, |  | ||||||
|                 ignoreCase = true |  | ||||||
|             ) |  | ||||||
|             .assertExists() |  | ||||||
|             .performClick() |  | ||||||
| 
 | 
 | ||||||
|         Assert.assertTrue(saveCalled) |         Assert.assertTrue(endSession) | ||||||
|         Assert.assertTrue(discardCalled) |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Test | ||||||
|  |     fun endlessSessionScreenTest() { | ||||||
|  |         var endSession = false | ||||||
| 
 | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             EndlessSessionScreen() | ||||||
|  |                 .invoke( | ||||||
|  |                     open = {}, | ||||||
|  |                     sessionActions = SessionActions( | ||||||
|  |                         {FunctionalEndlessTimer()}, | ||||||
|  |                         { "" }, | ||||||
|  |                         {}, {}, {endSession = true} | ||||||
|  |                     ) | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 "end session", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         Assert.assertTrue(endSession) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun breakSessionScreenTest() { | ||||||
|  |         var endSession = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             BreakSessionScreen( | ||||||
|  |                 funPomoDoroTimer = FunctionalPomodoroTimer(0, 0, 0), | ||||||
|  |                 mediaplayer = null | ||||||
|  |             ) | ||||||
|  |             .invoke( | ||||||
|  |                 open = {}, | ||||||
|  |                 sessionActions = SessionActions( | ||||||
|  |                     {FunctionalPomodoroTimer(0, 0, 0)}, | ||||||
|  |                     { "" }, | ||||||
|  |                     {}, {}, {endSession = true} | ||||||
|  |                 ) | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 "end session", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         Assert.assertTrue(endSession) | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,52 @@ | ||||||
|  | package be.ugent.sel.studeez | ||||||
|  | 
 | ||||||
|  | import androidx.compose.ui.test.junit4.createComposeRule | ||||||
|  | import androidx.compose.ui.test.onAllNodesWithText | ||||||
|  | import androidx.compose.ui.test.onNodeWithText | ||||||
|  | import androidx.compose.ui.test.performClick | ||||||
|  | import be.ugent.sel.studeez.screens.sign_up.SignUpActions | ||||||
|  | import be.ugent.sel.studeez.screens.sign_up.SignUpScreen | ||||||
|  | import be.ugent.sel.studeez.screens.sign_up.SignUpUiState | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | 
 | ||||||
|  | class SignUpScreenTest { | ||||||
|  |     @get:Rule | ||||||
|  |     val composeTestRule = createComposeRule() | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun signupScreenTest() { | ||||||
|  |         var create = false | ||||||
|  |         var login = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             SignUpScreen( | ||||||
|  |                 uiState = SignUpUiState(), | ||||||
|  |                 signUpActions = SignUpActions({}, {}, {}, {}, {create = true}, {login = true}) | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "log in", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onAllNodesWithText( | ||||||
|  |                 text = "Create account", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             )[0] // First node has the button | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(login) | ||||||
|  |         assert(create) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,40 @@ | ||||||
|  | package be.ugent.sel.studeez | ||||||
|  | 
 | ||||||
|  | import androidx.compose.ui.Modifier | ||||||
|  | import androidx.compose.ui.test.junit4.createComposeRule | ||||||
|  | import androidx.compose.ui.test.onAllNodesWithText | ||||||
|  | import androidx.compose.ui.test.performClick | ||||||
|  | import be.ugent.sel.studeez.screens.splash.SplashScreen | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | 
 | ||||||
|  | class SplashScreenTest { | ||||||
|  |     @get:Rule | ||||||
|  |     val composeTestRule = createComposeRule() | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun splashScreenTest() { | ||||||
|  |         var tryAgain = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             SplashScreen( | ||||||
|  |                 Modifier, | ||||||
|  |                 {tryAgain = true}, | ||||||
|  |                 true | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onAllNodesWithText( | ||||||
|  |                 text = "try again", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             )[1] // Second node is the button | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(tryAgain) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,155 @@ | ||||||
|  | package be.ugent.sel.studeez | ||||||
|  | 
 | ||||||
|  | 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 be.ugent.sel.studeez.common.composable.DeleteButton | ||||||
|  | import be.ugent.sel.studeez.common.composable.drawer.DrawerActions | ||||||
|  | import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions | ||||||
|  | import be.ugent.sel.studeez.data.local.models.task.Subject | ||||||
|  | import be.ugent.sel.studeez.screens.subjects.SubjectScreen | ||||||
|  | import be.ugent.sel.studeez.screens.subjects.SubjectUiState | ||||||
|  | import be.ugent.sel.studeez.screens.subjects.form.SubjectForm | ||||||
|  | import be.ugent.sel.studeez.screens.subjects.form.SubjectFormUiState | ||||||
|  | import kotlinx.coroutines.flow.flowOf | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | 
 | ||||||
|  | class SubjectScreenTest { | ||||||
|  |     @get:Rule | ||||||
|  |     val composeTestRule = createComposeRule() | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun addSubjectScreenTest() { | ||||||
|  |         var confirm = false | ||||||
|  |         var goback = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             SubjectForm( | ||||||
|  |                 title = R.string.new_subject, | ||||||
|  |                 goBack = {goback = true}, | ||||||
|  |                 uiState = SubjectFormUiState(), | ||||||
|  |                 onConfirm = {confirm = true}, | ||||||
|  |                 onNameChange = {}, | ||||||
|  |                 onColorChange = {}, | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "confirm", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithContentDescription( | ||||||
|  |                 label = "go back", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(confirm) | ||||||
|  |         assert(goback) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun editSubjectScreenTest() { | ||||||
|  |         var confirm = false | ||||||
|  |         var delete = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             SubjectForm( | ||||||
|  |                 title = R.string.edit_subject, | ||||||
|  |                 goBack = {}, | ||||||
|  |                 uiState = SubjectFormUiState( | ||||||
|  |                     name = "Test Subject", | ||||||
|  |                 ), | ||||||
|  |                 onConfirm = {confirm = true}, | ||||||
|  |                 onNameChange = {}, | ||||||
|  |                 onColorChange = {}, | ||||||
|  |             ) | ||||||
|  |             DeleteButton(text = R.string.delete_subject) { | ||||||
|  |                 delete = true | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "confirm", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "delete", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(confirm) | ||||||
|  |         assert(delete) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun subjectScreenTest() { | ||||||
|  |         var view = false | ||||||
|  |         var add = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             SubjectScreen( | ||||||
|  |                 drawerActions = DrawerActions({}, {}, {}, {}, {}), | ||||||
|  |                 navigationBarActions = NavigationBarActions({false}, {}, {}, {}, {}, {}, {}, {}), | ||||||
|  |                 onAddSubject = { add = true }, | ||||||
|  |                 onViewSubject = { view = true }, | ||||||
|  |                 getStudyTime = { flowOf() }, | ||||||
|  |                 uiState = SubjectUiState.Succes( | ||||||
|  |                     listOf( | ||||||
|  |                         Subject( | ||||||
|  |                             name = "Test Subject", | ||||||
|  |                             argb_color = 0xFFFFD200, | ||||||
|  |                             taskCount = 5, taskCompletedCount = 2, | ||||||
|  |                         ) | ||||||
|  |                     ) | ||||||
|  |                 ) | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "view", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "new subject", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(add) | ||||||
|  |         assert(view) | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										160
									
								
								app/src/androidTest/java/be/ugent/sel/studeez/TaskScreenTest.kt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								app/src/androidTest/java/be/ugent/sel/studeez/TaskScreenTest.kt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,160 @@ | ||||||
|  | package be.ugent.sel.studeez | ||||||
|  | 
 | ||||||
|  | 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 be.ugent.sel.studeez.common.composable.DeleteButton | ||||||
|  | import be.ugent.sel.studeez.data.local.models.task.Subject | ||||||
|  | import be.ugent.sel.studeez.data.local.models.task.Task | ||||||
|  | import be.ugent.sel.studeez.screens.tasks.TaskActions | ||||||
|  | import be.ugent.sel.studeez.screens.tasks.TaskScreen | ||||||
|  | import be.ugent.sel.studeez.screens.tasks.form.TaskForm | ||||||
|  | import be.ugent.sel.studeez.screens.tasks.form.TaskFormUiState | ||||||
|  | import kotlinx.coroutines.flow.flowOf | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | 
 | ||||||
|  | class TaskScreenTest { | ||||||
|  |     @get:Rule | ||||||
|  |     val composeTestRule = createComposeRule() | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun addTaskScreenTest() { | ||||||
|  |         var confirm = false | ||||||
|  |         var goback = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             TaskForm( | ||||||
|  |                 title = R.string.new_task, | ||||||
|  |                 goBack = {goback = true}, | ||||||
|  |                 uiState = TaskFormUiState(), | ||||||
|  |                 onConfirm = {confirm = true}, | ||||||
|  |                 onNameChange = {}, | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "confirm", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithContentDescription( | ||||||
|  |                 label = "go back", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(confirm) | ||||||
|  |         assert(goback) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun editTaskScreenTest() { | ||||||
|  |         var confirm = false | ||||||
|  |         var delete = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             TaskForm( | ||||||
|  |                 title = R.string.edit_task, | ||||||
|  |                 goBack = {}, | ||||||
|  |                 uiState = TaskFormUiState( | ||||||
|  |                     name = "Test Task", | ||||||
|  |                 ), | ||||||
|  |                 onConfirm = {confirm = true}, | ||||||
|  |                 onNameChange = {}, | ||||||
|  |             ) { | ||||||
|  |                 DeleteButton(text = R.string.delete_task) { | ||||||
|  |                     delete = true | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "confirm", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "delete", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(confirm) | ||||||
|  |         assert(delete) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun taskScreenTest() { | ||||||
|  |         var add = false | ||||||
|  |         var edit = false | ||||||
|  |         var start = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             TaskScreen( | ||||||
|  |                 goBack = {}, | ||||||
|  |                 taskActions = TaskActions( | ||||||
|  |                     {add = true}, | ||||||
|  |                     { Subject(name = "Test Subject") }, | ||||||
|  |                     { flowOf(listOf(Task())) }, | ||||||
|  |                     { _, _ -> run {} }, | ||||||
|  |                     {edit = true}, | ||||||
|  |                     {start = true}, | ||||||
|  |                     {}, | ||||||
|  |                 ) | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithContentDescription( | ||||||
|  |                 label = "edit", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "new", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "start", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(add) | ||||||
|  |         assert(edit) | ||||||
|  |         assert(start) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,58 @@ | ||||||
|  | package be.ugent.sel.studeez | ||||||
|  | 
 | ||||||
|  | import androidx.compose.ui.test.junit4.createComposeRule | ||||||
|  | import androidx.compose.ui.test.onNodeWithText | ||||||
|  | import androidx.compose.ui.test.performClick | ||||||
|  | import be.ugent.sel.studeez.common.composable.drawer.DrawerActions | ||||||
|  | import be.ugent.sel.studeez.data.local.models.timer_info.EndlessTimerInfo | ||||||
|  | import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewActions | ||||||
|  | import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewScreen | ||||||
|  | import kotlinx.coroutines.flow.flowOf | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | 
 | ||||||
|  | class TimerOverviewScreenTest { | ||||||
|  |     @get:Rule | ||||||
|  |     val composeTestRule = createComposeRule() | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun timerOverviewScreenTest() { | ||||||
|  |         var add = false | ||||||
|  |         var edit = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             TimerOverviewScreen( | ||||||
|  |                 timerOverviewActions = TimerOverviewActions( | ||||||
|  |                     { flowOf(listOf(EndlessTimerInfo("", ""))) }, | ||||||
|  |                     { listOf() }, | ||||||
|  |                     {edit = true}, | ||||||
|  |                     {add = true} | ||||||
|  |                 ), | ||||||
|  |                 drawerActions = DrawerActions({}, {}, {}, {}, {}) | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "add", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "edit", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(add) | ||||||
|  |         assert(edit) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,37 @@ | ||||||
|  | package be.ugent.sel.studeez | ||||||
|  | 
 | ||||||
|  | import androidx.compose.ui.test.junit4.createComposeRule | ||||||
|  | import androidx.compose.ui.test.onNodeWithText | ||||||
|  | import androidx.compose.ui.test.performClick | ||||||
|  | import be.ugent.sel.studeez.data.local.models.timer_info.EndlessTimerInfo | ||||||
|  | import be.ugent.sel.studeez.screens.timer_form.form_screens.EndlessTimerFormScreen | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | 
 | ||||||
|  | class TimerScreenTest { | ||||||
|  |     @get:Rule | ||||||
|  |     val composeTestRule = createComposeRule() | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun timerFormScreenTest() { | ||||||
|  |         var save = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             EndlessTimerFormScreen(EndlessTimerInfo("", "")) | ||||||
|  |                 .invoke(onSaveClick = {save = true}) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "save", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(save) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,40 @@ | ||||||
|  | package be.ugent.sel.studeez | ||||||
|  | 
 | ||||||
|  | import androidx.compose.ui.test.junit4.createComposeRule | ||||||
|  | import androidx.compose.ui.test.onNodeWithText | ||||||
|  | import androidx.compose.ui.test.performClick | ||||||
|  | import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionActions | ||||||
|  | import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionScreen | ||||||
|  | import kotlinx.coroutines.flow.flowOf | ||||||
|  | import org.junit.Rule | ||||||
|  | import org.junit.Test | ||||||
|  | 
 | ||||||
|  | class TimerSelectionScreenTest { | ||||||
|  |     @get:Rule | ||||||
|  |     val composeTestRule = createComposeRule() | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun timerOverviewScreenTest() { | ||||||
|  |         var start = false | ||||||
|  | 
 | ||||||
|  |         composeTestRule.setContent { | ||||||
|  |             TimerSelectionScreen( | ||||||
|  |                 timerSelectionActions = TimerSelectionActions({ flowOf()}, {start = true}, 0), | ||||||
|  |                 popUp = {} | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         composeTestRule.waitForIdle() | ||||||
|  | 
 | ||||||
|  |         composeTestRule | ||||||
|  |             .onNodeWithText( | ||||||
|  |                 text = "start", | ||||||
|  |                 substring = true, | ||||||
|  |                 ignoreCase = true | ||||||
|  |             ) | ||||||
|  |             .assertExists() | ||||||
|  |             .performClick() | ||||||
|  | 
 | ||||||
|  |         assert(start) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -3,7 +3,9 @@ package be.ugent.sel.studeez.screens.timer_form | ||||||
| import androidx.annotation.StringRes | import androidx.annotation.StringRes | ||||||
| import androidx.compose.runtime.Composable | import androidx.compose.runtime.Composable | ||||||
| import androidx.compose.ui.res.stringResource | import androidx.compose.ui.res.stringResource | ||||||
|  | import androidx.compose.ui.tooling.preview.Preview | ||||||
| import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate | import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate | ||||||
|  | import be.ugent.sel.studeez.data.local.models.timer_info.PomodoroTimerInfo | ||||||
| import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo | import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo | ||||||
| import be.ugent.sel.studeez.R.string as AppText | import be.ugent.sel.studeez.R.string as AppText | ||||||
| 
 | 
 | ||||||
|  | @ -40,3 +42,14 @@ fun TimerFormScreen( | ||||||
|         timerFormScreen(onConfirmClick) |         timerFormScreen(onConfirmClick) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | @Preview | ||||||
|  | @Composable | ||||||
|  | fun AddTimerPreview() { | ||||||
|  |     TimerFormScreen( | ||||||
|  |         popUp = {  }, | ||||||
|  |         getTimerInfo = { PomodoroTimerInfo("", "", 0, 0, 0) }, | ||||||
|  |         label = AppText.add_timer, | ||||||
|  |         onConfirmClick = {} | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -8,6 +8,7 @@ import androidx.compose.runtime.Composable | ||||||
| import androidx.compose.ui.Alignment | import androidx.compose.ui.Alignment | ||||||
| import androidx.compose.ui.Modifier | import androidx.compose.ui.Modifier | ||||||
| import androidx.compose.ui.res.stringResource | import androidx.compose.ui.res.stringResource | ||||||
|  | import androidx.compose.ui.tooling.preview.Preview | ||||||
| import androidx.hilt.navigation.compose.hiltViewModel | import androidx.hilt.navigation.compose.hiltViewModel | ||||||
| import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate | import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate | ||||||
| import be.ugent.sel.studeez.data.local.models.timer_info.* | import be.ugent.sel.studeez.data.local.models.timer_info.* | ||||||
|  | @ -44,3 +45,12 @@ fun TimerTypeSelectScreen( | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | @Preview | ||||||
|  | @Composable | ||||||
|  | fun TimerTypeSelectScreenPreview() { | ||||||
|  |     TimerTypeSelectScreen( | ||||||
|  |         open = {}, | ||||||
|  |         popUp = {} | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | @ -2,6 +2,7 @@ package be.ugent.sel.studeez.timer_functional | ||||||
| 
 | 
 | ||||||
| import android.media.MediaPlayer | import android.media.MediaPlayer | ||||||
| import be.ugent.sel.studeez.data.SelectedSessionReport | import be.ugent.sel.studeez.data.SelectedSessionReport | ||||||
|  | import be.ugent.sel.studeez.data.SelectedTask | ||||||
| import be.ugent.sel.studeez.data.SelectedTimer | import be.ugent.sel.studeez.data.SelectedTimer | ||||||
| import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalCustomTimer | import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalCustomTimer | ||||||
| import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer | import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer | ||||||
|  | @ -26,7 +27,7 @@ class InvisibleSessionManagerTest { | ||||||
|     @Test |     @Test | ||||||
|     fun InvisibleEndlessTimerTest() = runTest { |     fun InvisibleEndlessTimerTest() = runTest { | ||||||
|         selectedTimer.set(FunctionalEndlessTimer()) |         selectedTimer.set(FunctionalEndlessTimer()) | ||||||
|         viewModel = SessionViewModel(selectedTimer, SelectedSessionReport(), mock(), LogServiceImpl()) |         viewModel = SessionViewModel(selectedTimer, SelectedSessionReport(), SelectedTask(), LogServiceImpl()) | ||||||
|         InvisibleSessionManager.setParameters(viewModel, mediaPlayer) |         InvisibleSessionManager.setParameters(viewModel, mediaPlayer) | ||||||
| 
 | 
 | ||||||
|         val test = launch { |         val test = launch { | ||||||
|  | @ -48,7 +49,7 @@ class InvisibleSessionManagerTest { | ||||||
|         val breakTime = 5 |         val breakTime = 5 | ||||||
|         val repeats = 1 |         val repeats = 1 | ||||||
|         selectedTimer.set(FunctionalPomodoroTimer(studyTime, breakTime, repeats)) |         selectedTimer.set(FunctionalPomodoroTimer(studyTime, breakTime, repeats)) | ||||||
|         viewModel = SessionViewModel(selectedTimer, SelectedSessionReport(), mock(), LogServiceImpl()) |         viewModel = SessionViewModel(selectedTimer, SelectedSessionReport(), SelectedTask(), LogServiceImpl()) | ||||||
|         InvisibleSessionManager.setParameters(viewModel, mediaPlayer) |         InvisibleSessionManager.setParameters(viewModel, mediaPlayer) | ||||||
| 
 | 
 | ||||||
|         val test = launch { |         val test = launch { | ||||||
|  | @ -81,7 +82,7 @@ class InvisibleSessionManagerTest { | ||||||
|     @Test |     @Test | ||||||
|     fun InvisibleCustomTimerTest() = runTest { |     fun InvisibleCustomTimerTest() = runTest { | ||||||
|         selectedTimer.set(FunctionalCustomTimer(5)) |         selectedTimer.set(FunctionalCustomTimer(5)) | ||||||
|         viewModel = SessionViewModel(selectedTimer, SelectedSessionReport(), mock(), LogServiceImpl()) |         viewModel = SessionViewModel(selectedTimer, SelectedSessionReport(), SelectedTask(), LogServiceImpl()) | ||||||
|         InvisibleSessionManager.setParameters(viewModel, mediaPlayer) |         InvisibleSessionManager.setParameters(viewModel, mediaPlayer) | ||||||
| 
 | 
 | ||||||
|         val test = launch { |         val test = launch { | ||||||
|  |  | ||||||
|  | @ -9,13 +9,13 @@ buildscript { | ||||||
| 
 | 
 | ||||||
|     dependencies { |     dependencies { | ||||||
|         classpath 'com.google.gms:google-services:4.3.15' |         classpath 'com.google.gms:google-services:4.3.15' | ||||||
|         classpath 'com.android.tools.build:gradle:7.2.0' |         classpath 'com.android.tools.build:gradle:8.0.0' | ||||||
|         classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.4' |         classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.4' | ||||||
|     } |     } | ||||||
| }// Top-level build file where you can add configuration options common to all sub-projects/modules. | }// Top-level build file where you can add configuration options common to all sub-projects/modules. | ||||||
| plugins { | plugins { | ||||||
|     id 'com.android.application' version '7.4.2' apply false |     id 'com.android.application' version '8.0.0' apply false | ||||||
|     id 'com.android.library' version '7.4.2' apply false |     id 'com.android.library' version '8.0.0' apply false | ||||||
|     id 'org.jetbrains.kotlin.android' version '1.7.0' apply false |     id 'org.jetbrains.kotlin.android' version '1.7.0' apply false | ||||||
| 
 | 
 | ||||||
|     // Hilt |     // Hilt | ||||||
|  |  | ||||||
		Reference in a new issue
	
	 Rune Dyselinck
						Rune Dyselinck