diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java index 784bd814ace6fe6f31d2916a1a7bd536bfa3a39c..67209c484ada1ae4005deaa4b3e18139e76c3184 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java @@ -17,7 +17,7 @@ public class DatabaseParser final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); private static final int MINIMUM_VERSION = 4; - private static final int LATEST_VERSION = 6; + public static final int LATEST_VERSION = 6; private final String jsonString; diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseExportTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseExportTest.java index d861b00206010f8f96215ac030dd448e54f0886b..3e0648db995343192961f9b61bec836d66f14c23 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseExportTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseExportTest.java @@ -150,7 +150,7 @@ public class DatabaseExportTest JsonObject root = JsonParser.parseString(fileContent).getAsJsonObject(); assertThat(root.get("TYPE").getAsString()).isEqualTo(JSONIdentifier.BUDGETMASTER_DATABASE.toString()); - assertThat(root.get("VERSION").getAsInt()).isEqualTo(5); + assertThat(root.get("VERSION").getAsInt()).isEqualTo(DatabaseParser.LATEST_VERSION); } @Test @@ -158,7 +158,9 @@ public class DatabaseExportTest { // categories Category categoryNone = new Category("NONE", "#000000", CategoryType.NONE); + categoryNone.setID(1); Category categoryCustom = new Category("my First Category", "#FF0000", CategoryType.CUSTOM); + categoryCustom.setID(2); Mockito.when(categoryService.getAllEntitiesAsc()).thenReturn(List.of(categoryNone, categoryCustom)); // accounts diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v5Test.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v5Test.java index 1b591fe95c0b6c6de5034feddfe3ae9d99894b67..18db73ff43e48096629cc9213d78965dc6b20205 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v5Test.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v5Test.java @@ -1,25 +1,20 @@ package de.deadlocker8.budgetmaster.unit.database; -import de.deadlocker8.budgetmaster.accounts.Account; +import de.deadlocker8.budgetmaster.accounts.AccountState; import de.deadlocker8.budgetmaster.accounts.AccountType; -import de.deadlocker8.budgetmaster.categories.Category; import de.deadlocker8.budgetmaster.categories.CategoryType; -import de.deadlocker8.budgetmaster.charts.Chart; import de.deadlocker8.budgetmaster.charts.ChartType; -import de.deadlocker8.budgetmaster.database.InternalDatabase; import de.deadlocker8.budgetmaster.database.DatabaseParser_v5; -import de.deadlocker8.budgetmaster.images.Image; +import de.deadlocker8.budgetmaster.database.model.v4.BackupRepeatingEndOption_v4; +import de.deadlocker8.budgetmaster.database.model.v4.BackupRepeatingModifier_v4; +import de.deadlocker8.budgetmaster.database.model.v4.BackupRepeatingOption_v4; +import de.deadlocker8.budgetmaster.database.model.v4.BackupTag_v4; +import de.deadlocker8.budgetmaster.database.model.v5.*; import de.deadlocker8.budgetmaster.images.ImageFileExtension; -import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndAfterXTimes; import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierDays; -import de.deadlocker8.budgetmaster.tags.Tag; -import de.deadlocker8.budgetmaster.templates.Template; -import de.deadlocker8.budgetmaster.transactions.Transaction; import de.thecodelabs.utils.util.Localization; import de.thecodelabs.utils.util.Localization.LocalizationDelegate; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; import org.junit.Before; import org.junit.Test; @@ -63,10 +58,9 @@ public class DatabaseParser_v5Test { String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v5Test.json").toURI()))); DatabaseParser_v5 importer = new DatabaseParser_v5(json); - InternalDatabase database = importer.parseDatabaseFromJSON().convertToInternal(); + BackupDatabase_v5 database = importer.parseDatabaseFromJSON(); - final Chart chart = new Chart("The best chart", "/* This list will be dynamically filled with all the transactions between\r\n* the start and and date you select on the \"Show Chart\" page\r\n* and filtered according to your specified filter.\r\n* An example entry for this list and tutorial about how to create custom charts ca be found in the BudgetMaster wiki:\r\n* https://github.com/deadlocker8/BudgetMaster/wiki/How-to-create-custom-charts\r\n*/\r\nvar transactionData \u003d [];\r\n\r\n// Prepare your chart settings here (mandatory)\r\nvar plotlyData \u003d [{\r\n x: [],\r\n y: [],\r\n type: \u0027bar\u0027\r\n}];\r\n\r\n// Add your Plotly layout settings here (optional)\r\nvar plotlyLayout \u003d {};\r\n\r\n// Add your Plotly configuration settings here (optional)\r\nvar plotlyConfig \u003d {\r\n showSendToCloud: false,\r\n displaylogo: false,\r\n showLink: false,\r\n responsive: true\r\n};\r\n\r\n// Don\u0027t touch this line\r\nPlotly.newPlot(\"containerID\", plotlyData, plotlyLayout, plotlyConfig);\r\n", ChartType.CUSTOM, 7); - chart.setID(9); + final BackupChart_v5 chart = new BackupChart_v5(9, "The best chart", "/* This list will be dynamically filled with all the transactions between\r\n* the start and and date you select on the \"Show Chart\" page\r\n* and filtered according to your specified filter.\r\n* An example entry for this list and tutorial about how to create custom charts ca be found in the BudgetMaster wiki:\r\n* https://github.com/deadlocker8/BudgetMaster/wiki/How-to-create-custom-charts\r\n*/\r\nvar transactionData \u003d [];\r\n\r\n// Prepare your chart settings here (mandatory)\r\nvar plotlyData \u003d [{\r\n x: [],\r\n y: [],\r\n type: \u0027bar\u0027\r\n}];\r\n\r\n// Add your Plotly layout settings here (optional)\r\nvar plotlyLayout \u003d {};\r\n\r\n// Add your Plotly configuration settings here (optional)\r\nvar plotlyConfig \u003d {\r\n showSendToCloud: false,\r\n displaylogo: false,\r\n showLink: false,\r\n responsive: true\r\n};\r\n\r\n// Don\u0027t touch this line\r\nPlotly.newPlot(\"containerID\", plotlyData, plotlyLayout, plotlyConfig);\r\n", ChartType.CUSTOM, 7); assertThat(database.getCharts()).hasSize(1) .contains(chart); @@ -84,10 +78,9 @@ public class DatabaseParser_v5Test { String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v5Test.json").toURI()))); DatabaseParser_v5 importer = new DatabaseParser_v5(json); - InternalDatabase database = importer.parseDatabaseFromJSON().convertToInternal(); + BackupDatabase_v5 database = importer.parseDatabaseFromJSON(); - final Category category = new Category("0815", "#ffcc00", CategoryType.CUSTOM, "fas fa-icons"); - category.setID(3); + final BackupCategory_v5 category = new BackupCategory_v5(3, "0815", "#ffcc00", CategoryType.CUSTOM, "fas fa-icons"); assertThat(database.getCategories()).hasSize(3) .contains(category); @@ -105,12 +98,10 @@ public class DatabaseParser_v5Test { String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v5Test.json").toURI()))); DatabaseParser_v5 importer = new DatabaseParser_v5(json); - InternalDatabase database = importer.parseDatabaseFromJSON().convertToInternal(); + BackupDatabase_v5 database = importer.parseDatabaseFromJSON(); - final Image accountImage = new Image(new Byte[0], "awesomeIcon.png", ImageFileExtension.PNG); - accountImage.setID(1); - final Account account = new Account("Second Account", AccountType.CUSTOM, accountImage); - account.setID(3); + final BackupImage_v5 accountImage = new BackupImage_v5(1, new Byte[0], "awesomeIcon.png", ImageFileExtension.PNG); + final BackupAccount_v5 account = new BackupAccount_v5(3, "Second Account", AccountState.FULL_ACCESS, AccountType.CUSTOM, accountImage); assertThat(database.getAccounts()).hasSize(3) .contains(account); @@ -131,10 +122,7 @@ public class DatabaseParser_v5Test { String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v5Test.json").toURI()))); DatabaseParser_v5 importer = new DatabaseParser_v5(json); - InternalDatabase database = importer.parseDatabaseFromJSON().convertToInternal(); - - final Image image = new Image(new Byte[0], "awesomeIcon.png", ImageFileExtension.PNG); - image.setID(1); + BackupDatabase_v5 database = importer.parseDatabaseFromJSON(); assertThat(database.getImages()).hasSize(1); assertThat(database.getImages().get(0)).hasFieldOrPropertyWithValue("fileExtension", ImageFileExtension.PNG); @@ -155,13 +143,13 @@ public class DatabaseParser_v5Test { String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v5Test.json").toURI()))); DatabaseParser_v5 importer = new DatabaseParser_v5(json); - InternalDatabase database = importer.parseDatabaseFromJSON().convertToInternal(); + BackupDatabase_v5 database = importer.parseDatabaseFromJSON(); + + BackupImage_v5 templateImage = new BackupImage_v5(1, new Byte[0], "awesomeIcon.png", ImageFileExtension.PNG); - final Image templateImage = new Image(new Byte[0], "awesomeIcon.png", ImageFileExtension.PNG); - templateImage.setID(1); - final Template template = new Template(); + BackupTemplate_v5 template = new BackupTemplate_v5(); template.setTemplateName("Template with icon"); - template.setIsExpenditure(true); + template.setExpenditure(true); template.setIcon(templateImage); template.setTags(List.of()); @@ -184,82 +172,71 @@ public class DatabaseParser_v5Test { String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v5Test.json").toURI()))); DatabaseParser_v5 importer = new DatabaseParser_v5(json); - InternalDatabase database = importer.parseDatabaseFromJSON().convertToInternal(); + BackupDatabase_v5 database = importer.parseDatabaseFromJSON(); - Account account1 = new Account("Default", AccountType.CUSTOM); - account1.setID(2); + BackupAccount_v5 account1 = new BackupAccount_v5(2, "Default", AccountState.FULL_ACCESS, AccountType.CUSTOM, null); - Image image = new Image(new Byte[0], "awesomeIcon.png", ImageFileExtension.PNG); - image.setID(1); + BackupImage_v5 image = new BackupImage_v5(1, new Byte[0], "awesomeIcon.png", ImageFileExtension.PNG); - Account account2 = new Account("Second Account", AccountType.CUSTOM); - account2.setIcon(image); - account2.setID(3); + BackupAccount_v5 account2 = new BackupAccount_v5(3, "Second Account", AccountState.FULL_ACCESS, AccountType.CUSTOM, image); - Category categoryNone = new Category("Keine Kategorie", "#FFFFFF", CategoryType.NONE); - categoryNone.setID(1); + BackupCategory_v5 categoryNone = new BackupCategory_v5(1, "Keine Kategorie", "#FFFFFF", CategoryType.NONE, null); - Category category3 = new Category("0815", "#ffcc00", CategoryType.CUSTOM); - category3.setIcon("fas fa-icons"); - category3.setID(3); + BackupCategory_v5 category3 = new BackupCategory_v5(3, "0815", "#ffcc00", CategoryType.CUSTOM, "fas fa-icons"); - Transaction normalTransaction_1 = new Transaction(); + BackupTransaction_v5 normalTransaction_1 = new BackupTransaction_v5(); normalTransaction_1.setAmount(35000); - DateTime normalTransactionDate = DateTime.parse("2018-03-13", DateTimeFormat.forPattern("yyyy-MM-dd")); - normalTransactionDate = normalTransactionDate.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0); - normalTransaction_1.setDate(normalTransactionDate); + normalTransaction_1.setDate("2018-03-13"); normalTransaction_1.setCategory(categoryNone); normalTransaction_1.setName("Income"); normalTransaction_1.setDescription("Lorem Ipsum"); normalTransaction_1.setTags(new ArrayList<>()); normalTransaction_1.setAccount(account1); - normalTransaction_1.setIsExpenditure(false); + normalTransaction_1.setExpenditure(false); - Transaction normalTransaction_2 = new Transaction(); + BackupTransaction_v5 normalTransaction_2 = new BackupTransaction_v5(); normalTransaction_2.setAmount(-2000); - DateTime normalTransaction_2Date = DateTime.parse("2018-06-15", DateTimeFormat.forPattern("yyyy-MM-dd")); - normalTransaction_2Date = normalTransaction_2Date.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0); - normalTransaction_2.setDate(normalTransaction_2Date); + normalTransaction_2.setDate("2018-06-15"); normalTransaction_2.setName("Simple"); normalTransaction_2.setDescription(""); normalTransaction_2.setAccount(account2); normalTransaction_2.setCategory(category3); - normalTransaction_2.setIsExpenditure(true); + normalTransaction_2.setExpenditure(true); - List<Tag> tags = new ArrayList<>(); - Tag tag = new Tag("0815"); + List<BackupTag_v4> tags = new ArrayList<>(); + BackupTag_v4 tag = new BackupTag_v4("0815"); tags.add(tag); normalTransaction_2.setTags(tags); - Transaction repeatingTransaction_1 = new Transaction(); + BackupTransaction_v5 repeatingTransaction_1 = new BackupTransaction_v5(); repeatingTransaction_1.setAmount(-12300); - DateTime repeatingTransaction_1Date = DateTime.parse("2018-03-13", DateTimeFormat.forPattern("yyyy-MM-dd")); - repeatingTransaction_1Date = repeatingTransaction_1Date.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0); + String repeatingTransaction_1Date = "2018-03-13"; repeatingTransaction_1.setDate(repeatingTransaction_1Date); repeatingTransaction_1.setCategory(categoryNone); repeatingTransaction_1.setName("Test"); repeatingTransaction_1.setDescription(""); repeatingTransaction_1.setAccount(account1); - RepeatingOption repeatingOption_1 = new RepeatingOption(); - repeatingOption_1.setModifier(new RepeatingModifierDays(10)); + BackupRepeatingOption_v4 repeatingOption_1 = new BackupRepeatingOption_v4(); + repeatingOption_1.setModifier(new BackupRepeatingModifier_v4(10, new RepeatingModifierDays(10).getLocalizationKey())); repeatingOption_1.setStartDate(repeatingTransaction_1Date); - repeatingOption_1.setEndOption(new RepeatingEndAfterXTimes(2)); + BackupRepeatingEndOption_v4 endOption = new BackupRepeatingEndOption_v4(); + endOption.setTimes(2); + endOption.setLocalizationKey(new RepeatingEndAfterXTimes(2).getLocalizationKey()); + repeatingOption_1.setEndOption(endOption); repeatingTransaction_1.setRepeatingOption(repeatingOption_1); repeatingTransaction_1.setTags(new ArrayList<>()); - repeatingTransaction_1.setIsExpenditure(true); + repeatingTransaction_1.setExpenditure(true); - Transaction transferTransaction = new Transaction(); + BackupTransaction_v5 transferTransaction = new BackupTransaction_v5(); transferTransaction.setAmount(-250); - DateTime transferTransactionDate = DateTime.parse("2018-06-15", DateTimeFormat.forPattern("yyyy-MM-dd")); - transferTransactionDate = transferTransactionDate.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0); - transferTransaction.setDate(transferTransactionDate); + transferTransaction.setDate("2018-06-15"); transferTransaction.setName("Transfer"); transferTransaction.setDescription(""); transferTransaction.setAccount(account2); transferTransaction.setTransferAccount(account1); transferTransaction.setCategory(category3); transferTransaction.setTags(new ArrayList<>()); - transferTransaction.setIsExpenditure(true); + transferTransaction.setExpenditure(true); assertThat(database.getTransactions()).hasSize(4) .contains(normalTransaction_1, diff --git a/src/test/resources/DatabaseParser_v5Test.json b/src/test/resources/DatabaseParser_v5Test.json index 0fa0d2429c965dd9a5ca4871be8f3625845847cc..c75ebdf6bdd29508967c7e18ca4d8390231171ba 100644 --- a/src/test/resources/DatabaseParser_v5Test.json +++ b/src/test/resources/DatabaseParser_v5Test.json @@ -12710,6 +12710,7 @@ "ID": 8, "templateName": "Template with icon", "tags": [], + "isExpenditure": true, "icon": { "ID": 1, "image": [