StocardImporter: refactor (#1443)

* StocardImporter: refactor

* StocardImporter: trim CSV fields

* LoyaltyCard: add .toString()

* StocardRecord: add .toString()

* StocardImporter: handle usages better

* StocardImporter: use label

* ImportExportTest: add importStocard2 + stocard2.zip

* StocardImporter: iterate over card map in key order

* StocardImporter: cleanup, handle label better, use providers file

* make spotbugs happy

* StocardImporter: can't use providersFileName, list known files, log unknown

* StocardImporter: fix regex, log properly, s/Provider/Store/

* StocardImporter: test /usages/ timestamp, nicer if/else flow

* StocardImporter: fix label usage

* StocardImporter: remove label prefix, improve error
This commit is contained in:
FC Stegerman
2023-08-05 09:52:59 +00:00
committed by GitHub
parent 7e3a5a9831
commit b83dbb3a87
4 changed files with 308 additions and 167 deletions

View File

@@ -1140,24 +1140,6 @@ public class ImportExportTest {
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
assertEquals("GAMMA", card.store);
assertEquals("", card.note);
assertEquals(null, card.validFrom);
assertEquals(null, card.expiry);
assertEquals(new BigDecimal("0"), card.balance);
assertEquals(null, card.balanceType);
assertEquals("55555", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.EAN_13, card.barcodeType.format());
assertEquals(0, card.starStatus);
assertEquals(1625600883, card.lastUsed);
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.front));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.back));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.icon));
card = DBHelper.getLoyaltyCard(mDatabase, 2);
assertEquals("Air Miles", card.store);
assertEquals("szjsbs", card.note);
assertEquals(null, card.validFrom);
@@ -1170,8 +1152,26 @@ public class ImportExportTest {
assertEquals(0, card.starStatus);
assertEquals(1625690099, card.lastUsed);
assertTrue(BitmapFactory.decodeStream(getClass().getResourceAsStream("stocard-front.jpg")).sameAs(Utils.retrieveCardImage(activity.getApplicationContext(), 2, ImageLocationType.front)));
assertTrue(BitmapFactory.decodeStream(getClass().getResourceAsStream("stocard-back.jpg")).sameAs(Utils.retrieveCardImage(activity.getApplicationContext(), 2, ImageLocationType.back)));
assertTrue(BitmapFactory.decodeStream(getClass().getResourceAsStream("stocard-front.jpg")).sameAs(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.front)));
assertTrue(BitmapFactory.decodeStream(getClass().getResourceAsStream("stocard-back.jpg")).sameAs(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.back)));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.icon));
card = DBHelper.getLoyaltyCard(mDatabase, 2);
assertEquals("GAMMA", card.store);
assertEquals("", card.note);
assertEquals(null, card.validFrom);
assertEquals(null, card.expiry);
assertEquals(new BigDecimal("0"), card.balance);
assertEquals(null, card.balanceType);
assertEquals("55555", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.EAN_13, card.barcodeType.format());
assertEquals(0, card.starStatus);
assertEquals(1625600883, card.lastUsed);
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 2, ImageLocationType.front));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 2, ImageLocationType.back));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 2, ImageLocationType.icon));
card = DBHelper.getLoyaltyCard(mDatabase, 3);
@@ -1195,6 +1195,91 @@ public class ImportExportTest {
TestHelpers.getEmptyDb(activity);
}
@Test
public void importStocard2() {
// Copy of stocard.zip, but with an extra card using a custom provider, a label for "Miles", and /usages/ timestamp
InputStream inputStream = getClass().getResourceAsStream("stocard2.zip");
// Import the Stocard data
ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Stocard, null);
assertEquals(ImportExportResultType.Success, result.resultType());
assertEquals(4, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
assertEquals("Foo", card.store);
assertEquals("", card.note);
assertEquals(null, card.validFrom);
assertEquals(null, card.expiry);
assertEquals(new BigDecimal("0"), card.balance);
assertEquals(null, card.balanceType);
assertEquals("1234567895", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.ITF, card.barcodeType.format());
assertEquals(0, card.starStatus);
assertEquals(1624991439, card.lastUsed);
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.front));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.back));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.icon));
card = DBHelper.getLoyaltyCard(mDatabase, 2);
assertEquals("Air Miles", card.store);
assertEquals("szjsbs\nMiles", card.note);
assertEquals(null, card.validFrom);
assertEquals(null, card.expiry);
assertEquals(new BigDecimal("0"), card.balance);
assertEquals(null, card.balanceType);
assertEquals("7649484", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.EAN_13, card.barcodeType.format());
assertEquals(0, card.starStatus);
assertEquals(1625690099, card.lastUsed);
assertTrue(BitmapFactory.decodeStream(getClass().getResourceAsStream("stocard-front.jpg")).sameAs(Utils.retrieveCardImage(activity.getApplicationContext(), 2, ImageLocationType.front)));
assertTrue(BitmapFactory.decodeStream(getClass().getResourceAsStream("stocard-back.jpg")).sameAs(Utils.retrieveCardImage(activity.getApplicationContext(), 2, ImageLocationType.back)));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 2, ImageLocationType.icon));
card = DBHelper.getLoyaltyCard(mDatabase, 3);
assertEquals("GAMMA", card.store);
assertEquals("", card.note);
assertEquals(null, card.validFrom);
assertEquals(null, card.expiry);
assertEquals(new BigDecimal("0"), card.balance);
assertEquals(null, card.balanceType);
assertEquals("55555", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.EAN_13, card.barcodeType.format());
assertEquals(0, card.starStatus);
assertEquals(1625600883, card.lastUsed);
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 3, ImageLocationType.front));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 3, ImageLocationType.back));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 3, ImageLocationType.icon));
card = DBHelper.getLoyaltyCard(mDatabase, 4);
assertEquals("", card.store);
assertEquals("", card.note);
assertEquals(null, card.validFrom);
assertEquals(null, card.expiry);
assertEquals(new BigDecimal("0"), card.balance);
assertEquals(null, card.balanceType);
assertEquals("(01)09010374000019(21)02097564604859211217(10)01231287693", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.RSS_EXPANDED, card.barcodeType.format());
assertEquals(0, card.starStatus);
assertEquals(1625600120, card.lastUsed);
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 4, ImageLocationType.front));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 4, ImageLocationType.back));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 4, ImageLocationType.icon));
TestHelpers.getEmptyDb(activity);
}
@Test
public void importVoucherVault() {
InputStream inputStream = getClass().getResourceAsStream("vouchervault.json");