package org.aplas.myshop; import android.content.Intent; import android.widget.Button; import android.widget.EditText; import androidx.lifecycle.Lifecycle; import androidx.test.core.app.ActivityScenario; import org.aplas.myshop.model.User; import org.aplas.myshop.sql.Database; import org.junit.After; import org.junit.Before; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.MethodSorters; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.robolectric.Shadows.shadowOf; import com.google.android.material.snackbar.Snackbar; @RunWith(RobolectricTestRunner.class) @Config(manifest= Config.NONE) @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class TestLoginSuccess extends ViewTest{ ActivityScenario scenario; private EditText nama, password; private Database database; private Button loginButton; @Before public void setUp() { scenario = ActivityScenario.launch(LoginActivity.class); scenario.moveToState(Lifecycle.State.CREATED); scenario.onActivity(activity -> { nama = activity.findViewById(R.id.textInputEditTextUsername); password = activity.findViewById(R.id.textInputEditTextPassword); loginButton = activity.findViewById(R.id.appCompatButtonLogin); database = new Database(activity); }); } @After public void tearDown() { scenario.close(); } @Test public void test01Seller() { scenario.onActivity(activity -> { User user = new User(); user.setName("daffa1@test.com"); user.setPassword("password"); user.setRole("Seller"); database.addUser(user); nama.setText("daffa1@test.com"); password.setText("password"); loginButton.performClick(); Intent expectedIntent = new Intent(activity, SellerHomeActivity.class); expectedIntent.putExtra("Username", "daffa1@test.com"); Intent actualIntent = shadowOf(activity).getNextStartedActivity(); assertNotNull("No intents detected, please check your login button on click function inside LoginActivity", actualIntent); testItem(expectedIntent.getComponent(), actualIntent.getComponent(), "Intents do not match, please check your login button on click function inside LoginActivity", 1); database.close(); }); } @Test public void test02Buyer() { scenario.onActivity(activity -> { User user = new User(); user.setName("daffa2@test.com"); user.setPassword("password"); user.setRole("Buyer"); database.addUser(user); nama.setText("daffa2@test.com"); password.setText("password"); loginButton.performClick(); Intent expectedIntent = new Intent(activity, BuyerHomeActivity.class); expectedIntent.putExtra("Username", "daffa2@test.com"); Intent actualIntent = shadowOf(activity).getNextStartedActivity(); assertNotNull("No intents detected, please check your login button on click function inside LoginActivity", actualIntent); testItem(expectedIntent.getComponent(), actualIntent.getComponent(), "Intents do not match, please check your login button on click function inside LoginActivity", 1); database.close(); }); } @Test public void test03invalid() { scenario.onActivity(activity -> { Database database = mock(Database.class); activity.setDatabase(database); nama.setText("daffa3@test.com"); password.setText("password"); when(database.checkUser("daffa3@test.com", "password")).thenReturn(false); loginButton.performClick(); Snackbar snackbar = Snackbar.make(activity.findViewById(R.id.nestedScrollViewProduct),activity.getString(R.string.error_valid_email_password), Snackbar.LENGTH_LONG); snackbar.show(); // assertTrue(snackbar.isShown()); testItem(true, snackbar.isShown(), "Your login function doesn't seem working, please check your login button on click function inside LoginActivity", 3); database.close(); }); } }