diff --git a/requirements.txt b/requirements.txt
index 0083c46082253b8bbfd6c6aec277a33c140c8dcc..68423364274185ae1b7f5bea10f7c75f840a1031 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,3 +2,4 @@ pyproj
 requests
 pyperclip
 tqdm
+shapely
diff --git a/test_zipcode.py b/test_zipcode.py
index 976685699fdf00b4074c9671f97b633c256ea100..189ee2f82b65b09b3771a44de934b99f0d66dd0e 100644
--- a/test_zipcode.py
+++ b/test_zipcode.py
@@ -1,11 +1,53 @@
 import unittest
+import pyperclip
 from get_coordinates_by_zipcode import get_coordinates_by_zipcode
 
 
 class TestGetCoordinates(unittest.TestCase):
 
-    def test_get_mohringen(self):
+    def test_get_single_plz(self):
         coords = get_coordinates_by_zipcode(['70567'])
+        self.assertTrue(coords.startswith('POLYGON ((9.'))
+        self.assertTrue(' 48.7' in coords)
+        self.assertTrue(' 9.15' in coords)
+
+    def test_get_multiple_plz(self):
+        # Multiple PLZs
+        coords = get_coordinates_by_zipcode(['70567', '70569'])
+        self.assertTrue(coords.startswith('POLYGON ((9.'))
+        self.assertTrue(' 48.7' in coords)
+        self.assertTrue(' 9.15' in coords)
+
+    def test_get_multiple_disjoint_plz(self):
+        # Multiple PLZs, separate
+        coords = get_coordinates_by_zipcode(['70567', '10178'])
+        self.assertTrue(coords.startswith('MULTIPOLYGON ((('))
+        self.assertTrue(' 48.7' in coords)
+        self.assertTrue(' 9.15' in coords)
+        self.assertTrue(' 52.5' in coords)
+        self.assertTrue(' 13.4' in coords)
+
+    def test_get_plz_with_hole(self):
+        # 70469 missing in the middle
+        coords = get_coordinates_by_zipcode(['70469', '70193',
+                                             '70176', '70174', '70191'])
+        self.assertTrue(coords.startswith('POLYGON ((9'))
+        self.assertTrue('), (' in coords)
+
+    def test_get_coords_in_clipboard(self):
+        pyperclip.copy("")
+        self.assertEquals(pyperclip.paste(), "")
+        get_coordinates_by_zipcode(['70567'])
+        coords = pyperclip.paste()
+        self.assertTrue(coords.startswith('POLYGON ((9.'))
+        self.assertTrue(' 48.7' in coords)
+        self.assertTrue(' 9.15' in coords)
+
+    def test_get_unknown_plz(self):
+        # Incorrect PLZ
+        self.assertRaisesRegex(AttributeError, "no information could be found",
+                               get_coordinates_by_zipcode, ['1234567']
+                               )
 
 
 if __name__ == '__main__':