@routing @car @restrictions
Feature: Car - Turn restrictions
# Handle turn restrictions as defined by http://wiki.openstreetmap.org/wiki/Relation:restriction
# Note that if u-turns are allowed, turn restrictions can lead to suprising, but correct, routes.

    Background: Use car routing
        Given the profile "car"
        Given a grid size of 200 meters
        Given the origin -9.2972,10.3811
        # coordinate in Guinée, a country that observes GMT year round

    @no_turning @conditionals
    Scenario: Car - ignores unrecognized restriction
        Given the extract extra arguments "--parse-conditional-restrictions"
                                            # time stamp for 10am on Tues, 02 May 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the node map
            """
              a
            d j b
              c
            """

        And the ways
            | nodes | oneway |
            | aj    | no     |
            | jc    | no     |
            | bj    | yes    |
            | jd    | yes    |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional                |
            | restriction | bj       | aj     | j        | only_right_turn @ (has_pygmies > 10 p) |

        When I route I should get
            | from | to | route    |
            | b    | c  | bj,jc,jc |
            | b    | a  | bj,aj,aj |
            | b    | d  | bj,jd,jd |

    @no_turning @conditionals
    Scenario: Car - Restriction would be on, but the restriction was badly tagged
        Given the extract extra arguments "--parse-conditional-restrictions"
                                            # time stamp for 10am on Tues, 02 May 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"

        Given the node map
            """
              a
           p  |
            \ |
              j
              | \
              c  m
            """

        And the ways
            | nodes |
            | aj    |
            | jc    |
            | pjm   |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional             |
            | restriction | aj       | pjm    | j        | no_left_turn @ (Mo-Fr 07:00-10:30)  |
            | restriction | jc       | pjm    | j        | no_right_turn @ (Mo-Fr 07:00-10:30) |

        When I route I should get
            | from | to | route      |
            | a    | m  | aj,pjm,pjm |
            | c    | m  | jc,pjm,pjm |

    @no_turning @conditionals
    Scenario: Car - Restriction With Compressed Geometry
        Given the extract extra arguments "--parse-conditional-restrictions"
                                            # time stamp for 10am on Tues, 02 May 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"

        Given the node map
            """
            n
            |
            i
            |
            j-k-l-m
            |
            s
            """

        And the ways
            | nodes |
            | nij   |
            | js    |
            | jklm  |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional             |
            | restriction | nij      | jklm   | j        | no_left_turn @ (Mo-Fr 07:00-10:30)  |

        When I route I should get
            | from | to | route               |
            | n    | m  | nij,js,js,jklm,jklm |

    @no_turning @conditionals
    Scenario: Car - Restriction With Compressed Geometry and Traffic Signal
        Given the extract extra arguments "--parse-conditional-restrictions"
                                            # time stamp for 10am on Tues, 02 May 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"

        Given the node map
            """
            n
            |
            i
            |
            j-k-l-m
            |
            s
            """

        And the ways
            | nodes |
            | nij   |
            | js    |
            | jklm  |

        And the nodes
            | node | highway        |
            | i    | traffic_signal |
            | k    | traffic_signal |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional             |
            | restriction | nij      | jklm   | j        | no_left_turn @ (Mo-Fr 07:00-10:30)  |

        When I route I should get
            | from | to | route               |
            | n    | m  | nij,js,js,jklm,jklm |

    @no_turning @conditionals
    Scenario: Car - ignores except restriction
        Given the extract extra arguments "--parse-conditional-restrictions"
                                            # time stamp for 10am on Tues, 02 May 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the node map
            """
              a
            d j b
              c
            """

        And the ways
            | nodes | oneway |
            | aj    | no     |
            | jc    | no     |
            | bj    | no     |
            | jd    | no     |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional               | except   |
            | restriction | bj       | aj     | j        | only_right_turn @ (Mo-Su 08:00-12:00) | motorcar |
            | restriction | jd       | aj     | j        | only_left_turn @ (Mo-Su 08:00-12:00)  | bus      |

        When I route I should get
            | from | to | route          | # |
            | b    | c  | bj,jc,jc       |   |
            | b    | a  | bj,aj,aj       | restriction does not apply to cars |
            | b    | d  | bj,jd,jd       |   |
            | d    | c  | jd,aj,aj,jc,jc | restriction excepting busses still applies to cars  |

    @no_turning @conditionals
    Scenario: Car - only_right_turn
        Given the extract extra arguments "--parse-conditional-restrictions"
                                            # time stamp for 10am on Tues, 02 May 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the node map
            """
              a
            d j b
              c
            """

        And the ways
            | nodes | oneway |
            | aj    | no     |
            | jc    | no     |
            | bj    | yes    |
            | jd    | yes    |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional               |
            | restriction | bj       | aj     | j        | only_right_turn @ (Mo-Su 07:00-14:00) |

        When I route I should get
            | from | to | route          |
            | b    | c  | bj,aj,aj,jc,jc |
            | b    | a  | bj,aj,aj       |
            | b    | d  | bj,aj,aj,jd,jd |

    @no_turning @conditionals
    Scenario: Car - No right turn
        Given the extract extra arguments "--parse-conditional-restrictions"
                                            # time stamp for 10am on Tues, 02 May 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the node map
            """
              a
            d j b
              c
            """

        And the ways
            | nodes | oneway |
            | aj    | no     |
            | jc    | no     |
            | bj    | yes    |
            | jd    | yes    |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional               |
            | restriction | bj       | aj     | j        | no_right_turn @ (Mo-Fr 07:00-13:00)   |

        When I route I should get
            | from | to | route          | # |
            | b    | c  | bj,jc,jc       | normal turn |
            | b    | a  | bj,jc,jc,aj,aj | avoids right turn |
            | b    | d  | bj,jd,jd       | normal maneuver |

    @only_turning @conditionals
    Scenario: Car - only_left_turn
        Given the extract extra arguments "--parse-conditional-restrictions"
                                            # time stamp for 10am on Tues, 02 May 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the node map
            """
              a
            d j b
              c
            """

        And the ways
            | nodes | oneway |
            | aj    | no     |
            | jc    | no     |
            | bj    | yes    |
            | jd    | yes    |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional              |
            | restriction | bj       | jc     | j        | only_left_turn @ (Mo-Fr 07:00-16:00) |

        When I route I should get
            | from | to | route          |
            | b    | c  | bj,jc,jc       |
            | b    | a  | bj,jc,jc,aj,aj |
            | b    | d  | bj,jc,jc,jd,jd |

    @no_turning @conditionals
    Scenario: Car - No left turn
        Given the extract extra arguments "--parse-conditional-restrictions"
                                            # time stamp for 10am on Tues, 02 May 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the node map
            """
              a
            d j b
              c
            """

        And the ways
            | nodes | oneway |
            | aj    | no     |
            | jc    | no     |
            | bj    | yes    |
            | jd    | yes    |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional            |
            | restriction | bj       | jc     | j        | no_left_turn @ (Mo-Su 00:00-23:59) |

        When I route I should get
            | from | to | route          |
            | b    | c  | bj,aj,aj,jc,jc |
            | b    | a  | bj,aj,aj       |
            | b    | d  | bj,jd,jd       |

    @no_turning @conditionals
    Scenario: Car - Conditional restriction is off
        Given the extract extra arguments "--parse-conditional-restrictions"
                                            # time stamp for 10am on Tues, 02 May 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the node map
            """
              a
            d j b
              c
            """

        And the ways
            | nodes | oneway |
            | aj    | no     |
            | jc    | no     |
            | bj    | yes    |
            | jd    | yes    |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional             |
            | restriction | bj       | aj     | j        | no_right_turn @ (Mo-Su 16:00-20:00) |

        When I route I should get
            | from | to | route    |
            | b    | c  | bj,jc,jc |
            | b    | a  | bj,aj,aj |
            | b    | d  | bj,jd,jd |

    @no_turning @conditionals
    Scenario: Car - Conditional restriction is on
        Given the extract extra arguments "--parse-conditional-restrictions"
        # 10am utc, wed
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493805600"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493805600"
        Given the node map
            """
              a
            d j b
              c
            """

        And the ways
            | nodes | oneway |
            | aj    | no     |
            | jc    | no     |
            | bj    | yes    |
            | jd    | yes    |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional             |
            | restriction | bj       | aj     | j        | no_right_turn @ (Mo-Fr 07:00-14:00) |

        When I route I should get
            | from | to | route          |
            | b    | c  | bj,jc,jc       |
            | b    | a  | bj,jc,jc,aj,aj |
            | b    | d  | bj,jd,jd       |

    @no_turning @conditionals
    Scenario: Car - Conditional restriction with multiple time windows
        Given the extract extra arguments "--parse-conditional-restrictions"
        # 5pm Wed 02 May, 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400"

        Given the node map
            """
              a
           p  |
            \ |
              j
              | \
              c  m
            """

        And the ways
            | nodes | oneway |
            | aj    | no     |
            | jc    | no     |
            | jp    | yes    |
            | mj    | yes    |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional                         |
            | restriction | aj       | jp     | j        | no_right_turn @ (Mo-Fr 07:00-11:00,16:00-18:30) |

        When I route I should get
            | from | to | route          |
            | a    | p  | aj,jc,jc,jp,jp |
            | m    | p  | mj,jp,jp       |

    @no_turning @conditionals
    Scenario: Car - Multiple conditional restrictions applicable to same turn
        Given the extract extra arguments "--parse-conditional-restrictions"
                                            # time stamp for 10am on Tues, 02 May 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"

        Given the node map
            """
                j
                |
            k - l - m
                |
                n
            """

        And the ways
            | nodes |
            | kl    |
            | jl    |
            | ln    |
            | lm    |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional               |
            | restriction | kl       | lj     | l        | only_left_turn @ (Sa-Su 07:00-10:30)  |
            | restriction | kl       | ln     | l        | only_right_turn @ (Mo-Fr 07:00-10:30) |

        When I route I should get
            | from | to | route          |
            | k    | m  | kl,ln,ln,lm,lm |


    @restriction-way
    Scenario: Car - prohibit turn
        Given the extract extra arguments "--parse-conditional-restrictions"
        # 5pm Wed 02 May, 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400"

        Given the node map
            """
            c
            |
            |   f
            |   |
            b---e
            |   |
            a   d
            """

        And the ways
            | nodes |
            | ab    |
            | bc    |
            | be    |
            | de    |
            | ef    |

        And the relations
            | type        | way:from | way:via | way:to | restriction:conditional                         |
            | restriction | ab       | be      | de     | no_right_turn @ (Mo-Fr 07:00-11:00,16:00-18:30) |

        When I route I should get
            | from | to | route             | turns                                                               | locations   |
            | a    | d  | ab,be,ef,ef,de,de | depart,turn right,turn left,continue uturn,new name straight,arrive | a,b,e,f,e,d |
            | a    | f  | ab,be,ef,ef       | depart,turn right,turn left,arrive                                  | a,b,e,f     |
            | c    | d  | bc,be,de,de       | depart,turn left,turn right,arrive                                  | c,b,e,d     |
            | c    | f  | bc,be,ef,ef       | depart,turn left,turn left,arrive                                   | c,b,e,f     |

    # condition is off
    @restriction-way
    Scenario: Car - prohibit turn
        Given the extract extra arguments "--parse-conditional-restrictions"
        # time stamp for 12am on Tues, 02 May 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493726400"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493726400"

        Given the node map
            """
            c
            |
            |   f
            |   |
            b---e
            |   |
            a   d
            """

        And the ways
            | nodes |
            | ab    |
            | bc    |
            | be    |
            | de    |
            | ef    |

        And the relations
            | type        | way:from | way:via | way:to | restriction:conditional                         |
            | restriction | ab       | be      | de     | no_right_turn @ (Mo-Fr 07:00-11:00,16:00-18:30) |

        When I route I should get
            | from | to | route       |
            | a    | d  | ab,be,de,de |
            | a    | f  | ab,be,ef,ef |
            | c    | d  | bc,be,de,de |
            | c    | f  | bc,be,ef,ef |

    # https://www.openstreetmap.org/#map=18/38.91099/-77.00888
    @no_turning @conditionals
    Scenario: Car - DC North capitol situation, two on one off
        Given the extract extra arguments "--parse-conditional-restrictions"
        # 9pm Wed 02 May, 2017 UTC, 5pm EDT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493845200"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493845200"

        #    """
        #      a h
        #   d
        #      b g
        #           e
        #      c f
        #    """
        Given the node locations
            | node | lat     | lon      |
            | a    | 38.91124 | -77.00909 |
            | b    | 38.91080 | -77.00909 |
            | c    | 38.91038 | -77.00909 |
            | d    | 38.91105 | -77.00967 |
            | e    | 38.91037 | -77.00807 |
            | f    | 38.91036 | -77.00899 |
            | g    | 38.91076 | -77.00901 |
            | h    | 38.91124 | -77.00900 |

        And the ways
            | nodes | oneway | name       |
            | ab    | yes    | cap south  |
            | bc    | yes    | cap south  |
            | fg    | yes    | cap north  |
            | gh    | yes    | cap north  |
            | db    | no     | florida nw |
            | bg    | no     | florida    |
            | ge    | no     | florida ne |

        And the relations
            | type        | way:from  | way:to  | node:via | restriction:conditional                        |
            | restriction | ab        | bg      | b        | no_left_turn @ (Mo-Fr 07:00-09:30,16:00-18:30) |
            | restriction | fg        | bg      | g        | no_left_turn @ (Mo-Fr 06:00-10:00)             |
            | restriction | bg        | bc      | b        | no_left_turn @ (Mo-Fr 07:00-09:30,16:00-18:30) |

        When I route I should get
            | from | to | route                                      | turns                                       |
            | a    | e  | cap south,florida nw,florida nw,florida ne | depart,turn right,continue uturn,arrive     |
            | f    | d  | cap north,florida nw,florida nw            | depart,turn left,arrive                     |
            | e    | c  | florida ne,florida nw,cap south,cap south  | depart,continue uturn,turn right,arrive     |

    @no_turning @conditionals
    Scenario: Car - DC North capitol situation, one on two off
        Given the extract extra arguments "--parse-conditional-restrictions"
        # 10:30am utc, wed, 6:30am est
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493807400"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493807400"

        #    """
        #      a h
        #   d
        #      b g
        #           e
        #      c f
        #    """
        Given the node locations
            | node | lat     | lon      |
            | a    | 38.91124 | -77.00909 |
            | b    | 38.91080 | -77.00909 |
            | c    | 38.91038 | -77.00909 |
            | d    | 38.91105 | -77.00967 |
            | e    | 38.91037 | -77.00807 |
            | f    | 38.91036 | -77.00899 |
            | g    | 38.91076 | -77.00901 |
            | h    | 38.91124 | -77.00900 |

        And the ways
            | nodes | oneway | name       |
            | ab    | yes    | cap south  |
            | bc    | yes    | cap south  |
            | fg    | yes    | cap north  |
            | gh    | yes    | cap north  |
            | db    | no     | florida nw |
            | bg    | no     | florida    |
            | ge    | no     | florida ne |

        And the relations
            | type        | way:from  | way:to  | node:via | restriction:conditional                        |
            | restriction | ab        | bg      | b        | no_left_turn @ (Mo-Fr 07:00-09:30,16:00-18:30) |
            | restriction | fg        | bg      | g        | no_left_turn @ (Mo-Fr 06:00-10:00)             |
            | restriction | bg        | bc      | b        | no_left_turn @ (Mo-Fr 07:00-09:30,16:00-18:30) |

        When I route I should get
            | from | to | route                                      | turns                                         |
            | a    | e  | cap south,florida ne,florida ne            | depart,turn left,arrive                       |
            | f    | d  | cap north,florida ne,florida ne,florida nw | depart,turn sharp right,continue uturn,arrive |
            | e    | c  | florida ne,cap south,cap south             | depart,turn left,arrive                       |

    @only_turning @conditionals
    Scenario: Car - Restriction is always off when point not found in timezone files
        # same test as the following one, but given a different time zone file
        Given the extract extra arguments "--parse-conditional-restrictions"
        # 9am UTC, 10am BST
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493802000"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493802000"

        #    """
        #     a
        #          e
        #      b
        #   d
        #       c
        #    """
        Given the node locations
            | node | lat     | lon     |
            | a    | 51.5250 | -0.1166 |
            | b    | 51.5243 | -0.1159 |
            | c    | 51.5238 | -0.1152 |
            | d    | 51.5241 | -0.1167 |
            | e    | 51.5247 | -0.1153 |

        And the ways
            | nodes | name  |
            | ab    | albic |
            | bc    | albic |
            | db    | dobe  |
            | be    | dobe  |

        And the relations
            | type        | way:from  | way:to  | node:via | restriction:conditional               |
            | restriction | ab        | be      | b        | only_left_turn @ (Mo-Fr 07:00-11:00)  |

        When I route I should get
            | from | to | route           | turns                   |
            | a    | c  | albic,albic     | depart,arrive           |
            | a    | e  | albic,dobe,dobe | depart,turn left,arrive |

    @only_turning @conditionals
    Scenario: Car - Somewhere in london, the UK, GMT timezone
        Given the extract extra arguments "--parse-conditional-restrictions"
        # 9am UTC, 10am BST
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/london.geojson --parse-conditionals-from-now=1493802000"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/london.geojson --parse-conditionals-from-now=1493802000"

        #    """
        #     a
        #          e
        #      b
        #   d
        #       c
        #    """
        Given the node locations
            | node | lat     | lon     |
            | a    | 51.5250 | -0.1166 |
            | b    | 51.5243 | -0.1159 |
            | c    | 51.5238 | -0.1152 |
            | d    | 51.5241 | -0.1167 |
            | e    | 51.5247 | -0.1153 |

        And the ways
            | nodes | name  |
            | ab    | albic |
            | bc    | albic |
            | db    | dobe |
            | be    | dobe |

        And the relations
            | type        | way:from  | way:to  | node:via | restriction:conditional               |
            | restriction | ab        | be      | b        | only_left_turn @ (Mo-Fr 07:00-11:00)  |

        When I route I should get
            | from | to | route                       | turns                                            |
            | a    | c  | albic,dobe,dobe,albic,albic | depart,turn left,continue uturn,turn left,arrive |
            | a    | e  | albic,dobe,dobe             | depart,turn left,arrive                          |

    @only_turning @conditionals
    Scenario: Car - Somewhere in London, the UK, GMT timezone
        Given the extract extra arguments "--parse-conditional-restrictions"
        # 9am UTC, 10am BST
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/london.geojson --parse-conditionals-from-now=1493802000"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/london.geojson --parse-conditionals-from-now=1493802000"

        #    """
        #     a
        #          e
        #      b
        #   d
        #       c
        #    """
        Given the node locations
            | node | lat     | lon     |
            | a    | 51.5250 | -0.1166 |
            | b    | 51.5243 | -0.1159 |
            | c    | 51.5238 | -0.1152 |
            | d    | 51.5241 | -0.1167 |
            | e    | 51.5247 | -0.1153 |

        And the ways
            | nodes | name  |
            | ab    | albic |
            | bc    | albic |
            | db    | dobe |
            | be    | dobe |

        And the relations
            | type        | way:from  | way:to  | node:via | restriction:conditional               |
            | restriction | ab        | be      | b        | only_left_turn @ (Mo-Fr 07:00-11:00)  |

        When I route I should get
            | from | to | route                       | turns                                            |
            | a    | c  | albic,dobe,dobe,albic,albic | depart,turn left,continue uturn,turn left,arrive |
            | a    | e  | albic,dobe,dobe             | depart,turn left,arrive                          |

    @no_turning @conditionals @restriction-way
    Scenario: Car - Conditional restriction with multiple time windows
        Given the extract extra arguments "--parse-conditional-restrictions"
        # 5pm Wed 02 May, 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400"

        Given the node map
            """
            a   f
            |   |
            b - e - h
            |   |   |
            c   d - g
                  1
            """

        And the ways
            | nodes |
            | ab    |
            | bc    |
            | de    |
            | ef    |
            | be    |
            | eh    |
            | gh    |
            | dg    |

        And the relations
            | type        | way:from | way:via | way:to | restriction:conditional                    |
            | restriction | ab       | be      | ef     | no_uturn @ (Mo-Fr 07:00-11:00,16:00-18:30) |

        And the relations
            | type        | way:from | way:to | node:via | restriction:conditional                    |
            | restriction | ed       | dg     | d        | no_uturn @ (Mo-Fr 07:00-11:00,16:00-18:30) |

        When I route I should get
            | from | to | route             |
            | a    | f  | ab,bc,bc,be,ef,ef |
            | f    | 1  | ef,eh,gh,dg,dg    |

    @restriction-way @overlap
    Scenario: Car - prohibit turn
        Given the extract extra arguments "--parse-conditional-restrictions"
        # 5pm Wed 02 May, 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400"

        Given the node map
            """
            c
            |
            |   f
            |   |
            b---e
            |   |
            a   d
            """

        And the ways
            | nodes |
            | ab    |
            | bc    |
            | be    |
            | de    |
            | ef    |

        And the relations
            | type        | way:from | way:via | way:to | restriction:conditional             |
            | restriction | ab       | be      | de     | no_right_turn @ (Mo-Fr 07:00-11:00) |

        And the relations
            | type        | way:from | way:via | way:to | restriction   |
            | restriction | ab       | be      | de     | no_right_turn |

        # condition is off, but the general restriction should take precedence
        When I route I should get
            | from | to | route             | turns                                                               | locations   |
            | a    | d  | ab,be,ef,ef,de,de | depart,turn right,turn left,continue uturn,new name straight,arrive | a,b,e,f,e,d |
            | a    | f  | ab,be,ef,ef       | depart,turn right,turn left,arrive                                  | a,b,e,f     |
            | c    | d  | bc,be,de,de       | depart,turn left,turn right,arrive                                  | c,b,e,d     |
            | c    | f  | bc,be,ef,ef       | depart,turn left,turn left,arrive                                   | c,b,e,f     |

    @restriction-way @overlap
    Scenario: Car - prohibit turn
        Given the extract extra arguments "--parse-conditional-restrictions"
        # 5pm Wed 02 May, 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400"

        Given the node map
            """
            c
            |
            |   f
            |   |
            b---e
            |   |
            |   d
            |
            a
            """

        And the ways
            | nodes |
            | ab    |
            | bc    |
            | be    |
            | de    |
            | ef    |

        And the relations
            | type        | way:from | way:via | way:to | restriction:conditional             |
            | restriction | ab       | be      | de     | no_right_turn @ (Mo-Fr 07:00-11:00) |

        And the relations
            | type        | way:from | node:via | way:to | restriction:conditional             |
            | restriction | be       | e        | de     | no_right_turn @ (Mo-Fr 16:00-18:00) |

        # way restriction is off, node-restriction is on
        When I route I should get
            | from | to | route             | turns                                                               | locations   |
            | a    | d  | ab,be,ef,ef,de,de | depart,turn right,turn left,continue uturn,new name straight,arrive | a,b,e,f,e,d |
            | a    | f  | ab,be,ef,ef       | depart,turn right,turn left,arrive                                  | a,b,e,f     |
            | c    | d  | bc,be,ef,ef,de,de | depart,turn left,turn left,continue uturn,new name straight,arrive  | c,b,e,f,e,d |
            | c    | f  | bc,be,ef,ef       | depart,turn left,turn left,arrive                                   | c,b,e,f     |

    @restriction-way @overlap
    Scenario: Car - prohibit turn
        Given the extract extra arguments "--parse-conditional-restrictions"
        # 5pm Wed 02 May, 2017 GMT
        Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400"
        Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400"

        Given the node map
            """
            c
            |
            |   f
            |   |
            b---e
            |   |
            |   d
            |
            a
            """

        And the ways
            | nodes |
            | ab    |
            | bc    |
            | be    |
            | de    |
            | ef    |

        And the relations
            | type        | way:from | way:via | way:to | restriction:conditional             |
            | restriction | ab       | be      | de     | no_right_turn @ (Mo-Fr 16:00-18:00) |

        And the relations
            | type        | way:from | node:via | way:to | restriction:conditional             |
            | restriction | be       | e        | de     | no_right_turn @ (Mo-Fr 07:00-11:00) |

        # node restriction is off, way restriction is on
        When I route I should get
            | from | to | route             | turns                                                               | locations   |
            | a    | d  | ab,be,ef,ef,de,de | depart,turn right,turn left,continue uturn,new name straight,arrive | a,b,e,f,e,d |
            | a    | f  | ab,be,ef,ef       | depart,turn right,turn left,arrive                                  | a,b,e,f     |
            | c    | d  | bc,be,de,de       | depart,turn left,turn right,arrive                                  | c,b,e,d     |
            | c    | f  | bc,be,ef,ef       | depart,turn left,turn left,arrive                                   | c,b,e,f     |
