示例#1
0
 def test_create_a_single_mount_real_for_nearby_traffic_signs(self):
     main_sign_1 = TrafficSignReal.objects.create(
         location=Point(1, 1, 10, srid=settings.SRID),
         legacy_code="100",
         mount_type=self.mount_type,
         direction=0,
         created_by=self.user,
         updated_by=self.user,
         owner=get_owner(),
     )
     main_sign_2 = TrafficSignReal.objects.create(
         location=Point(1, 0.8, 5, srid=settings.SRID),
         legacy_code="100",
         mount_type=self.mount_type,
         direction=0,
         created_by=self.user,
         updated_by=self.user,
         owner=get_owner(),
     )
     call_command("generate_mount_real_objects")
     self.assertEqual(MountReal.objects.count(), 1)
     mount_real = MountReal.objects.first()
     main_sign_1.refresh_from_db()
     main_sign_2.refresh_from_db()
     self.assertEqual(main_sign_1.mount_real, mount_real)
     self.assertEqual(main_sign_2.mount_real, mount_real)
def test__owner_api__list(is_admin):
    Owner.objects.all().delete()
    user = get_user(admin=is_admin)
    client = get_api_client(user)
    get_owner(name_fi="owner 1")
    get_owner(name_fi="owner 2")

    response = client.get(reverse("v1:owner-list"))

    assert response.status_code == status.HTTP_200_OK
    assert response.data["count"] == 2
def test__owner_api__retrieve(is_admin):
    Owner.objects.all().delete()
    user = get_user(admin=is_admin)
    client = get_api_client(user)
    owner_1 = get_owner(name_fi="owner 1")
    get_owner(name_fi="owner 2")

    response = client.get(reverse("v1:owner-detail", kwargs={"pk":
                                                             owner_1.pk}))

    assert response.status_code == status.HTTP_200_OK
    assert response.data["id"] == str(owner_1.pk)
    assert response.data["name_fi"] == owner_1.name_fi
示例#4
0
    def test_update_traffic_sign_real_3d_location(self):
        user = get_user()
        owner = get_owner()
        data = {
            "location": Point(5, 5, srid=settings.SRID),
            "z_coord": 20,
            "direction": 0,
            "created_by": user.id,
            "updated_by": user.id,
            "owner": owner.pk,
            "lifecycle": Lifecycle.ACTIVE,
            "device_type": get_traffic_control_device_type().pk,
        }
        user = get_user()
        traffic_sign_real = TrafficSignReal.objects.create(
            location=Point(10, 10, 5, srid=settings.SRID),
            direction=0,
            created_by=user,
            updated_by=user,
            owner=owner,
            lifecycle=Lifecycle.ACTIVE,
        )
        form = TrafficSignRealModelForm(data=data, instance=traffic_sign_real)
        self.assertEqual(form.fields["z_coord"].initial, 5)
        self.assertTrue(form.is_valid())

        instance = form.save()
        self.assertEqual(instance.location, Point(5, 5, 20, srid=settings.SRID))
def test__api_operational_area_permission__create(model, location, success):
    operational_area = get_operational_area()
    user = get_user()
    perms = Permission.objects.filter(codename__contains=model.lower())
    user.operational_areas.add(operational_area)
    user.user_permissions.add(*perms)
    device_type = get_traffic_control_device_type()

    location = location.ewkt if location else None

    if model == "Plan":
        data = {
            "name": "Test plan",
            "plan_number": "2020_1",
            "location": location,
            "planner": user.pk,
            "decision_maker": user.pk,
            "plans": {
                "barrier": [],
                "mount": [],
                "road_marking": [],
                "signpost": [],
                "traffic_light": [],
                "traffic_sign": [],
                "additional_sign": [],
            },
        }
    else:
        data = {
            "location": location,
            "device_type": device_type.pk,
            "decision_date": "2020-07-01",
            "lifecycle": Lifecycle.ACTIVE.value,
            "owner": get_owner().pk,
        }

        if model in ["BarrierPlan", "BarrierReal"]:
            data["road_name"] = "testroad"
        elif model in ["RoadMarkingPlan", "RoadMarkingReal"]:
            data["source_id"] = 1
            data["source_name"] = "test source"

    api_client = get_api_client(user=user)
    response = api_client.post(reverse(f"v1:{model.lower()}-list"),
                               data=data,
                               format="json")

    ModelClass = getattr(models, model)  # noqa: N806
    if success:
        assert response.status_code == status.HTTP_201_CREATED
        assert ModelClass.objects.count() == 1
    elif not location:
        assert response.status_code == status.HTTP_400_BAD_REQUEST
        assert response.json() == {
            "location": [_("This field may not be null.")]
        }
    else:
        assert response.status_code == status.HTTP_403_FORBIDDEN
        assert ModelClass.objects.count() == 0
 def setUp(self):
     self.user = get_user()
     self.main_sign = TrafficSignPlan.objects.create(
         location=Point(0, 0, 10, srid=settings.SRID),
         direction=0,
         device_type=get_traffic_control_device_type(code="T123"),
         created_by=self.user,
         updated_by=self.user,
         owner=get_owner(),
     )
示例#7
0
 def setUp(self):
     self.user = get_user()
     self.main_sign = TrafficSignReal.objects.create(
         location=Point(0, 0, 10, srid=settings.SRID),
         legacy_code="100",
         direction=0,
         created_by=self.user,
         updated_by=self.user,
         owner=get_owner(),
     )
def test__api_operational_area_permission__update(model, location, success):
    operational_area = get_operational_area()
    user = get_user()
    perms = Permission.objects.filter(codename__contains=model.lower())
    user.operational_areas.add(operational_area)
    user.user_permissions.add(*perms)
    device_type = get_traffic_control_device_type()
    instance = model_factory_map[model](location=location)

    if model == "Plan":
        data = {
            "name": "Test plan",
            "plan_number": "2020_1",
            "location": location.ewkt,
            "planner": user.pk,
            "decision_maker": user.pk,
            "plans": {
                "barrier": [],
                "mount": [],
                "road_marking": [],
                "signpost": [],
                "traffic_light": [],
                "traffic_sign": [],
                "additional_sign": [],
            },
        }
    else:
        data = {
            "location": location.ewkt,
            "device_type": device_type.pk,
            "decision_date": "2020-07-01",
            "lifecycle": Lifecycle.ACTIVE.value,
            "owner": get_owner().pk,
        }

        if model in ["BarrierPlan", "BarrierReal"]:
            data["road_name"] = "testroad"
        elif model in ["RoadMarkingPlan", "RoadMarkingReal"]:
            data["source_id"] = 1
            data["source_name"] = "test source"

    api_client = get_api_client(user=user)
    response = api_client.put(
        reverse(f"v1:{model.lower()}-detail", kwargs={"pk": instance.pk}),
        data,
        format="json",
    )

    instance.refresh_from_db()
    if success:
        assert response.status_code == status.HTTP_200_OK
        assert instance.updated_by == user
    else:
        assert response.status_code == status.HTTP_403_FORBIDDEN
        assert instance.updated_by != user
示例#9
0
 def setUp(self):
     self.user = get_user()
     self.mount_type = get_mount_type(code="LIGHTPOLE",
                                      description="Lightpole")
     self.mount_real = MountReal.objects.create(
         location=Point(1, 1, srid=settings.SRID),
         mount_type=self.mount_type,
         owner=get_owner(),
         created_by=self.user,
         updated_by=self.user,
     )
示例#10
0
 def test_create_separate_mount_reals_for_further_away_traffic_signs(self):
     TrafficSignReal.objects.create(
         location=Point(1, 1, 10, srid=settings.SRID),
         legacy_code="100",
         mount_type=self.mount_type,
         direction=0,
         created_by=self.user,
         updated_by=self.user,
         owner=get_owner(),
     )
     TrafficSignReal.objects.create(
         location=Point(2, 2, 5, srid=settings.SRID),
         legacy_code="100",
         mount_type=self.mount_type,
         direction=0,
         created_by=self.user,
         updated_by=self.user,
         owner=get_owner(),
     )
     call_command("generate_mount_real_objects")
     self.assertEqual(MountReal.objects.count(), 2)
示例#11
0
 def test_save_model_set_created_by_and_updated_by_for_creating(self):
     ma = TrafficSignRealAdmin(TrafficSignReal, self.site)
     request = MockRequest()
     request.user = self.admin
     traffic_sign_real = TrafficSignReal(
         location=Point(1, 1, 5, srid=settings.SRID),
         legacy_code="100",
         direction=0,
         owner=get_owner(),
     )
     ma.save_model(request, traffic_sign_real, None, None)
     self.assertEqual(traffic_sign_real.created_by, self.admin)
     self.assertEqual(traffic_sign_real.updated_by, self.admin)
示例#12
0
 def setUp(self):
     self.user = get_user()
     self.admin = get_user(admin=True)
     self.traffic_sign_real = TrafficSignReal.objects.create(
         location=Point(10, 10, 5, srid=settings.SRID),
         legacy_code="100",
         direction=0,
         created_by=self.user,
         updated_by=self.user,
         owner=get_owner(),
         lifecycle=Lifecycle.ACTIVE,
     )
     self.site = AdminSite()
示例#13
0
 def test_ordered_traffic_signs_property_return_ordered_traffic_signs(self):
     traffic_sign_1 = TrafficSignReal.objects.create(
         location=Point(0, 0, 2, srid=settings.SRID),
         legacy_code="100",
         mount_type=self.mount_type,
         mount_real=self.mount_real,
         direction=0,
         created_by=self.user,
         updated_by=self.user,
         owner=get_owner(),
     )
     traffic_sign_2 = TrafficSignReal.objects.create(
         location=Point(0, 0, 2.5, srid=settings.SRID),
         legacy_code="100",
         mount_type=self.mount_type,
         mount_real=self.mount_real,
         direction=0,
         created_by=self.user,
         updated_by=self.user,
         owner=get_owner(),
     )
     traffic_sign_3 = TrafficSignReal.objects.create(
         location=Point(0, 0, 1.8, srid=settings.SRID),
         legacy_code="100",
         mount_type=self.mount_type,
         mount_real=self.mount_real,
         direction=0,
         created_by=self.user,
         updated_by=self.user,
         owner=get_owner(),
     )
     self.assertQuerysetEqual(
         self.mount_real.ordered_traffic_signs,
         [repr(traffic_sign_2),
          repr(traffic_sign_1),
          repr(traffic_sign_3)],
     )
def test__owner_api__destroy(is_admin):
    Owner.objects.all().delete()
    user = get_user(admin=is_admin)
    client = get_api_client(user)
    owner = get_owner(name_fi="foo", name_en="bar")

    response = client.delete(
        reverse("v1:owner-detail", kwargs={"pk": owner.pk}))

    if is_admin:
        assert response.status_code == status.HTTP_204_NO_CONTENT
        assert Owner.objects.count() == 0
    else:
        assert response.status_code == status.HTTP_403_FORBIDDEN
        assert Owner.objects.count() == 1
示例#15
0
 def test_create_traffic_sign_real_3d_location(self):
     user = get_user()
     data = {
         "location": Point(10, 10, srid=settings.SRID),
         "z_coord": 20,
         "direction": 0,
         "created_by": user.id,
         "updated_by": user.id,
         "owner": get_owner().pk,
         "lifecycle": Lifecycle.ACTIVE,
         "device_type": get_traffic_control_device_type().pk,
     }
     form = TrafficSignRealModelForm(data=data)
     form.is_valid()
     self.assertTrue(form.is_valid())
     instance = form.save()
     self.assertEqual(instance.location, Point(10, 10, 20, srid=settings.SRID))
def test__api_operational_area_permission__create__geojson(location, success):
    operational_area = get_operational_area()
    user = get_user()
    perms = Permission.objects.filter(codename__contains="barrierplan")
    user.operational_areas.add(operational_area)
    user.user_permissions.add(*perms)
    device_type = get_traffic_control_device_type()

    if location:
        location = json.loads(location.geojson)
        location.update({
            "crs": {
                "type": "name",
                "properties": {
                    "name": f"EPSG:{settings.SRID}"
                }
            }
        })

    data = {
        "location": location,
        "device_type": device_type.pk,
        "decision_date": "2020-07-01",
        "lifecycle": Lifecycle.ACTIVE.value,
        "owner": get_owner().pk,
        "road_name": "testroad",
    }

    api_client = get_api_client(user=user)
    response = api_client.post(
        f"{reverse('v1:barrierplan-list')}?geo_format=geojson",
        data=data,
        format="json")

    if success:
        assert response.status_code == status.HTTP_201_CREATED
        assert BarrierPlan.objects.count() == 1
    elif not location:
        assert response.status_code == status.HTTP_400_BAD_REQUEST
        assert response.json() == {
            "location": [_("This field may not be null.")]
        }
    else:
        assert response.status_code == status.HTTP_403_FORBIDDEN
        assert BarrierPlan.objects.count() == 0
 def test_save_traverse_road_marking_without_road_name_raise_validation_error(
         self):
     device_type = TrafficControlDeviceType.objects.create(
         code="L11",
         target_model=DeviceTypeTargetModel.ROAD_MARKING,
         type=TrafficControlDeviceTypeType.TRANSVERSE,
     )
     user = get_user("test_user")
     with self.assertRaises(ValidationError) as e:
         RoadMarkingReal.objects.create(
             device_type=device_type,
             location=Point(1, 1, 0, srid=settings.SRID),
             road_name="",
             owner=get_owner(),
             created_by=user,
             updated_by=user,
         )
         self.assertEqual(
             str(e),
             f'Road name is required for "{TrafficControlDeviceTypeType.TRANSVERSE.value}" road marking',
         )
def test__owner_api__partial_update(is_admin):
    Owner.objects.all().delete()
    user = get_user(admin=is_admin)
    client = get_api_client(user)
    owner = get_owner(name_fi="foo", name_en="bar")
    data = {
        "name_fi": "Omistajan nimi",
    }

    response = client.patch(reverse("v1:owner-detail", kwargs={"pk":
                                                               owner.pk}),
                            data=data)
    owner.refresh_from_db()
    assert Owner.objects.count() == 1

    if is_admin:
        assert response.status_code == status.HTTP_200_OK
        assert owner.name_fi == data["name_fi"]
        assert owner.name_en == "bar"
    else:
        assert response.status_code == status.HTTP_403_FORBIDDEN
        assert owner.name_fi == "foo"
        assert owner.name_en == "bar"