def test_way_relation_speed_limit_maxspeed(self):
        # Reset all tags before teting
        mockOSMWay_01_02_Loop.tags = {}
        wayRelation = WayRelation(mockOSMWay_01_02_Loop)

        # No Value
        self.assertEqual(wayRelation.speed_limit, 0.)

        # Value on both directions
        wayRelation._speed_limit = None
        wayRelation.way.tags["maxspeed"] = "100"
        self.assertEqual(wayRelation.speed_limit, 100. * CV.KPH_TO_MS)

        # Value on forward
        wayRelation.way.tags.pop("maxspeed")
        wayRelation._speed_limit = None
        wayRelation.direction = DIRECTION.FORWARD
        self.assertEqual(wayRelation.speed_limit, 0.)

        wayRelation._speed_limit = None
        wayRelation.way.tags["maxspeed:forward"] = "100"
        self.assertEqual(wayRelation.speed_limit, 100. * CV.KPH_TO_MS)

        # Value on backward
        wayRelation._speed_limit = None
        wayRelation.direction = DIRECTION.BACKWARD
        self.assertEqual(wayRelation.speed_limit, 0.)

        wayRelation._speed_limit = None
        wayRelation.way.tags["maxspeed:backward"] = "100"
        self.assertEqual(wayRelation.speed_limit, 100. * CV.KPH_TO_MS)
    def test_way_relation_update_direction_from_starting_node_resets_speed_limit(
            self):
        wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy)
        wayRelation._speed_limit = 10.

        wayRelation.update_direction_from_starting_node(
            wayRelation.way.nodes[0].id)

        self.assertIsNone(wayRelation._speed_limit)
    def test_way_relation_speed_limit_conditional(self, mock_dt):
        tz = timezone(timedelta(hours=1), 'berlin')
        wed_10_10_am = dt(2021, 9, 1, 10, 10, 0)
        mock_dt.now.return_value = wed_10_10_am
        mock_dt.tzinfo = tz
        mock_dt.combine = dt.combine
        mock_dt.strptime = dt.strptime

        # Reset all tags before teting
        mockOSMWay_01_02_Loop.tags = {}
        wayRelation = WayRelation(mockOSMWay_01_02_Loop)

        # No Value
        self.assertEqual(wayRelation.speed_limit, 0.)

        # Value on both directions
        wayRelation._speed_limit = None
        wayRelation.way.tags["maxspeed:conditional"] = "100 @ (We 10:00-10:30)"
        self.assertEqual(wayRelation.speed_limit, 100. * CV.KPH_TO_MS)

        # Value on forward
        wayRelation.way.tags.pop("maxspeed:conditional")
        wayRelation._speed_limit = None
        wayRelation.direction = DIRECTION.FORWARD
        self.assertEqual(wayRelation.speed_limit, 0.)

        wayRelation._speed_limit = None
        wayRelation.way.tags[
            "maxspeed:forward:conditional"] = "100 @ (We 10:00-10:30)"
        self.assertEqual(wayRelation.speed_limit, 100. * CV.KPH_TO_MS)

        # Value on backward
        wayRelation._speed_limit = None
        wayRelation.direction = DIRECTION.BACKWARD
        self.assertEqual(wayRelation.speed_limit, 0.)

        wayRelation._speed_limit = None
        wayRelation.way.tags[
            "maxspeed:backward:conditional"] = "100 @ (We 10:00-10:30)"
        self.assertEqual(wayRelation.speed_limit, 100. * CV.KPH_TO_MS)
    def test_way_relation_speed_limit_when_set(self):
        wayRelation = WayRelation(mockOSMWay_01_02_Loop)
        wayRelation._speed_limit = 10.

        self.assertEqual(wayRelation.speed_limit, 10.)