From 524d6495237cff51e125372b0ce310b9f2bf0860 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sun, 5 Jan 2020 00:36:44 +0100 Subject: [PATCH] Add new tests --- .../LoyaltyCardViewActivityTest.java | 50 ++++++- .../protect/card_locker/MainActivityTest.java | 140 ++++++++++++++++++ 2 files changed, 189 insertions(+), 1 deletion(-) diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index 440a6594a..24a059144 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -24,6 +24,8 @@ import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import androidx.core.widget.TextViewCompat; + +import com.google.android.material.tabs.TabLayout; import com.google.zxing.BarcodeFormat; import com.google.zxing.client.android.Intents; import java.io.IOException; @@ -232,7 +234,6 @@ public class LoyaltyCardViewActivityTest final EditText storeField = activity.findViewById(R.id.storeNameEdit); final EditText noteField = activity.findViewById(R.id.noteEdit); - final TextView cardIdField = activity.findViewById(R.id.cardIdView); activity.findViewById(R.id.fabSave).performClick(); assertEquals(0, db.getLoyaltyCardCount()); @@ -619,6 +620,53 @@ public class LoyaltyCardViewActivityTest } } + @Test + public void checkNoTabViewOnSingleCardFromStore() + { + ActivityController activityController = createActivityWithLoyaltyCard(false); + Activity activity = (Activity)activityController.get(); + DBHelper db = new DBHelper(activity); + + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE); + + activityController.start(); + activityController.visible(); + activityController.resume(); + + final TabLayout tabLayout = activity.findViewById(R.id.tabLayout); + assertEquals(1, tabLayout.getTabCount()); + assertEquals(View.GONE, tabLayout.getVisibility()); + } + + @Test + public void checkTabViewOnMultipleCardsFromSameStore() + { + ActivityController activityController = createActivityWithLoyaltyCard(false); + Activity activity = (Activity)activityController.get(); + DBHelper db = new DBHelper(activity); + + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE); + db.insertLoyaltyCard("store", "note2", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE); + + activityController.start(); + activityController.visible(); + activityController.resume(); + + final TabLayout tabLayout = activity.findViewById(R.id.tabLayout); + assertEquals(2, tabLayout.getTabCount()); + assertEquals(View.VISIBLE, tabLayout.getVisibility()); + checkAllFields(activity, ViewMode.VIEW_CARD, "store", "note", BARCODE_DATA, BARCODE_TYPE); + + // Check if the card switches correctly + tabLayout.getTabAt(1).select(); + + activityController.start(); + activityController.visible(); + activityController.resume(); + + checkAllFields(activity, ViewMode.VIEW_CARD, "store", "note2", BARCODE_DATA, BARCODE_TYPE); + } + @Test public void importCard() { diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java index 0d3441c8c..4059f79db 100644 --- a/app/src/test/java/protect/card_locker/MainActivityTest.java +++ b/app/src/test/java/protect/card_locker/MainActivityTest.java @@ -7,6 +7,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import androidx.appcompat.widget.SearchView; import android.view.Menu; @@ -22,8 +23,10 @@ import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import org.robolectric.Shadows; import org.robolectric.annotation.Config; import org.robolectric.android.controller.ActivityController; +import org.robolectric.shadows.ShadowListView; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -126,6 +129,49 @@ public class MainActivityTest assertNotNull(cursor); } + public void AddTwoLoyaltyCardsFromSameStore() + { + ActivityController activityController = Robolectric.buildActivity(MainActivity.class).create(); + + Activity mainActivity = (Activity)activityController.get(); + activityController.start(); + activityController.resume(); + + TextView helpText = mainActivity.findViewById(R.id.helpText); + TextView noMatchingCardsText = mainActivity.findViewById(R.id.noMatchingCardsText); + ListView list = mainActivity.findViewById(R.id.list); + + assertEquals(0, list.getCount()); + + DBHelper db = new DBHelper(mainActivity); + db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE); + db.insertLoyaltyCard("store", "note2", "cardId2", BarcodeFormat.MAXICODE.toString(), Color.YELLOW, Color.GRAY); + db.insertLoyaltyCard("store2", "note2", "cardId2", BarcodeFormat.UPC_E.toString(), Color.BLUE, Color.MAGENTA); + + assertEquals(View.VISIBLE, helpText.getVisibility()); + assertEquals(View.GONE, noMatchingCardsText.getVisibility()); + assertEquals(View.GONE, list.getVisibility()); + + activityController.pause(); + activityController.resume(); + + assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, noMatchingCardsText.getVisibility()); + assertEquals(View.VISIBLE, list.getVisibility()); + + // We expect to see only 2 "cards" because the first store should be merged + assertEquals(2, list.getAdapter().getCount()); + Cursor cursor = (Cursor)list.getAdapter().getItem(0); + assertNotNull(cursor); + + // Check if this returns the first loyalty card + LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cursor); + assertEquals("store", card.store); + assertEquals("note", card.note); + assertEquals("cardId", card.cardId); + assertEquals(BarcodeFormat.UPC_A.toString(), card.barcodeType); + } + @Test public void testFiltering() { @@ -219,6 +265,100 @@ public class MainActivityTest assertEquals(2, list.getCount()); } + @Test + public void testFilteringWithGroupedCards() + { + ActivityController activityController = Robolectric.buildActivity(MainActivity.class).create(); + + MainActivity mainActivity = (MainActivity)activityController.get(); + activityController.start(); + activityController.resume(); + + TextView helpText = mainActivity.findViewById(R.id.helpText); + TextView noMatchingCardsText = mainActivity.findViewById(R.id.noMatchingCardsText); + ListView list = mainActivity.findViewById(R.id.list); + + DBHelper db = new DBHelper(mainActivity); + db.insertLoyaltyCard("The First Store", "Initial note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE); + db.insertLoyaltyCard("The First Store", "Tertiary note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE); + db.insertLoyaltyCard("The Second Store", "Secondary note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE); + + activityController.pause(); + activityController.resume(); + + assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, noMatchingCardsText.getVisibility()); + assertEquals(View.VISIBLE, list.getVisibility()); + + assertEquals(2, list.getCount()); + + mainActivity.filter = "store"; + + activityController.pause(); + activityController.resume(); + + assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, noMatchingCardsText.getVisibility()); + assertEquals(View.VISIBLE, list.getVisibility()); + + assertEquals(2, list.getCount()); + + mainActivity.filter = "first"; + + activityController.pause(); + activityController.resume(); + + assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, noMatchingCardsText.getVisibility()); + assertEquals(View.VISIBLE, list.getVisibility()); + + assertEquals(1, list.getCount()); + + mainActivity.filter = "initial"; + + activityController.pause(); + activityController.resume(); + + assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, noMatchingCardsText.getVisibility()); + assertEquals(View.VISIBLE, list.getVisibility()); + + assertEquals(1, list.getCount()); + + mainActivity.filter = "second"; + + activityController.pause(); + activityController.resume(); + + assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, noMatchingCardsText.getVisibility()); + assertEquals(View.VISIBLE, list.getVisibility()); + + assertEquals(1, list.getCount()); + + mainActivity.filter = "company"; + + activityController.pause(); + activityController.resume(); + + assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility()); + assertEquals(View.VISIBLE, list.getVisibility()); + + assertEquals(0, list.getCount()); + + mainActivity.filter = ""; + + activityController.pause(); + activityController.resume(); + + assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, noMatchingCardsText.getVisibility()); + assertEquals(View.VISIBLE, list.getVisibility()); + + assertEquals(2, list.getCount()); + } + @Test public void testFirstRunStartsIntro() {