From 9c217ae7aec5daa73774859b6bb7e0a2e722aa0a Mon Sep 17 00:00:00 2001
From: Wannes Rombouts <wapiflapi@yahoo.fr>
Date: Tue, 4 Jun 2013 11:46:52 +0200
Subject: [PATCH] Added layerGroup tests, fixed an issue with the bound
 calculations/

---
 src/mapfile.py        |  6 ++----
 src/server.py         |  3 +++
 tests/testScenario.py | 46 +++++++++++++++++++++++++++++++++++++------
 3 files changed, 45 insertions(+), 10 deletions(-)

diff --git a/src/mapfile.py b/src/mapfile.py
index 702f439..ce71b7c 100644
--- a/src/mapfile.py
+++ b/src/mapfile.py
@@ -128,8 +128,6 @@ class Layer(MetadataMixin):
         # we need to rename it to something we are sure is not used.
         sld_layer_name = "__mra_tmp_template"
 
-        print new_sld
-
         # This is realy ugly but etree has trouble with namespaces...
         # TODO: Do this again in an other way.
         fixedxml = re.sub(' [a-zzA-Z0-9]+:([a-zA-Z0-9]+=")', ' \\1', new_sld)
@@ -231,8 +229,8 @@ class LayerGroup(object):
         extent = layers[0].get_extent()
         for layer in layers[1:]:
             e = layer.get_extent()
-            extent.addX(e.minX, e.maxX)
-            extent.addY(e.minY, e.maxY)
+            extent.addX(e.minX(), e.maxX())
+            extent.addY(e.minY(), e.maxY())
 
         return extent
 
diff --git a/src/server.py b/src/server.py
index 9fb0125..4c0a0da 100755
--- a/src/server.py
+++ b/src/server.py
@@ -860,6 +860,9 @@ class layergroup(object):
             raise webapp.Forbidden("Can't change the name of a layergroup.")
 
         layers = data.pop("layers", [])
+        if not isinstance(layers, list) or any(not isinstance(x, basestring) for x in layers):
+            raise webapp.BadRequest("layers must be a list of layer names.")
+
         lg.clear()
         lg.add(*layers)
 
diff --git a/tests/testScenario.py b/tests/testScenario.py
index ce64d9e..1fc4cd4 100644
--- a/tests/testScenario.py
+++ b/tests/testScenario.py
@@ -302,26 +302,60 @@ def _test_layers(target, map_name):
     _, r = APIRequest("POST", target + "/maps/" + map_name + "/layers",
                       {"layer":{"name":name, "resource":{"href":c_link}}},
                       get_response=True)
-    ctl_link = r.getheader("Location").rsplit(".", 1)[0]
+    cl_link = r.getheader("Location").rsplit(".", 1)[0]
 
     # Check GET.
-    ctl = APIRequest("GET", ctl_link)["layer"]
-    assert ctl["name"] == name
-    assert ctl["type"] == "RASTER"
+    cl = APIRequest("GET", cl_link)["layer"]
+    assert cl["name"] == name
+    assert cl["type"] == "RASTER"
 
     # Check GET.
     layers = APIRequest("GET", target + "/maps/" + map_name + "/layers")["layers"]
     assert len(layers) == 2
 
     # check GET fields
-    fields = APIRequest("GET", ctl_link + "/fields")["fields"]
+    fields = APIRequest("GET", cl_link + "/fields")["fields"]
     assert len(fields) == 0
 
     # check GET layerstyles
-    fields = APIRequest("GET", ctl_link + "/styles")["styles"]
+    fields = APIRequest("GET", cl_link + "/styles")["styles"]
     assert len(fields) == 0
 
 
+    # Now lets try layer groups.
+
+    layers = APIRequest("GET", target + "/maps/" + map_name + "/layergroups")["layerGroups"]
+    assert len(layers) == 0
+
+    # POST an empty group
+    name = "test_group"
+    _, r = APIRequest("POST", target + "/maps/" + map_name + "/layergroups", {"layerGroup":{"name":name}}, get_response=True)
+    g_link = r.getheader("Location").rsplit(".", 1)[0]
+
+    # GET it.
+    group = APIRequest("GET", g_link)["layerGroup"]
+    assert group["name"] == name
+    assert len(group["layers"]) == 0
+
+    # PUT some new layers in it.
+    group["layers"] = [x["name"] for x in group["layers"]] + [ftl["name"]]
+    del group["bounds"]
+    APIRequest("PUT", g_link, {"layerGroup":group})
+
+    # GET it.
+    group = APIRequest("GET", g_link)["layerGroup"]
+    assert len(group["layers"]) == 1
+
+    # PUT some new layers in it.
+    group["layers"] = [x["name"] for x in group["layers"]] + [cl["name"]]
+    del group["bounds"]
+    APIRequest("PUT", g_link, {"layerGroup":group})
+
+    # GET it.
+    group = APIRequest("GET", g_link)["layerGroup"]
+    assert len(group["layers"]) == 2
+
+
 def test_scenario():
 
     target = "http://localhost:8080"
-- 
GitLab