diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v4Test.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v4Test.java index beb451b946b9070f22b396922992edbc330a4139..bd0b3a64fa42906942fb1ece72d06cca846729de 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v4Test.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v4Test.java @@ -20,7 +20,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; -import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.*; public class DatabaseParser_v4Test @@ -223,4 +223,15 @@ public class DatabaseParser_v4Test e.printStackTrace(); } } + + @Test + public void test_convertToInternalShouldFail() throws URISyntaxException, IOException + { + String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v4Test.json").toURI()))); + DatabaseParser_v4 parser = new DatabaseParser_v4(json); + BackupDatabase_v4 database = parser.parseDatabaseFromJSON(); + + assertThatThrownBy(database::convertToInternal) + .isInstanceOf(UnsupportedOperationException.class); + } } \ No newline at end of file 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 7393f04cc7e8aab03770ca51b71588503345e980..962e4f50f94768a3a673495d362b1d4fad10f585 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 @@ -4,11 +4,9 @@ import de.deadlocker8.budgetmaster.accounts.AccountState; import de.deadlocker8.budgetmaster.accounts.AccountType; import de.deadlocker8.budgetmaster.categories.CategoryType; import de.deadlocker8.budgetmaster.charts.ChartType; +import de.deadlocker8.budgetmaster.database.DatabaseParser_v4; import de.deadlocker8.budgetmaster.database.DatabaseParser_v5; -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.v4.*; import de.deadlocker8.budgetmaster.database.model.v5.*; import de.deadlocker8.budgetmaster.images.ImageFileExtension; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndAfterXTimes; @@ -27,6 +25,7 @@ import java.util.List; import java.util.Locale; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; public class DatabaseParser_v5Test @@ -250,4 +249,15 @@ public class DatabaseParser_v5Test e.printStackTrace(); } } + @Test + public void test_convertToInternalShouldFail() throws URISyntaxException, IOException + { + String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v5Test.json").toURI()))); + DatabaseParser_v5 parser = new DatabaseParser_v5(json); + BackupDatabase_v5 database = parser.parseDatabaseFromJSON(); + + assertThatThrownBy(database::convertToInternal) + .isInstanceOf(UnsupportedOperationException.class); + } + } \ No newline at end of file diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v6Test.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v6Test.java new file mode 100644 index 0000000000000000000000000000000000000000..22cfef0df591dc2b13da0cb6787b21d7a70e5e47 --- /dev/null +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v6Test.java @@ -0,0 +1,200 @@ +package de.deadlocker8.budgetmaster.unit.database; + +import de.deadlocker8.budgetmaster.accounts.AccountState; +import de.deadlocker8.budgetmaster.accounts.AccountType; +import de.deadlocker8.budgetmaster.categories.CategoryType; +import de.deadlocker8.budgetmaster.charts.ChartType; +import de.deadlocker8.budgetmaster.database.DatabaseParser_v6; +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.BackupCategory_v5; +import de.deadlocker8.budgetmaster.database.model.v5.BackupChart_v5; +import de.deadlocker8.budgetmaster.database.model.v6.BackupAccount_v6; +import de.deadlocker8.budgetmaster.database.model.v6.BackupDatabase_v6; +import de.deadlocker8.budgetmaster.database.model.v6.BackupTemplate_v6; +import de.deadlocker8.budgetmaster.database.model.v6.BackupTransaction_v6; +import de.deadlocker8.budgetmaster.images.ImageFileExtension; +import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndAfterXTimes; +import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierDays; +import de.thecodelabs.utils.util.Localization; +import de.thecodelabs.utils.util.Localization.LocalizationDelegate; +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class DatabaseParser_v6Test +{ + @Before + public void before() + { + Localization.setDelegate(new LocalizationDelegate() + { + @Override + public Locale getLocale() + { + return Locale.ENGLISH; + } + + @Override + public String getBaseResource() + { + return "languages/base"; + } + }); + Localization.load(); + } + + @Test + public void test_Charts() throws URISyntaxException, IOException + { + String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v6Test.json").toURI()))); + DatabaseParser_v6 parser = new DatabaseParser_v6(json); + BackupDatabase_v6 database = parser.parseDatabaseFromJSON(); + + 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); + } + + @Test + public void test_Categories() throws URISyntaxException, IOException + { + String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v6Test.json").toURI()))); + DatabaseParser_v6 parser = new DatabaseParser_v6(json); + BackupDatabase_v6 database = parser.parseDatabaseFromJSON(); + + final BackupCategory_v5 category = new BackupCategory_v5(3, "0815", "#ffcc00", CategoryType.CUSTOM, "fas fa-icons"); + + assertThat(database.getCategories()).hasSize(3) + .contains(category); + } + + @Test + public void test_Accounts() throws URISyntaxException, IOException + { + String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v6Test.json").toURI()))); + DatabaseParser_v6 parser = new DatabaseParser_v6(json); + BackupDatabase_v6 database = parser.parseDatabaseFromJSON(); + + final BackupAccount_v6 account = new BackupAccount_v6(3, "Second Account", AccountState.FULL_ACCESS, AccountType.CUSTOM, 1); + + assertThat(database.getAccounts()).hasSize(3) + .contains(account); + assertThat(database.getAccounts().get(2).getIconID()) + .isOne(); + } + + @Test + public void test_Images() throws URISyntaxException, IOException + { + String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v6Test.json").toURI()))); + DatabaseParser_v6 parser = new DatabaseParser_v6(json); + BackupDatabase_v6 database = parser.parseDatabaseFromJSON(); + + assertThat(database.getImages()).hasSize(1); + assertThat(database.getImages().get(0)).hasFieldOrPropertyWithValue("fileExtension", ImageFileExtension.PNG); + assertThat(database.getImages().get(0).getImage()) + .isNotNull() + .hasSizeGreaterThan(1); + } + + @Test + public void test_Templates() throws URISyntaxException, IOException + { + String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v6Test.json").toURI()))); + DatabaseParser_v6 parser = new DatabaseParser_v6(json); + BackupDatabase_v6 database = parser.parseDatabaseFromJSON(); + + BackupTemplate_v6 template = new BackupTemplate_v6(); + template.setTemplateName("Template with icon"); + template.setExpenditure(true); + template.setIconID(1); + template.setTags(List.of()); + + assertThat(database.getTemplates()).hasSize(4) + .contains(template); + assertThat(database.getTemplates().get(3).getIconID()) + .isOne(); + } + + @Test + public void test_Transactions() throws URISyntaxException, IOException + { + String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v6Test.json").toURI()))); + DatabaseParser_v6 parser = new DatabaseParser_v6(json); + BackupDatabase_v6 database = parser.parseDatabaseFromJSON(); + + BackupTransaction_v6 normalTransaction_1 = new BackupTransaction_v6(); + normalTransaction_1.setAmount(35000); + normalTransaction_1.setDate("2018-03-13"); + normalTransaction_1.setCategoryID(1); + normalTransaction_1.setName("Income"); + normalTransaction_1.setDescription("Lorem Ipsum"); + normalTransaction_1.setTags(new ArrayList<>()); + normalTransaction_1.setAccountID(2); + normalTransaction_1.setExpenditure(false); + + BackupTransaction_v6 normalTransaction_2 = new BackupTransaction_v6(); + normalTransaction_2.setAmount(-2000); + normalTransaction_2.setDate("2018-06-15"); + normalTransaction_2.setName("Simple"); + normalTransaction_2.setDescription(""); + normalTransaction_2.setAccountID(3); + normalTransaction_2.setCategoryID(3); + normalTransaction_2.setExpenditure(true); + + List<BackupTag_v4> tags = new ArrayList<>(); + BackupTag_v4 tag = new BackupTag_v4("0815"); + tags.add(tag); + normalTransaction_2.setTags(tags); + + BackupTransaction_v6 repeatingTransaction_1 = new BackupTransaction_v6(); + repeatingTransaction_1.setAmount(-12300); + String repeatingTransaction_1Date = "2018-03-13"; + repeatingTransaction_1.setDate(repeatingTransaction_1Date); + repeatingTransaction_1.setCategoryID(1); + repeatingTransaction_1.setName("Test"); + repeatingTransaction_1.setDescription(""); + repeatingTransaction_1.setAccountID(2); + BackupRepeatingOption_v4 repeatingOption_1 = new BackupRepeatingOption_v4(); + repeatingOption_1.setModifier(new BackupRepeatingModifier_v4(10, new RepeatingModifierDays(10).getLocalizationKey())); + repeatingOption_1.setStartDate(repeatingTransaction_1Date); + 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.setExpenditure(true); + + BackupTransaction_v6 transferTransaction = new BackupTransaction_v6(); + transferTransaction.setAmount(-250); + transferTransaction.setDate("2018-06-15"); + transferTransaction.setName("Transfer"); + transferTransaction.setDescription(""); + transferTransaction.setAccountID(3); + transferTransaction.setTransferAccountID(2); + transferTransaction.setCategoryID(3); + transferTransaction.setTags(new ArrayList<>()); + transferTransaction.setExpenditure(true); + + assertThat(database.getTransactions()).hasSize(4) + .contains(normalTransaction_1, + normalTransaction_2, + repeatingTransaction_1, + transferTransaction); + } +} \ No newline at end of file diff --git a/src/test/resources/DatabaseParser_v6Test.json b/src/test/resources/DatabaseParser_v6Test.json index 50a9061bbd72ae643d78b52d5f2e4c0b72440ff1..fe9c3bae8ddc33de4e583074b57509147a4da2d1 100644 --- a/src/test/resources/DatabaseParser_v6Test.json +++ b/src/test/resources/DatabaseParser_v6Test.json @@ -49,18 +49,8 @@ "amount": 35000, "isExpenditure": false, "date": "2018-03-13", - "account": { - "ID": 2, - "name": "Default", - "accountState": "FULL_ACCESS", - "type": "CUSTOM" - }, - "category": { - "ID": 1, - "name": "Keine Kategorie", - "color": "#FFFFFF", - "type": "NONE" - }, + "accountID": 2, + "categoryID": 1, "name": "Income", "description": "Lorem Ipsum", "tags": [] @@ -70,20 +60,8 @@ "amount": -2000, "isExpenditure": true, "date": "2018-06-15", - "account": { - "ID": 3, - "name": "Second Account", - "accountState": "FULL_ACCESS", - "type": "CUSTOM", - "iconID": 1 - }, - "category": { - "ID": 3, - "name": "0815", - "color": "#ffcc00", - "type": "CUSTOM", - "icon": "fas fa-icons" - }, + "accountID": 3, + "categoryID": 3, "name": "Simple", "description": "", "tags": [ @@ -98,18 +76,8 @@ "amount": -12300, "isExpenditure": true, "date": "2018-03-13", - "account": { - "ID": 2, - "name": "Default", - "accountState": "FULL_ACCESS", - "type": "CUSTOM" - }, - "category": { - "ID": 1, - "name": "Keine Kategorie", - "color": "#FFFFFF", - "type": "NONE" - }, + "accountID": 2, + "categoryID": 1, "name": "Test", "description": "", "tags": [], @@ -133,47 +101,20 @@ "amount": -250, "isExpenditure": true, "date": "2018-06-15", - "account": { - "ID": 3, - "name": "Second Account", - "accountState": "FULL_ACCESS", - "type": "CUSTOM", - "iconID": 1 - }, - "category": { - "ID": 3, - "name": "0815", - "color": "#ffcc00", - "type": "CUSTOM", - "icon": "fas fa-icons" - }, + "accountID": 3, + "categoryID": 3, "name": "Transfer", "description": "", "tags": [], - "transferAccount": { - "ID": 2, - "name": "Default", - "accountState": "FULL_ACCESS", - "type": "CUSTOM" - } + "transferAccountID": 2 } ], "templates": [ { "ID": 5, "amount": 1500, - "account": { - "ID": 2, - "name": "Default", - "accountState": "FULL_ACCESS", - "type": "CUSTOM" - }, - "category": { - "ID": 1, - "name": "Keine Kategorie", - "color": "#FFFFFF", - "type": "NONE" - }, + "accountID": 2, + "categoryID": 1, "name": "Income", "templateName": "My Simple Template", "description": "Lorem Ipsum", @@ -191,20 +132,8 @@ { "ID": 7, "amount": -35000, - "account": { - "ID": 3, - "name": "Second Account", - "accountState": "FULL_ACCESS", - "type": "CUSTOM", - "iconID": 1 - }, - "category": { - "ID": 3, - "name": "0815", - "color": "#ffcc00", - "type": "CUSTOM", - "icon": "fas fa-icons" - }, + "accountID": 3, + "categoryID": 3, "name": "Income", "templateName": "My Transfer Template", "description": "Lorem Ipsum", @@ -213,16 +142,12 @@ "name": "0815" } ], - "transferAccount": { - "ID": 2, - "name": "Default", - "accountState": "FULL_ACCESS", - "type": "CUSTOM" - } + "transferAccountID": 2 }, { "ID": 8, "templateName": "Template with icon", + "isExpenditure": true, "tags": [], "iconID": 1 }