From 17af04c4caef1359008020140a7b14da762480f9 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Wed, 27 Sep 2017 18:25:29 +0200
Subject: [PATCH] Fixed #96 -  added unit tests for DatabaseTagHandler, fixed
 existing unit tests

---
 .../budgetmaster/tests/resources/export.json  |   2 +-
 .../budgetmaster/tests/resources/import.json  |   2 +-
 .../server/database/DatabaseHandlerTest.java  |   2 +-
 .../database/DatabaseImportExportTest.java    |  13 +-
 .../database/DatabaseTagHandlerTest.java      | 118 ++++++++++++++++++
 5 files changed, 128 insertions(+), 9 deletions(-)
 create mode 100644 tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseTagHandlerTest.java

diff --git a/tests/de/deadlocker8/budgetmaster/tests/resources/export.json b/tests/de/deadlocker8/budgetmaster/tests/resources/export.json
index 209392219..2ec45ae72 100644
--- a/tests/de/deadlocker8/budgetmaster/tests/resources/export.json
+++ b/tests/de/deadlocker8/budgetmaster/tests/resources/export.json
@@ -1 +1 @@
-{"categories":[{"ID":1,"name":"NONE","color":"#FFFFFF"},{"ID":2,"name":"Übertrag","color":"#FFFF00"},{"ID":3,"name":"Keine Kategorie","color":"#FFFFFF"},{"ID":4,"name":"123 Tü+?est Category","color":"#FF9500"}],"normalPayments":[{"ID":1,"amount":23,"date":"2017-06-02","categoryID":0,"name":"Test Normal","description":"Lorem Ipsum"}],"repeatingPayments":[{"repeatInterval":7,"repeatEndDate":"2017-06-30","repeatMonthDay":0,"ID":1,"amount":-10012,"date":"2017-06-01","categoryID":3,"name":"Test Repeating","description":"Lorem Ipsum"}]}
\ No newline at end of file
+{  "TYPE": "BUDGETMASTER_DATABASE",  "VERSION": 2,  "categories": [    {      "ID": 1,      "name": "NONE",      "color": "#FFFFFF"    },    {      "ID": 2,      "name": "Übertrag",      "color": "#FFFF00"    },    {      "ID": 3,      "name": "123 Tü+?est Category",      "color": "#FF9500"    }  ],  "normalPayments": [    {      "ID": 1,      "amount": 23,      "date": "2017-06-02",      "categoryID": 3,      "name": "Test Normal",      "description": "Lorem Ipsum"    }  ],  "repeatingPayments": [    {      "repeatInterval": 7,      "repeatEndDate": "2017-06-30",      "repeatMonthDay": 0,      "ID": 1,      "amount": -10012,      "date": "2017-06-01",      "categoryID": 1,      "name": "Test Repeating",      "description": "Lorem Ipsum"    }  ],  "tags": [    {      "ID": 1,      "name": "Lorem Ipsum"    },    {      "ID": 2,      "name": "123"    }  ],  "tagMatches": [    {      "tagID": 1,      "paymentID": -1,      "repeatingPaymentID": 1    },    {      "tagID": 2,      "paymentID": 1,      "repeatingPaymentID": -1    }  ]}
\ No newline at end of file
diff --git a/tests/de/deadlocker8/budgetmaster/tests/resources/import.json b/tests/de/deadlocker8/budgetmaster/tests/resources/import.json
index 209392219..2ec45ae72 100644
--- a/tests/de/deadlocker8/budgetmaster/tests/resources/import.json
+++ b/tests/de/deadlocker8/budgetmaster/tests/resources/import.json
@@ -1 +1 @@
-{"categories":[{"ID":1,"name":"NONE","color":"#FFFFFF"},{"ID":2,"name":"Übertrag","color":"#FFFF00"},{"ID":3,"name":"Keine Kategorie","color":"#FFFFFF"},{"ID":4,"name":"123 Tü+?est Category","color":"#FF9500"}],"normalPayments":[{"ID":1,"amount":23,"date":"2017-06-02","categoryID":0,"name":"Test Normal","description":"Lorem Ipsum"}],"repeatingPayments":[{"repeatInterval":7,"repeatEndDate":"2017-06-30","repeatMonthDay":0,"ID":1,"amount":-10012,"date":"2017-06-01","categoryID":3,"name":"Test Repeating","description":"Lorem Ipsum"}]}
\ No newline at end of file
+{  "TYPE": "BUDGETMASTER_DATABASE",  "VERSION": 2,  "categories": [    {      "ID": 1,      "name": "NONE",      "color": "#FFFFFF"    },    {      "ID": 2,      "name": "Übertrag",      "color": "#FFFF00"    },    {      "ID": 3,      "name": "123 Tü+?est Category",      "color": "#FF9500"    }  ],  "normalPayments": [    {      "ID": 1,      "amount": 23,      "date": "2017-06-02",      "categoryID": 3,      "name": "Test Normal",      "description": "Lorem Ipsum"    }  ],  "repeatingPayments": [    {      "repeatInterval": 7,      "repeatEndDate": "2017-06-30",      "repeatMonthDay": 0,      "ID": 1,      "amount": -10012,      "date": "2017-06-01",      "categoryID": 1,      "name": "Test Repeating",      "description": "Lorem Ipsum"    }  ],  "tags": [    {      "ID": 1,      "name": "Lorem Ipsum"    },    {      "ID": 2,      "name": "123"    }  ],  "tagMatches": [    {      "tagID": 1,      "paymentID": -1,      "repeatingPaymentID": 1    },    {      "tagID": 2,      "paymentID": 1,      "repeatingPaymentID": -1    }  ]}
\ No newline at end of file
diff --git a/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseHandlerTest.java b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseHandlerTest.java
index 731a1bb75..2bab89363 100644
--- a/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseHandlerTest.java
+++ b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseHandlerTest.java
@@ -39,7 +39,7 @@ public class DatabaseHandlerTest
 			handler = new DatabaseHandler(settings);			
 			databaseHandler = handler;
 			
-			Localization.init("de/deadlocker8/budgetmaster/resources/");
+			Localization.init("de/deadlocker8/budgetmaster/resources/languages/");
 			Localization.loadLanguage(Locale.GERMANY);
 		}
 		catch(IOException | URISyntaxException e)
diff --git a/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseImportExportTest.java b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseImportExportTest.java
index ec87f5a94..e5d92724d 100644
--- a/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseImportExportTest.java
+++ b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseImportExportTest.java
@@ -15,6 +15,7 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
 
 import de.deadlocker8.budgetmaster.logic.category.Category;
 import de.deadlocker8.budgetmaster.logic.payment.NormalPayment;
@@ -48,7 +49,7 @@ public class DatabaseImportExportTest
 			databaseHandler = handler;
 			tagHandler = new DatabaseTagHandler(settings);
 			
-			Localization.init("de/deadlocker8/budgetmaster/resources/");
+			Localization.init("de/deadlocker8/budgetmaster/resources/languages/");
 			Localization.loadLanguage(Locale.GERMANY);
 		}
 		catch(IOException | URISyntaxException e)
@@ -77,7 +78,7 @@ public class DatabaseImportExportTest
 			assertEquals(expectedCategory.getColor(), category.getColor());
 			
 			//test normal payment
-			NormalPayment expectedPayment = new NormalPayment(1, 23, "2017-06-02", 0, "Test Normal", "Lorem Ipsum");			
+			NormalPayment expectedPayment = new NormalPayment(1, 23, "2017-06-02", 3, "Test Normal", "Lorem Ipsum");			
 			NormalPayment payment = databaseHandler.getPayment(1);			
 			assertEquals(expectedPayment.getAmount(), payment.getAmount());		
 			assertEquals(expectedPayment.getDate(), payment.getDate());
@@ -86,7 +87,7 @@ public class DatabaseImportExportTest
 			assertEquals(expectedPayment.getDescription(), payment.getDescription());
 			
 			//test repeating payment
-			RepeatingPayment expectedRepeatingPayment = new RepeatingPayment(1, -10012, "2017-06-01", 3, "Test Repeating", "Lorem Ipsum", 7, "2017-06-30", 0);			
+			RepeatingPayment expectedRepeatingPayment = new RepeatingPayment(1, -10012, "2017-06-01", 1, "Test Repeating", "Lorem Ipsum", 7, "2017-06-30", 0);			
 			RepeatingPayment repeatingPayment = databaseHandler.getRepeatingPayment(1);
 			assertEquals(expectedRepeatingPayment.getAmount(), repeatingPayment.getAmount());
 			assertEquals(expectedRepeatingPayment.getDate(), repeatingPayment.getDate());
@@ -95,7 +96,7 @@ public class DatabaseImportExportTest
 			assertEquals(expectedRepeatingPayment.getDescription(), repeatingPayment.getDescription());
 			assertEquals(expectedRepeatingPayment.getRepeatInterval(), repeatingPayment.getRepeatInterval());
 			assertEquals(expectedRepeatingPayment.getRepeatEndDate(), repeatingPayment.getRepeatEndDate());
-			assertEquals(expectedRepeatingPayment.getRepeatMonthDay(), repeatingPayment.getRepeatMonthDay());			
+			assertEquals(expectedRepeatingPayment.getRepeatMonthDay(), repeatingPayment.getRepeatMonthDay());	
 		}
 		catch(Exception e)
 		{
@@ -120,8 +121,8 @@ public class DatabaseImportExportTest
 			
 			file = Paths.get("tests/de/deadlocker8/budgetmaster/tests/resources/export.json").toFile();
 			DatabaseExporter exporter = new DatabaseExporter(settings);	
-			Gson gson = new Gson();
-			String databaseJSON = gson.toJson(exporter.exportDatabase());
+			Gson gson = new GsonBuilder().setPrettyPrinting().create();
+			String databaseJSON = gson.toJson(exporter.exportDatabase()).replaceAll("\n", "");
 			FileHelper.saveDatabaseJSON(file, databaseJSON);
 			FileHelper.saveDatabaseJSON(new File("C:/Users/ROGO2/Desktop/123.json"), databaseJSON);
 			
diff --git a/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseTagHandlerTest.java b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseTagHandlerTest.java
new file mode 100644
index 000000000..01a591820
--- /dev/null
+++ b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseTagHandlerTest.java
@@ -0,0 +1,118 @@
+package de.deadlocker8.budgetmaster.tests.server.database;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import de.deadlocker8.budgetmaster.logic.tag.Tag;
+import de.deadlocker8.budgetmasterserver.logic.Settings;
+import de.deadlocker8.budgetmasterserver.logic.Utils;
+import de.deadlocker8.budgetmasterserver.logic.database.DatabaseHandler;
+import de.deadlocker8.budgetmasterserver.logic.database.DatabaseTagHandler;
+
+public class DatabaseTagHandlerTest
+{			
+	private static DatabaseTagHandler tagHandler;
+	
+	@BeforeClass
+	public static void init()
+	{
+		try
+		{
+			//init
+			Settings settings = Utils.loadSettings();
+			System.out.println(settings);
+			DatabaseHandler handler = new DatabaseHandler(settings);
+			handler.deleteDatabase();
+			handler = new DatabaseHandler(settings);			
+			tagHandler = new DatabaseTagHandler(settings);
+		}
+		catch(IOException | URISyntaxException e)
+		{
+			fail(e.getMessage());
+		}		
+	}
+	
+	@Test
+	public void testTag()
+	{
+		//add
+		Tag expected = new Tag(1, "sd836f4ds86f4sd86");
+		tagHandler.addTag(expected.getName());
+		ArrayList<Tag> tags = tagHandler.getAllTags();
+		assertEquals(1, tags.size());
+		
+		//get
+		Tag tag = tagHandler.getTagByID(1);
+		assertEquals(expected.getName(), tag.getName());
+		
+		tag = tagHandler.getTagByName(expected.getName());
+		assertEquals(1, tag.getID());
+	}
+
+	@Test
+	public void testDeleteCategory()
+	{
+		//add
+		Tag expected = new Tag(1, "115");
+		tagHandler.addTag(expected.getName());
+		
+		int id = tagHandler.getLastInsertID();
+		
+		tagHandler.deleteTag(id);
+		Tag tag = tagHandler.getTagByID(id);
+		
+		assertNull(tag);
+	}
+	
+	@Test
+	public void testMatchForNormalPayment()
+	{		
+		//add
+		Tag expected = new Tag(1, "wqeolugjf");
+		tagHandler.addTag(expected.getName());
+		int id = tagHandler.getLastInsertID();
+		
+		tagHandler.addTagMatchForPayment(id, 1);
+		ArrayList<Integer> tags = tagHandler.getAllTagsForPayment(1);
+		assertEquals(1, tags.size());
+		
+		assertTrue(tagHandler.isMatchExistingForPaymentID(id, 1));
+		assertFalse(tagHandler.isMatchExistingForPaymentID(id, -3));
+		
+		assertTrue(tagHandler.isTagUsedInMatches(id));
+		
+		tagHandler.deleteTagMatchForPayment(id, 1);
+		assertFalse(tagHandler.isMatchExistingForPaymentID(id, 1));
+	}
+	
+	@Test
+	public void testMatchRepeatingPayment()
+	{		
+		//add
+		Tag expected = new Tag(1, "as5d4s5a4d");
+		tagHandler.addTag(expected.getName());
+		int id = tagHandler.getLastInsertID();
+		
+		tagHandler.addTagMatchForRepeatingPayment(id, 1);
+		ArrayList<Integer> tags = tagHandler.getAllTagsForRepeatingPayment(1);
+		assertEquals(1, tags.size());
+		
+		assertTrue(tagHandler.isMatchExistingForRepeatingPaymentID(id, 1));
+		assertFalse(tagHandler.isMatchExistingForRepeatingPaymentID(id, -3));
+		
+		assertTrue(tagHandler.isTagUsedInMatches(id));
+		
+		tagHandler.deleteTagMatchForRepeatingPayment(id, 1);
+		assertFalse(tagHandler.isMatchExistingForRepeatingPaymentID(id, 1));
+	}	
+}
\ No newline at end of file
-- 
GitLab