From 0cc409d087b55155c6e1e0b96a6ddb3ef2e79f2c Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Tue, 29 Jun 2021 20:02:49 +0200 Subject: [PATCH] Add Fidme test --- app/build.gradle | 6 +++ .../importexport/FidmeImporter.java | 12 ++--- .../protect/card_locker/ImportExportTest.java | 50 ++++++++++++++++++ ...dme-export-request-2021-06-29-17-28-20.zip | Bin 0 -> 1368 bytes 4 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 app/src/test/res/protect/card_locker/fidme-export-request-2021-06-29-17-28-20.zip 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 0000000000000000000000000000000000000000..0308e747412a26c9c5e7cd22ddd46618133c59f9 GIT binary patch literal 1368 zcmWIWW@Zs#U|`^2=<2>3v{Gr>y)Z@whDH_!1_7XGX>n>%d_hruT4qkFUUG3+>7_nVY%PnmqhW)_6JTFUUCgGBt?t zR?*drIg`1Bwy3W+eCjp5=Z?^nkJ{ofvtI^WyR^XhZiZ4pm~ruqqH8lYPPOV>_QGyO z^zl!7D+9!IH5UjwEPDK0Q2utXv#33zcL1M#FT+~Luc>RJ4ES0eY&wvAOvHruowTgc z=^edi7z->Gxv!gdH(YkrwR3!LiVA%**G1oF{~aZ!{NnYu+$+2sb*#cm@+;ZDZ7aV~ zTx;K9vw-`+#I-Cjw_G1={C4Jm>wiUyHQtJaon$P zO?dsR=uO*;_i-n`w|XnxdXb~%%Z2tgMpgMXQZKjvS+!LB`>vOd@2>yJ8h{c9+wAkc z&IgA5eIN$KOiq4fVopgVC>qj>5_5||@etd0maEx7pyj=t>x)=}+4764H?=BlX;=Ej zcxjieSg*k4@A)AbTh6>OX#bla#kEcT#N(s>{`u}}cJ*0>vF5yRoOfsLha0~wEv$v+ zy$zc*%dLC2tP`8fSr@KJg~42*X>GB$nWYRCEMSn;@4wXHxxg}E_Yrwj@3=K0?21=E zMe&+{YP@=7zsx)J@AGb+jQa2WD(Kn8_#lmii=S*OzdNgj0o6mzyXJ`K13jV(#6rj( z%FoOz0egqrOV{(v8Bg6!d>W_x^}Wt)E%Wj8^bIV~*;wXv#`BD~-&Ve}r*#59c=~vq zeaM7n{EpfEo{B(Y<Q{G@7@aeK$jzM#>$p!t}MnIDdfS4PIOEQzQQz1d|xnv_B zG&F)fc%Sjz%BP|0b