package social.grain import androidx.compose.ui.test.junit4.v2.createComposeRule import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.test.ext.junit.runners.AndroidJUnit4 import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import social.grain.data.model.AspectRatio import social.grain.data.model.GrainGallery import social.grain.data.model.GrainPhoto import social.grain.data.model.GrainProfile import social.grain.data.model.H3Location import social.grain.ui.components.GalleryCard import social.grain.ui.theme.GrainTheme private const val CELL = "8a2a1072b59ffff" private const val PLACE = "Liberty Island" /** * The place name under an author opens that location's feed. * * It has to report the H3 cell rather than the name: the feed groups on the * cell, so a tap that carried only the words would open somebody else's * spelling of the same corner, or nothing at all. */ @RunWith(AndroidJUnit4::class) class GalleryCardLocationTapTest { @get:Rule val composeRule = createComposeRule() private fun gallery(location: H3Location?) = GrainGallery( uri = "at://did:plc:test/social.grain.gallery/1", creator = GrainProfile(did = "did:plc:test", handle = "harbor.example"), location = location, items = listOf( GrainPhoto( uri = "at://did:plc:test/social.grain.photo/1", aspectRatio = AspectRatio(3, 2), ), ), indexedAt = "2026-08-01T00:00:00Z", ) @Test fun tappingThePlaceNameReportsTheCellBehindIt() { var opened: Pair? = null composeRule.setContent { GrainTheme { GalleryCard( gallery = gallery(H3Location(value = CELL, name = PLACE)), onLocationTap = { cell, name -> opened = cell to name }, ) } } composeRule.onNodeWithText(PLACE).performClick() assertEquals(CELL to PLACE, opened) } @Test fun aGalleryWithNoCellHasNothingToOpen() { var opened: Pair? = null composeRule.setContent { GrainTheme { GalleryCard( // The name survived onto the view but the cell didn't, so // there is no feed to send anyone to. gallery = gallery(null).copy(locationDisplay = PLACE), onLocationTap = { cell, name -> opened = cell to name }, ) } } composeRule.onNodeWithText(PLACE).performClick() assertNull(opened) } }