def test__additional_sign_real__detail(geo_format):
    client = get_api_client()
    asr = get_additional_sign_real()
    ascr = get_additional_sign_content_real(parent=asr)
    operation_1 = add_additional_sign_real_operation(
        asr, operation_date=datetime.date(2020, 11, 5)
    )
    operation_2 = add_additional_sign_real_operation(
        asr, operation_date=datetime.date(2020, 11, 15)
    )
    operation_3 = add_additional_sign_real_operation(
        asr, operation_date=datetime.date(2020, 11, 10)
    )

    response = client.get(
        reverse("v1:additionalsignreal-detail", kwargs={"pk": asr.pk}),
        data={"geo_format": geo_format},
    )
    response_data = response.json()

    assert response.status_code == status.HTTP_200_OK
    assert response_data["id"] == str(asr.pk)
    assert response_data["parent"] == str(asr.parent.pk)
    assert response_data["content"][0]["id"] == str(ascr.pk)
    # verify operations are ordered by operation_date
    operation_ids = [operation["id"] for operation in response_data["operations"]]
    assert operation_ids == [operation_1.id, operation_3.id, operation_2.id]

    if geo_format == "geojson":
        assert response_data["location"] == GeoJsonDict(asr.location.json)
    else:
        assert response_data["location"] == asr.location.ewkt
Beispiel #2
0
 def clean_geojson(geojson):
     # Add altitude (0) as third coordinate and make time to int
     geojson["coordinates"] = [[c[0], c[1], 0, int(c[2])]
                               for c in geojson["coordinates"]
                               if c[2] >= h24_ago]
     if len(geojson["coordinates"]) < 3:
         return None
     return GeoJsonDict({'type': 'Feature', 'geometry': geojson})
Beispiel #3
0
    def to_representation(self, value):
        target_geom_value = value.processed_geom_json or value.processed_point_json

        if isinstance(target_geom_value, dict) or target_geom_value is None:
            return target_geom_value

        # we expect target_geom_value to be a GEOSGeometry instance
        return GeoJsonDict(target_geom_value)
    def test_valid_serializer(self):
        data = self.serializer.data

        self.assertEqual(data.get("title"), "title")
        self.assertEqual(data.get("description"), "description")
        self.assertEqual(
            data.get("coordinates"),
            GeoJsonDict([("type", "Point"), ("coordinates", [1.0, 1.0])]),
        )
Beispiel #5
0
 def test_pickle(self):
     geometry = GEOSGeometry('POINT (30 10)')
     geojsondict = GeoJsonDict((
         ('type', geometry.geom_type),
         ('coordinates', geometry.coords),
     ))
     pickled = pickle.dumps(geojsondict)
     restored = pickle.loads(pickled)
     self.assertEqual(restored, geojsondict)
Beispiel #6
0
 def to_representation(self, instance):
     feature = OrderedDict()
     feature["id"] = instance.event_id
     feature["type"] = "Feature"
     feature["geometry"] = GeoJsonDict(
         json.loads(geos.GEOSGeometry(instance.geom).envelope.geojson))
     further_info = self.context["events_info"][str(instance.event_id)]
     feature["properties"] = self.get_feature_properties(
         instance, further_info)
     return feature
 def test_pickle(self):
     import pickle
     from rest_framework_gis.fields import GeoJsonDict
     geometry = GEOSGeometry('POINT (30 10)')
     geojsondict = GeoJsonDict((
         ('type', geometry.geom_type),
         ('coordinates', geometry.coords),
     ))
     pickled = pickle.dumps(geojsondict)
     restored = pickle.loads(pickled)
     self.assertEqual(restored, geojsondict)
Beispiel #8
0
 def test_get_barrier_real_detail__geojson(self):
     """
     Ensure we can get one real barrier object with GeoJSON location.
     """
     barrier_real = self.__create_test_barrier_real()
     response = self.client.get(
         reverse("v1:barrierreal-detail", kwargs={"pk": barrier_real.id}),
         data={"geo_format": "geojson"},
     )
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(response.data.get("id"), str(barrier_real.id))
     barrier_real_geojson = GeoJsonDict(barrier_real.location.json)
     self.assertEqual(barrier_real_geojson, response.data.get("location"))
Beispiel #9
0
def test_plan_detail_geojson():
    api_client = get_api_client()
    plan = get_plan()

    response = api_client.get(
        reverse("v1:plan-detail", kwargs={"pk": plan.pk}),
        data={"geo_format": "geojson"},
    )

    plan_geojson = GeoJsonDict(plan.location.json)
    assert response.status_code == status.HTTP_200_OK
    assert response.data.get("id") == str(plan.pk)
    assert response.data.get("location") == plan_geojson
 def test_get_traffic_light_detail__geojson(self):
     """
     Ensure we can get one traffic light plan object with GeoJSON location.
     """
     traffic_light = self.__create_test_traffic_light_plan()
     response = self.client.get(
         reverse("v1:trafficlightplan-detail", kwargs={"pk": traffic_light.id}),
         data={"geo_format": "geojson"},
     )
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(response.data.get("id"), str(traffic_light.id))
     traffic_light_geojson = GeoJsonDict(traffic_light.location.json)
     self.assertEqual(traffic_light_geojson, response.data.get("location"))
 def test_get_mount_real_detail__geojson(self):
     """
     Ensure we can get one mount real object.
     """
     mount_real = self.__create_test_mount_real()
     response = self.client.get(
         reverse("v1:mountreal-detail", kwargs={"pk": mount_real.id}),
         data={"geo_format": "geojson"},
     )
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(response.data.get("id"), str(mount_real.id))
     mount_real_geojson = GeoJsonDict(mount_real.location.json)
     self.assertEqual(mount_real_geojson, response.data.get("location"))
Beispiel #12
0
 def test_get_signpost_plan_detail__geojson(self):
     """
     Ensure we can get one signpost plan object with GeoJSON location.
     """
     signpost_plan = self.__create_test_signpost_plan()
     response = self.client.get(
         reverse("v1:signpostplan-detail", kwargs={"pk": signpost_plan.id}),
         data={"geo_format": "geojson"},
     )
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(response.data.get("id"), str(signpost_plan.id))
     signpost_plan_geojson = GeoJsonDict(signpost_plan.location.json)
     self.assertEqual(signpost_plan_geojson, response.data.get("location"))
Beispiel #13
0
def test__additional_sign_real__list(geo_format):
    client = get_api_client()
    for owner_name in ["foo", "bar", "baz"]:
        asr = get_additional_sign_real(owner=get_owner(name_fi=owner_name))
        get_additional_sign_content_real(parent=asr)

    response = client.get(reverse("v1:additionalsignreal-list"),
                          data={"geo_format": geo_format})
    response_data = response.json()

    assert response.status_code == status.HTTP_200_OK
    assert response_data["count"] == 3
    for result in response_data["results"]:
        obj = AdditionalSignReal.objects.get(pk=result["id"])
        assert result["content"][0]["id"] == str(obj.content.first().pk)

        if geo_format == "geojson":
            assert result["location"] == GeoJsonDict(obj.location.json)
            assert result["affect_area"] == GeoJsonDict(obj.affect_area.json)
        else:
            assert result["location"] == obj.location.ewkt
            assert result["affect_area"] == obj.affect_area.ewkt
Beispiel #14
0
 def test_get_road_marking_detail__geojson(self):
     """
     Ensure we can get one road marking plan object with GeoJSON location.
     """
     road_marking = self.__create_test_road_marking_plan()
     response = self.client.get(
         reverse("v1:roadmarkingplan-detail",
                 kwargs={"pk": road_marking.id}),
         data={"geo_format": "geojson"},
     )
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(response.data.get("id"), str(road_marking.id))
     road_marking_geojson = GeoJsonDict(road_marking.location.json)
     self.assertEqual(road_marking_geojson, response.data.get("location"))
Beispiel #15
0
def test__additional_sign_real__detail(geo_format):
    client = get_api_client()
    asr = get_additional_sign_real()
    ascr = get_additional_sign_content_real(parent=asr)

    response = client.get(
        reverse("v1:additionalsignreal-detail", kwargs={"pk": asr.pk}),
        data={"geo_format": geo_format},
    )
    response_data = response.json()

    assert response.status_code == status.HTTP_200_OK
    assert response_data["id"] == str(asr.pk)
    assert response_data["parent"] == str(asr.parent.pk)
    assert response_data["content"][0]["id"] == str(ascr.pk)

    if geo_format == "geojson":
        assert response_data["location"] == GeoJsonDict(asr.location.json)
        assert response_data["affect_area"] == GeoJsonDict(
            asr.affect_area.json)
    else:
        assert response_data["location"] == asr.location.ewkt
        assert response_data["affect_area"] == asr.affect_area.ewkt
Beispiel #16
0
 def clean_geojson(row):
     # Add altitude (0) as third coordinate and make time to int
     geojson = row.geojson
     speed = row.speed
     coords = []
     for i, c in enumerate(geojson["coordinates"]):
         try:
             if c[2] >= h24_ago:
                 coords.append([c[0], c[1], speed[i], int(c[2])])
         except IndexError:
             coords.append([c[0], c[1], 0, int(c[2])])
     geojson["coordinates"] = coords
     if len(geojson["coordinates"]) < 3:
         return None
     return GeoJsonDict({'type': 'Feature', 'geometry': geojson})
Beispiel #17
0
    def test_get_all_barrier_real__geojson(self):
        """
        Ensure we can get all barrier real objects with GeoJSON location.
        """
        count = 3
        for i in range(count):
            self.__create_test_barrier_real()
        response = self.client.get(reverse("v1:barrierreal-list"),
                                   data={"geo_format": "geojson"})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data.get("count"), count)

        results = response.data.get("results")
        for result in results:
            barrier_real = BarrierReal.objects.get(id=result.get("id"))
            self.assertEqual(result.get("location"),
                             GeoJsonDict(barrier_real.location.json))
    def test_get_all_mount_plans__geojson(self):
        """
        Ensure we can get all mount plan objects with GeoJSON location.
        """
        count = 3
        for i in range(count):
            self.__create_test_mount_plan()
        response = self.client.get(reverse("v1:mountplan-list"),
                                   data={"geo_format": "geojson"})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data.get("count"), count)

        results = response.data.get("results")
        for result in results:
            mount_plan = MountPlan.objects.get(id=result.get("id"))
            self.assertEqual(result.get("location"),
                             GeoJsonDict(mount_plan.location.json))
Beispiel #19
0
    def test_get_all_road_marking_reals__geojson(self):
        """
        Ensure we can get all real road marking objects with GeoJSON location.
        """
        count = 3
        for i in range(count):
            self.__create_test_road_marking_real()
        response = self.client.get(reverse("v1:roadmarkingreal-list"),
                                   data={"geo_format": "geojson"})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data.get("count"), count)

        results = response.data.get("results")
        for result in results:
            road_marking_plan = RoadMarkingReal.objects.get(
                id=result.get("id"))
            self.assertEqual(result.get("location"),
                             GeoJsonDict(road_marking_plan.location.json))
Beispiel #20
0
    def test_patch_service_data(self, auth_client, user):
        service = ServiceFactory(provider=user, polygon=self.first_polygon)

        url = reverse("v1:services:details", args=[service.id])

        request = auth_client.patch(url, data={"polygon": self.polygon_data}, format="json")

        assert request.status_code == 200

        expected_result = {
            "id": request.data.get("id"),
            "type": "Feature",
            "geometry":
                GeoJsonDict(
                    [("type", self.polygon_data["type"]), ("coordinates", self.polygon_data["coordinates"])]
                ),
            "properties": OrderedDict(
                [("provider", user.name), ("name", service.name), ("price", f"{service.price:.2f}")]
            )
        }

        assert request.data == expected_result
Beispiel #21
0
    def test_create_service(self, auth_client, user):
        data = {
            "name": self.name,
            "price": self.price,
            "polygon": self.polygon_data
        }

        request = auth_client.post(self.url, data=data, format="json")

        assert request.status_code == 201

        expected_result = {
            "id": request.data.get("id"),
            "type": "Feature",
            "geometry":
                GeoJsonDict(
                    [("type", self.polygon_data["type"]), ("coordinates", self.polygon_data["coordinates"])]
                ),
            "properties": OrderedDict(
                [("provider", user.name), ("name", self.name), ("price", self.price)]
            )
        }

        assert request.data == expected_result