Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102package social.grain
import androidx.compose.ui.test.hasSetTextActionimport androidx.compose.ui.test.junit4.v2.createComposeRuleimport androidx.compose.ui.test.onNodeWithTextimport androidx.compose.ui.test.performClickimport androidx.compose.ui.test.performTextInputimport androidx.test.ext.junit.runners.AndroidJUnit4import org.junit.Afterimport org.junit.Beforeimport org.junit.Ruleimport org.junit.Testimport org.junit.runner.RunWithimport social.grain.feature.login.LoginScreenimport social.grain.feature.login.LoginViewModelimport social.grain.support.Harnessimport social.grain.support.awaitContentDescriptionimport social.grain.support.awaitTextimport social.grain.support.MainDispatcherRuleimport social.grain.support.awaitCall
/** * The sign-in screen, which is the only screen a signed-out reader ever sees. * * It forces its own dark scheme over a photograph rather than following the * device, so it is also the one screen where a theme regression would be * invisible everywhere else. */@RunWith(AndroidJUnit4::class)class LoginScreenTest {
@get:Rule val mainDispatcher = MainDispatcherRule()
@get:Rule val composeRule = createComposeRule()
private lateinit var harness: Harness
@Before fun setUp() { harness = Harness(signedIn = false) harness.server .on( "social.grain.unspecced.searchActorsTypeahead", """{"actors":[{"did":"did:plc:alice","handle":"alice.grain.social"}]}""", ) .on("par", """{"request_uri":"urn:abc"}""") }
@After fun tearDown() = harness.tearDown()
private fun show() { val model = LoginViewModel(harness.auth, harness.client) composeRule.setContent { LoginScreen(viewModel = model) } composeRule.waitForIdle() }
@Test fun theScreenInvitesAnAtmosphereAccount() { show()
composeRule.awaitText("Sign in with your atmosphere account") composeRule.awaitText("Handle") composeRule.awaitText("Sign in") composeRule.awaitText("Create account") }
@Test fun typingAHandleOffersMatchesFromTheServer() { show()
composeRule.onNode(hasSetTextAction()).performTextInput("ali") composeRule.waitUntil(10_000) { harness.server.countOf("social.grain.unspecced.searchActorsTypeahead") >= 1 } composeRule.waitForIdle()
composeRule.awaitText("alice.grain.social", substring = true) }
@Test fun signingInRunsThePushedAuthorizationRequest() { show()
composeRule.onNode(hasSetTextAction()).performTextInput("alice.grain.social") composeRule.onNodeWithText("Sign in").performClick()
composeRule.waitUntil(10_000) { harness.server.countOf("par") >= 1 } }
@Test fun creatingAnAccountAsksForTheSignUpPage() { show()
composeRule.onNodeWithText("Create account").performClick()
composeRule.waitUntil(10_000) { harness.server.countOf("par") >= 1 } val par = harness.server.lastCall("par") assert(par.body.contains("prompt=create")) }}