Initial commit of application

This commit is contained in:
Branden Archer
2016-01-30 20:50:30 -05:00
parent 439e226a80
commit 265d24c95d
51 changed files with 1748 additions and 0 deletions

View File

@@ -0,0 +1,128 @@
package protect.card_locker;
import android.app.Activity;
import android.database.Cursor;
import com.google.zxing.BarcodeFormat;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 17)
public class DatabaseTest
{
private DBHelper db;
@Before
public void setUp()
{
Activity activity = Robolectric.setupActivity(MainActivity.class);
db = new DBHelper(activity);
}
@Test
public void addRemoveOneGiftCard()
{
assertEquals(0, db.getLoyaltyCardCount());
boolean result = db.insertLoyaltyCard("store", "cardId", BarcodeFormat.UPC_A.toString());
assertTrue(result);
assertEquals(1, db.getLoyaltyCardCount());
LoyaltyCard loyaltyCard = db.getLoyaltyCard(1);
assertNotNull(loyaltyCard);
assertEquals("store", loyaltyCard.store);
assertEquals("cardId", loyaltyCard.cardId);
assertEquals(BarcodeFormat.UPC_A.toString(), loyaltyCard.barcodeType);
result = db.deleteLoyaltyCard(1);
assertTrue(result);
assertEquals(0, db.getLoyaltyCardCount());
assertNull(db.getLoyaltyCard(1));
}
@Test
public void updateGiftCard()
{
boolean result = db.insertLoyaltyCard("store", "cardId", BarcodeFormat.UPC_A.toString());
assertTrue(result);
assertEquals(1, db.getLoyaltyCardCount());
result = db.updateLoyaltyCard(1, "store1", "cardId1", BarcodeFormat.AZTEC.toString());
assertTrue(result);
assertEquals(1, db.getLoyaltyCardCount());
LoyaltyCard loyaltyCard = db.getLoyaltyCard(1);
assertNotNull(loyaltyCard);
assertEquals("store1", loyaltyCard.store);
assertEquals("cardId1", loyaltyCard.cardId);
assertEquals(BarcodeFormat.AZTEC.toString(), loyaltyCard.barcodeType);
}
@Test
public void updateMissingGiftCard()
{
assertEquals(0, db.getLoyaltyCardCount());
boolean result = db.updateLoyaltyCard(1, "store1", "cardId1", BarcodeFormat.UPC_A.toString());
assertEquals(false, result);
assertEquals(0, db.getLoyaltyCardCount());
}
@Test
public void emptyGiftCardValues()
{
boolean result = db.insertLoyaltyCard("", "", "");
assertTrue(result);
assertEquals(1, db.getLoyaltyCardCount());
LoyaltyCard loyaltyCard = db.getLoyaltyCard(1);
assertNotNull(loyaltyCard);
assertEquals("", loyaltyCard.store);
assertEquals("", loyaltyCard.cardId);
assertEquals("", loyaltyCard.barcodeType);
}
@Test
public void giftCardsViaCursor()
{
final int CARDS_TO_ADD = 10;
// Add the gift cards in reverse order, to ensure
// that they are sorted
for(int index = CARDS_TO_ADD-1; index >= 0; index--)
{
boolean result = db.insertLoyaltyCard("store" + index, "cardId" + index, BarcodeFormat.UPC_A.toString());
assertTrue(result);
}
assertEquals(CARDS_TO_ADD, db.getLoyaltyCardCount());
Cursor cursor = db.getLoyaltyCardCursor();
assertNotNull(cursor);
assertEquals(CARDS_TO_ADD, cursor.getCount());
cursor.moveToFirst();
for(int index = 0; index < CARDS_TO_ADD; index++)
{
assertEquals("store"+index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STORE)));
assertEquals("cardId"+index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID)));
assertEquals(BarcodeFormat.UPC_A.toString(), cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE)));
cursor.moveToNext();
}
assertTrue(cursor.isAfterLast());
}
}

View File

@@ -0,0 +1,51 @@
package protect.card_locker;
import android.app.Activity;
import android.database.Cursor;
import android.view.View;
import android.widget.TextView;
import com.google.zxing.BarcodeFormat;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.util.ActivityController;
import static org.junit.Assert.assertEquals;
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 17)
public class LoyaltyCardCursorAdapterTest
{
@Test
public void TestCursorAdapter()
{
ActivityController activityController = Robolectric.buildActivity(MainActivity.class).create();
Activity activity = (Activity)activityController.get();
DBHelper db = new DBHelper(activity);
db.insertLoyaltyCard("store", "cardId", BarcodeFormat.UPC_A.toString());
LoyaltyCard card = db.getLoyaltyCard(1);
Cursor cursor = db.getLoyaltyCardCursor();
cursor.moveToFirst();
LoyaltyCardCursorAdapter adapter = new LoyaltyCardCursorAdapter(activity.getApplicationContext(), cursor);
View view = adapter.newView(activity.getApplicationContext(), cursor, null);
adapter.bindView(view, activity.getApplicationContext(), cursor);
final TextView storeField = (TextView) view.findViewById(R.id.store);
assertEquals(card.store, storeField.getText().toString());
final TextView cardIdField = (TextView) view.findViewById(R.id.cardId);
final String cardIdLabel = activity.getResources().getString(R.string.cardId);
final String cardIdFormat = activity.getResources().getString(R.string.cardIdFormat);
String cardIdText = String.format(cardIdFormat, cardIdLabel, "cardId");
assertEquals(cardIdText, cardIdField.getText().toString());
}
}

View File

@@ -0,0 +1,372 @@
package protect.card_locker;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.client.android.Intents;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.res.builder.RobolectricPackageManager;
import org.robolectric.shadows.ShadowActivity;
import org.robolectric.util.ActivityController;
import java.io.IOException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.robolectric.Shadows.shadowOf;
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 17)
public class LoyaltyCardViewActivityTest
{
private final String BARCODE_DATA = "428311627547";
private final String BARCODE_TYPE = BarcodeFormat.UPC_A.name();
private final String EAN_BARCODE_DATA = "4763705295336";
private final String EAN_BARCODE_TYPE = BarcodeFormat.EAN_13.name();
/**
* Register a handler in the package manager for a image capture intent
*/
private void registerMediaStoreIntentHandler()
{
// Add something that will 'handle' the media capture intent
RobolectricPackageManager packageManager = (RobolectricPackageManager) shadowOf(
RuntimeEnvironment.application).getPackageManager();
ResolveInfo info = new ResolveInfo();
info.isDefault = true;
ApplicationInfo applicationInfo = new ApplicationInfo();
applicationInfo.packageName = "does.not.matter";
info.activityInfo = new ActivityInfo();
info.activityInfo.applicationInfo = applicationInfo;
info.activityInfo.name = "DoesNotMatter";
Intent intent = new Intent(Intents.Scan.ACTION);
packageManager.addResolveInfoForIntent(intent, info);
}
/**
* Save a loyalty card and check that the database contains the
* expected values
*/
private void saveLoyaltyCardWithArguments(final Activity activity,
final String store, final String cardId,
final String barcodeType,
boolean creatingNewCard)
{
DBHelper db = new DBHelper(activity);
if(creatingNewCard)
{
assertEquals(0, db.getLoyaltyCardCount());
}
else
{
assertEquals(1, db.getLoyaltyCardCount());
}
final EditText storeField = (EditText) activity.findViewById(R.id.storeName);
final EditText cardIdField = (EditText) activity.findViewById(R.id.cardId);
final EditText barcodeTypeField = (EditText) activity.findViewById(R.id.barcodeType);
final Button saveButton = (Button) activity.findViewById(R.id.saveButton);
storeField.setText(store);
cardIdField.setText(cardId);
barcodeTypeField.setText(barcodeType);
assertEquals(false, activity.isFinishing());
saveButton.performClick();
assertEquals(true, activity.isFinishing());
assertEquals(1, db.getLoyaltyCardCount());
LoyaltyCard card = db.getLoyaltyCard(1);
assertEquals(store, card.store);
assertEquals(cardId, card.cardId);
assertEquals(barcodeType, card.barcodeType);
}
/**
* Initiate and complete a barcode capture, either in success
* or in failure
*/
private void captureBarcodeWithResult(final Activity activity, final int buttonId, final boolean success) throws IOException
{
// Start image capture
final Button captureButton = (Button) activity.findViewById(buttonId);
captureButton.performClick();
ShadowActivity.IntentForResult intentForResult = shadowOf(activity).peekNextStartedActivityForResult();
assertNotNull(intentForResult);
Intent intent = intentForResult.intent;
assertNotNull(intent);
String action = intent.getAction();
assertNotNull(action);
assertEquals(Intents.Scan.ACTION, action);
Bundle bundle = intent.getExtras();
assertNotNull(bundle);
Intent resultIntent = new Intent(intent);
Bundle resultBuddle = new Bundle();
resultBuddle.putString(Intents.Scan.RESULT, BARCODE_DATA);
resultBuddle.putString(Intents.Scan.RESULT_FORMAT, BARCODE_TYPE);
resultIntent.putExtras(resultBuddle);
// Respond to image capture, success
shadowOf(activity).receiveResult(
intent,
success ? Activity.RESULT_OK : Activity.RESULT_CANCELED,
resultIntent);
}
private void checkFieldProperties(final Activity activity, final int id, final int visibility,
final String contents)
{
final View view = activity.findViewById(id);
assertNotNull(view);
assertEquals(visibility, view.getVisibility());
if(contents != null)
{
TextView textView = (TextView)view;
assertEquals(contents, textView.getText().toString());
}
}
private void checkAllFields(final Activity activity, final String store, final String cardId,
final String barcodeType)
{
int cardIdVisibility = cardId.isEmpty() ? View.GONE : View.VISIBLE;
checkFieldProperties(activity, R.id.storeName, View.VISIBLE, store);
checkFieldProperties(activity, R.id.cardId, View.VISIBLE, cardId);
checkFieldProperties(activity, R.id.barcodeType, View.VISIBLE, barcodeType);
checkFieldProperties(activity, R.id.captureButton, View.VISIBLE, null);
checkFieldProperties(activity, R.id.saveButton, View.VISIBLE, null);
checkFieldProperties(activity, R.id.cancelButton, View.VISIBLE, null);
checkFieldProperties(activity, R.id.barcode, View.VISIBLE, null);
checkFieldProperties(activity, R.id.barcodeIdLayout, cardIdVisibility, null);
checkFieldProperties(activity, R.id.barcodeLayout, cardIdVisibility, null);
checkFieldProperties(activity, R.id.barcodeTypeLayout, View.GONE, null);
}
@Test
public void startWithoutParametersCheckFieldsAvailable()
{
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardViewActivity.class).create();
activityController.start();
activityController.visible();
activityController.resume();
Activity activity = (Activity)activityController.get();
checkAllFields(activity, "", "", "");
}
@Test
public void startWithoutParametersCannotCreateGiftCard()
{
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardViewActivity.class).create();
activityController.start();
activityController.visible();
activityController.resume();
Activity activity = (Activity)activityController.get();
DBHelper db = new DBHelper(activity);
assertEquals(0, db.getLoyaltyCardCount());
final EditText storeField = (EditText) activity.findViewById(R.id.storeName);
final EditText cardIdField = (EditText) activity.findViewById(R.id.cardId);
final Button saveButton = (Button) activity.findViewById(R.id.saveButton);
saveButton.performClick();
assertEquals(0, db.getLoyaltyCardCount());
storeField.setText("store");
saveButton.performClick();
assertEquals(0, db.getLoyaltyCardCount());
cardIdField.setText("cardId");
saveButton.performClick();
assertEquals(0, db.getLoyaltyCardCount());
}
@Test
public void startWithoutParametersCancel()
{
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardViewActivity.class).create();
activityController.start();
activityController.visible();
activityController.resume();
Activity activity = (Activity)activityController.get();
final Button cancelButton = (Button) activity.findViewById(R.id.cancelButton);
assertEquals(false, activity.isFinishing());
cancelButton.performClick();
assertEquals(true, activity.isFinishing());
}
@Test
public void startWithoutParametersCaptureBarcodeCreateGiftCard() throws IOException
{
registerMediaStoreIntentHandler();
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardViewActivity.class).create();
activityController.start();
activityController.visible();
activityController.resume();
Activity activity = (Activity)activityController.get();
checkAllFields(activity, "", "", "");
// Complete barcode capture successfully
captureBarcodeWithResult(activity, R.id.captureButton, true);
checkAllFields(activity, "", BARCODE_DATA, BARCODE_TYPE);
// Save and check the gift card
saveLoyaltyCardWithArguments(activity, "store", BARCODE_DATA, BARCODE_TYPE, true);
}
@Test
public void startWithoutParametersCaptureBarcodeFailure() throws IOException
{
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardViewActivity.class).create();
activityController.start();
activityController.visible();
activityController.resume();
Activity activity = (Activity)activityController.get();
checkAllFields(activity, "", "", "");
// Complete barcode capture in failure
captureBarcodeWithResult(activity, R.id.captureButton, false);
checkAllFields(activity, "", "", "");
}
@Test
public void startWithoutParametersCaptureBarcodeCancel() throws IOException
{
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardViewActivity.class).create();
activityController.start();
activityController.visible();
activityController.resume();
Activity activity = (Activity)activityController.get();
checkAllFields(activity, "", "", "");
// Complete barcode capture successfully
captureBarcodeWithResult(activity, R.id.captureButton, true);
checkAllFields(activity, "", BARCODE_DATA, BARCODE_TYPE);
// Cancel the gift card creation
final Button cancelButton = (Button) activity.findViewById(R.id.cancelButton);
assertEquals(false, activity.isFinishing());
cancelButton.performClick();
assertEquals(true, activity.isFinishing());
}
private ActivityController createActivityWithLoyaltyCard()
{
Intent intent = new Intent();
final Bundle bundle = new Bundle();
bundle.putInt("id", 1);
bundle.putBoolean("update", true);
intent.putExtras(bundle);
return Robolectric.buildActivity(LoyaltyCardViewActivity.class).withIntent(intent).create();
}
@Test
public void startWithGiftCardCheckDisplay() throws IOException
{
ActivityController activityController = createActivityWithLoyaltyCard();
Activity activity = (Activity)activityController.get();
DBHelper db = new DBHelper(activity);
db.insertLoyaltyCard("store", BARCODE_DATA, BARCODE_TYPE);
activityController.start();
activityController.visible();
activityController.resume();
checkAllFields(activity, "store", BARCODE_DATA, BARCODE_TYPE);
}
@Test
public void startWithLoyaltyCardWithBarcodeUpdateBarcode() throws IOException
{
ActivityController activityController = createActivityWithLoyaltyCard();
Activity activity = (Activity)activityController.get();
DBHelper db = new DBHelper(activity);
db.insertLoyaltyCard("store", EAN_BARCODE_DATA, EAN_BARCODE_TYPE);
activityController.start();
activityController.visible();
activityController.resume();
checkAllFields(activity, "store", EAN_BARCODE_DATA, EAN_BARCODE_TYPE);
// Complete barcode capture successfully
captureBarcodeWithResult(activity, R.id.captureButton, true);
checkAllFields(activity, "store", BARCODE_DATA, BARCODE_TYPE);
}
@Test
public void startWithGiftCardWithReceiptUpdateReceiptCancel() throws IOException
{
ActivityController activityController = createActivityWithLoyaltyCard();
Activity activity = (Activity)activityController.get();
DBHelper db = new DBHelper(activity);
db.insertLoyaltyCard("store", EAN_BARCODE_DATA, EAN_BARCODE_TYPE);
activityController.start();
activityController.visible();
activityController.resume();
checkAllFields(activity, "store", EAN_BARCODE_DATA, EAN_BARCODE_TYPE);
// Complete barcode capture successfully
captureBarcodeWithResult(activity, R.id.captureButton, true);
checkAllFields(activity, "store", BARCODE_DATA, BARCODE_TYPE);
// Cancel the gift card creation
final Button cancelButton = (Button) activity.findViewById(R.id.cancelButton);
assertEquals(false, activity.isFinishing());
cancelButton.performClick();
assertEquals(true, activity.isFinishing());
}
}

View File

@@ -0,0 +1,101 @@
package protect.card_locker;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;
import com.google.zxing.BarcodeFormat;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.util.ActivityController;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.robolectric.Shadows.shadowOf;
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 17)
public class MainActivityTest
{
@Test
public void initiallyNoLoyaltyCards() throws Exception
{
Activity activity = Robolectric.setupActivity(MainActivity.class);
assertTrue(activity != null);
TextView helpText = (TextView)activity.findViewById(R.id.helpText);
assertEquals(View.VISIBLE, helpText.getVisibility());
ListView list = (ListView)activity.findViewById(R.id.list);
assertEquals(View.GONE, list.getVisibility());
}
@Test
public void onCreateShouldInflateLayout() throws Exception
{
final MainActivity activity = Robolectric.setupActivity(MainActivity.class);
final Menu menu = shadowOf(activity).getOptionsMenu();
assertTrue(menu != null);
// The settings and add button should be present
assertEquals(menu.size(), 1);
assertEquals("Add", menu.findItem(R.id.action_add).getTitle().toString());
}
@Test
public void clickAddLaunchesLoyaltyCardViewActivity()
{
final MainActivity activity = Robolectric.setupActivity(MainActivity.class);
shadowOf(activity).clickMenuItem(R.id.action_add);
Intent intent = shadowOf(activity).peekNextStartedActivityForResult().intent;
assertEquals(new ComponentName(activity, LoyaltyCardViewActivity.class), intent.getComponent());
assertNull(intent.getExtras());
}
@Test
public void addOneLoyaltyCard()
{
ActivityController activityController = Robolectric.buildActivity(MainActivity.class).create();
Activity mainActivity = (Activity)activityController.get();
activityController.start();
activityController.resume();
TextView helpText = (TextView)mainActivity.findViewById(R.id.helpText);
ListView list = (ListView)mainActivity.findViewById(R.id.list);
assertEquals(0, list.getCount());
DBHelper db = new DBHelper(mainActivity);
db.insertLoyaltyCard("store", "cardId", BarcodeFormat.UPC_A.toString());
assertEquals(View.VISIBLE, helpText.getVisibility());
assertEquals(View.GONE, list.getVisibility());
activityController.pause();
activityController.resume();
assertEquals(View.GONE, helpText.getVisibility());
assertEquals(View.VISIBLE, list.getVisibility());
assertEquals(1, list.getAdapter().getCount());
Cursor cursor = (Cursor)list.getAdapter().getItem(0);
assertNotNull(cursor);
}
}