diff --git a/app/build.gradle b/app/build.gradle index 15cab77d5..b6b1fc1a1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -47,6 +47,12 @@ android { "MissingTranslation", "MissingPrefix" } + sourceSets { + test { + resources.srcDirs += ['src/test/res'] + } + } + // Starting with Android Studio 3 Robolectric is unable to find resources. // The following allows it to find the resources. testOptions { diff --git a/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java b/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java index 8ff7a53ba..943f44d49 100644 --- a/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java @@ -103,18 +103,18 @@ public class FidmeImporter implements Importer } // There seems to be no note field in the CSV? So let's combine other fields instead... - String program = CSVHelpers.extractString("Program", record, ""); - String addedAt = CSVHelpers.extractString("Added At", record, ""); - String firstName = CSVHelpers.extractString("Firstname", record, ""); - String lastName = CSVHelpers.extractString("Lastname", record, ""); + String program = CSVHelpers.extractString("Program", record, "").trim(); + String addedAt = CSVHelpers.extractString("Added At", record, "").trim(); + String firstName = CSVHelpers.extractString("Firstname", record, "").trim(); + String lastName = CSVHelpers.extractString("Lastname", record, "").trim(); - String combinedName = String.format("%s %s", firstName, lastName); + String combinedName = String.format("%s %s", firstName, lastName).trim(); StringBuilder noteBuilder = new StringBuilder(); if (!program.isEmpty()) noteBuilder.append(program).append('\n'); if (!addedAt.isEmpty()) noteBuilder.append(addedAt).append('\n'); if (!combinedName.isEmpty()) noteBuilder.append(combinedName).append('\n'); - String note = noteBuilder.toString(); + String note = noteBuilder.toString().trim(); // The ID is called reference String cardId = CSVHelpers.extractString("Reference", record, ""); diff --git a/app/src/test/java/protect/card_locker/ImportExportTest.java b/app/src/test/java/protect/card_locker/ImportExportTest.java index 86c2d0534..9c4f35a41 100644 --- a/app/src/test/java/protect/card_locker/ImportExportTest.java +++ b/app/src/test/java/protect/card_locker/ImportExportTest.java @@ -1,6 +1,7 @@ package protect.card_locker; import android.app.Activity; +import android.content.res.Resources; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; @@ -32,6 +33,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStreamWriter; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; @@ -1075,6 +1077,54 @@ public class ImportExportTest TestHelpers.getEmptyDb(activity); } + @Test + public void importFidme() { + InputStream inputStream = getClass().getResourceAsStream("fidme-export-request-2021-06-29-17-28-20.zip"); + + // Import the Fidme data + boolean result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Fidme); + assertTrue(result); + assertEquals(3, db.getLoyaltyCardCount()); + + LoyaltyCard card = db.getLoyaltyCard(1); + + assertEquals("Hema", card.store); + assertEquals("2021-03-24 18:35:08 UTC", card.note); + assertEquals(null, card.expiry); + assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.balanceType); + assertEquals("82825292629272726", card.cardId); + assertEquals(null, card.barcodeId); + assertEquals(null, card.barcodeType); + assertEquals(0, card.starStatus); + + card = db.getLoyaltyCard(2); + + assertEquals("test", card.store); + assertEquals("Test\n2021-03-24 18:34:19 UTC", card.note); + assertEquals(null, card.expiry); + assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.balanceType); + assertEquals("123456", card.cardId); + assertEquals(null, card.barcodeId); + assertEquals(null, card.barcodeType); + assertEquals(0, card.starStatus); + + card = db.getLoyaltyCard(3); + + assertEquals("Albert Heijn", card.store); + assertEquals("Bonus Kaart\n2021-03-24 16:47:47 UTC\nFirst Last", card.note); + assertEquals(null, card.expiry); + assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.balanceType); + assertEquals("123435363634", card.cardId); + assertEquals(null, card.barcodeId); + assertEquals(null, card.barcodeType); + assertEquals(0, card.starStatus); + + TestHelpers.getEmptyDb(activity); + } + @Test public void importVoucherVault() throws IOException, FormatException, JSONException, ParseException { String jsonText = "[\n" + diff --git a/app/src/test/res/protect/card_locker/fidme-export-request-2021-06-29-17-28-20.zip b/app/src/test/res/protect/card_locker/fidme-export-request-2021-06-29-17-28-20.zip new file mode 100644 index 000000000..0308e7474 Binary files /dev/null and b/app/src/test/res/protect/card_locker/fidme-export-request-2021-06-29-17-28-20.zip differ