diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java
index 35a607204..3408c0ce9 100644
--- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java
+++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java
@@ -220,7 +220,7 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
item.setVisible(false);
}
- if(loyaltyCard.extras.length() > 0)
+ if(loyaltyCard != null && loyaltyCard.extras.length() > 0)
{
MenuItem item = menu.findItem(R.id.action_view_extras);
item.setVisible(true);
diff --git a/app/src/main/res/menu/card_view_menu.xml b/app/src/main/res/menu/card_view_menu.xml
index 53c0a4c7e..82e848fad 100644
--- a/app/src/main/res/menu/card_view_menu.xml
+++ b/app/src/main/res/menu/card_view_menu.xml
@@ -20,7 +20,7 @@
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4072cce78..b64fa9012 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -19,6 +19,7 @@
Enter Card
Edit Card
Edit
+ More Info
Delete
Confirm
Block Rotation
diff --git a/app/src/test/java/protect/card_locker/DatabaseTest.java b/app/src/test/java/protect/card_locker/DatabaseTest.java
index a2bc92a9d..063cc7139 100644
--- a/app/src/test/java/protect/card_locker/DatabaseTest.java
+++ b/app/src/test/java/protect/card_locker/DatabaseTest.java
@@ -8,6 +8,7 @@ import android.graphics.Color;
import com.google.zxing.BarcodeFormat;
+import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test;
@@ -29,10 +30,13 @@ public class DatabaseTest
private static final Integer DEFAULT_HEADER_COLOR = Color.BLACK;
private static final Integer DEFAULT_HEADER_TEXT_COLOR = Color.WHITE;
+ private static JSONObject DEFAULT_EXTRAS;
@Before
- public void setUp()
+ public void setUp() throws JSONException
{
+ DEFAULT_EXTRAS = new JSONObject("{\"testkey\": \"testvalue\"}");
+
Activity activity = Robolectric.setupActivity(MainActivity.class);
db = new DBHelper(activity);
}
@@ -41,7 +45,7 @@ public class DatabaseTest
public void addRemoveOneGiftCard()
{
assertEquals(0, db.getLoyaltyCardCount());
- long id = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, new JSONObject());
+ long id = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, DEFAULT_EXTRAS);
boolean result = (id != -1);
assertTrue(result);
assertEquals(1, db.getLoyaltyCardCount());
@@ -62,12 +66,12 @@ public class DatabaseTest
@Test
public void updateGiftCard()
{
- long id = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, new JSONObject());
+ long id = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, DEFAULT_EXTRAS);
boolean result = (id != -1);
assertTrue(result);
assertEquals(1, db.getLoyaltyCardCount());
- result = db.updateLoyaltyCard(1, "store1", "note1", "cardId1", BarcodeFormat.AZTEC.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, new JSONObject());
+ result = db.updateLoyaltyCard(1, "store1", "note1", "cardId1", BarcodeFormat.AZTEC.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, DEFAULT_EXTRAS);
assertTrue(result);
assertEquals(1, db.getLoyaltyCardCount());
@@ -77,6 +81,7 @@ public class DatabaseTest
assertEquals("note1", loyaltyCard.note);
assertEquals("cardId1", loyaltyCard.cardId);
assertEquals(BarcodeFormat.AZTEC.toString(), loyaltyCard.barcodeType);
+ assertEquals(DEFAULT_EXTRAS.toString(), loyaltyCard.extras.toString());
}
@Test
@@ -85,7 +90,7 @@ public class DatabaseTest
assertEquals(0, db.getLoyaltyCardCount());
boolean result = db.updateLoyaltyCard(1, "store1", "note1", "cardId1",
- BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, new JSONObject());
+ BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, DEFAULT_EXTRAS);
assertEquals(false, result);
assertEquals(0, db.getLoyaltyCardCount());
}
@@ -104,10 +109,11 @@ public class DatabaseTest
assertEquals("", loyaltyCard.note);
assertEquals("", loyaltyCard.cardId);
assertEquals("", loyaltyCard.barcodeType);
+ assertEquals("{}", loyaltyCard.extras.toString());
}
@Test
- public void giftCardsViaCursor()
+ public void giftCardsViaCursor() throws JSONException
{
final int CARDS_TO_ADD = 10;
@@ -116,7 +122,7 @@ public class DatabaseTest
for(int index = CARDS_TO_ADD-1; index >= 0; index--)
{
long id = db.insertLoyaltyCard("store" + index, "note" + index, "cardId" + index,
- BarcodeFormat.UPC_A.toString(), index, index*2, new JSONObject());
+ BarcodeFormat.UPC_A.toString(), index, index*2, new JSONObject("{\"testkey" + index + "\":\"testvalue" + index + "\"}"));
boolean result = (id != -1);
assertTrue(result);
}
@@ -139,6 +145,7 @@ public class DatabaseTest
assertEquals(BarcodeFormat.UPC_A.toString(), cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE)));
assertEquals(index, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR)));
assertEquals(index*2, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR)));
+ assertEquals("{\"testkey" + index + "\":\"testvalue" + index + "\"}", cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXTRAS)));
cursor.moveToNext();
}
@@ -194,6 +201,7 @@ public class DatabaseTest
assertEquals("", card.note);
assertEquals(null, card.headerColor);
assertEquals(null, card.headerTextColor);
+ assertEquals("{}", card.extras.toString());
database.close();
}
diff --git a/app/src/test/java/protect/card_locker/ImportExportTest.java b/app/src/test/java/protect/card_locker/ImportExportTest.java
index a4169320e..cab8f047a 100644
--- a/app/src/test/java/protect/card_locker/ImportExportTest.java
+++ b/app/src/test/java/protect/card_locker/ImportExportTest.java
@@ -8,6 +8,7 @@ import android.os.Environment;
import com.google.zxing.BarcodeFormat;
import org.apache.tools.ant.filters.StringInputStream;
+import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test;
@@ -44,10 +45,13 @@ public class ImportExportTest
private final String BARCODE_DATA = "428311627547";
private final String BARCODE_TYPE = BarcodeFormat.UPC_A.name();
+ private JSONObject EXTRAS;
@Before
- public void setUp()
+ public void setUp() throws JSONException
{
+ EXTRAS = new JSONObject("{\"key1\": \"value1\"}");
+
activity = Robolectric.setupActivity(MainActivity.class);
db = new DBHelper(activity);
nowMs = System.currentTimeMillis();
@@ -69,7 +73,7 @@ public class ImportExportTest
{
String storeName = String.format("store, \"%4d", index);
String note = String.format("note, \"%4d", index);
- long id = db.insertLoyaltyCard(storeName, note, BARCODE_DATA, BARCODE_TYPE, index, index*2, new JSONObject());
+ long id = db.insertLoyaltyCard(storeName, note, BARCODE_DATA, BARCODE_TYPE, index, index*2, EXTRAS);
boolean result = (id != -1);
assertTrue(result);
}
@@ -100,6 +104,7 @@ public class ImportExportTest
assertEquals(BARCODE_TYPE, card.barcodeType);
assertEquals(Integer.valueOf(index), card.headerColor);
assertEquals(Integer.valueOf(index*2), card.headerTextColor);
+ assertEquals(EXTRAS, card.extras);
index++;
}
diff --git a/app/src/test/java/protect/card_locker/ImportURITest.java b/app/src/test/java/protect/card_locker/ImportURITest.java
index fa4840cfc..601ec9fc5 100644
--- a/app/src/test/java/protect/card_locker/ImportURITest.java
+++ b/app/src/test/java/protect/card_locker/ImportURITest.java
@@ -5,6 +5,7 @@ import android.graphics.Color;
import android.net.Uri;
import com.google.zxing.BarcodeFormat;
+import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test;
@@ -32,10 +33,10 @@ public class ImportURITest {
}
@Test
- public void ensureNoDataLoss() throws InvalidObjectException
+ public void ensureNoDataLoss() throws InvalidObjectException, JSONException
{
// Generate card
- db.insertLoyaltyCard("store", "note", BarcodeFormat.UPC_A.toString(), LoyaltyCardDbIds.BARCODE_TYPE, Color.BLACK, Color.WHITE, new JSONObject());
+ db.insertLoyaltyCard("store", "note", BarcodeFormat.UPC_A.toString(), LoyaltyCardDbIds.BARCODE_TYPE, Color.BLACK, Color.WHITE, new JSONObject("{\"key\": \"value\"}"));
// Get card
LoyaltyCard card = db.getLoyaltyCard(1);
@@ -53,6 +54,7 @@ public class ImportURITest {
assertEquals(card.headerTextColor, parsedCard.headerTextColor);
assertEquals(card.note, parsedCard.note);
assertEquals(card.store, parsedCard.store);
+ assertEquals(card.extras.toString(), parsedCard.extras.toString());
}
@Test
diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java
index d14b796be..24796aa78 100644
--- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java
+++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java
@@ -22,6 +22,7 @@ import android.widget.TextView;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.client.android.Intents;
+import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test;
@@ -451,12 +452,13 @@ public class LoyaltyCardViewActivityTest
final Menu menu = shadowOf(activity).getOptionsMenu();
assertTrue(menu != null);
- // The share, settings and add button should be present
- assertEquals(menu.size(), 3);
+ // The rotation, share, edit and info button should be present
+ assertEquals(menu.size(), 4);
assertEquals("Block Rotation", menu.findItem(R.id.action_lock_unlock).getTitle().toString());
assertEquals("Share", menu.findItem(R.id.action_share).getTitle().toString());
assertEquals("Edit", menu.findItem(R.id.action_edit).getTitle().toString());
+ assertEquals("More Info", menu.findItem(R.id.action_view_extras).getTitle().toString());
}
@Test
@@ -609,6 +611,44 @@ public class LoyaltyCardViewActivityTest
}
}
+ @Test
+ public void checkMoreInfoNoExtras()
+ {
+ 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, new JSONObject());
+
+ activityController.start();
+ activityController.resume();
+ activityController.visible();
+
+ assertEquals(false, activity.isFinishing());
+
+ MenuItem item = shadowOf(activity).getOptionsMenu().findItem(R.id.action_view_extras);
+ assertEquals(false, item.isVisible());
+ }
+
+ @Test
+ public void checkMoreInfoExtras() throws JSONException
+ {
+ 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, new JSONObject("{\"key\": \"value\"}"));
+
+ activityController.start();
+ activityController.resume();
+ activityController.visible();
+
+ assertEquals(false, activity.isFinishing());
+
+ MenuItem item = shadowOf(activity).getOptionsMenu().findItem(R.id.action_view_extras);
+ assertEquals(true, item.isVisible());
+ }
+
@Test
public void importCard()
{