@routing @testbot @mode
Feature: Testbot - Travel mode

# testbot modes:
# 1 driving
# 2 route
# 3 river downstream
# 4 river upstream
# 5 steps down
# 6 steps up

    Background:
       Given the profile "testbot"
       Given a grid size of 200 meters

    Scenario: Testbot - Always announce mode change
        Given the node map
            """
            a b c d
            """

        And the ways
            | nodes | highway     | name |
            | ab    | residential | foo  |
            | bc    | river       | foo  |
            | cd    | residential | foo  |

        When I route I should get
            | from | to | route           | modes                                    |
            | a    | d  | foo,foo,foo,foo | driving,river downstream,driving,driving |
            | b    | d  | foo,foo,foo     | river downstream,driving,driving         |

    Scenario: Testbot - Compressed Modes
        Given the node map
            """
            a b c d e f g
            """

        And the ways
            | nodes | highway     | name   |
            | abc   | residential | road   |
            | cde   | river       | liquid |
            | efg   | residential | solid  |

        When I route I should get
            | from | to | route                    | modes                                    |
            | a    | g  | road,liquid,solid,solid  | driving,river downstream,driving,driving |
            | c    | g  | liquid,solid,solid       | river downstream,driving,driving         |

    Scenario: Testbot - Modes in each direction, different forward/backward speeds
        Given the node map
            """
              0 1
            a     b
            """

        And the ways
            | nodes | highway | oneway |
            | ab    | river   |        |

        When I route I should get
            | from | to | route | modes                             |
            | a    | 0  | ab,ab | river downstream,river downstream |
            | a    | b  | ab,ab | river downstream,river downstream |
            | 0    | 1  | ab,ab | river downstream,river downstream |
            | 0    | b  | ab,ab | river downstream,river downstream |
            | b    | 1  | ab,ab | river upstream,river upstream     |
            | b    | a  | ab,ab | river upstream,river upstream     |
            | 1    | 0  | ab,ab | river upstream,river upstream     |
            | 1    | a  | ab,ab | river upstream,river upstream     |

    Scenario: Testbot - Modes in each direction, same forward/backward speeds
        Given the node map
            """
              0 1
            a     b
            """

        And the ways
            | nodes | highway |
            | ab    | steps   |

        When I route I should get
            | from | to | route | modes                 | time     |
            | 0    | 1  | ab,ab | steps down,steps down | 120s +-1 |
            | 1    | 0  | ab,ab | steps up,steps up     | 120s +-1 |

    @oneway
    Scenario: Testbot - Modes for oneway, different forward/backward speeds
        Given the node map
            """
            a b
            """

        And the ways
            | nodes | highway | oneway |
            | ab    | river   | yes    |

        When I route I should get
            | from | to | route | modes                             |
            | a    | b  | ab,ab | river downstream,river downstream |
            | b    | a  |       |                                   |

    @oneway
    Scenario: Testbot - Modes for oneway, same forward/backward speeds
        Given the node map
            """
            a b
            """

        And the ways
            | nodes | highway | oneway |
            | ab    | steps   | yes    |

        When I route I should get
            | from | to | route | modes                 |
            | a    | b  | ab,ab | steps down,steps down |
            | b    | a  |       |                       |

    @oneway
    Scenario: Testbot - Modes for reverse oneway, different forward/backward speeds
        Given the node map
            """
            a b
            """

        And the ways
            | nodes | highway | oneway |
            | ab    | river   | -1     |

        When I route I should get
            | from | to | route | modes                         |
            | a    | b  |       |                               |
            | b    | a  | ab,ab | river upstream,river upstream |

    @oneway
    Scenario: Testbot - Modes for reverse oneway, same forward/backward speeds
        Given the node map
            """
            a b
            """

        And the ways
            | nodes | highway | oneway |
            | ab    | steps   | -1     |

        When I route I should get
            | from | to | route | modes             |
            | a    | b  |       |                   |
            | b    | a  | ab,ab | steps up,steps up |

    @via
    Scenario: Testbot - Mode should be set at via points
        Given the node map
            """
            a 1 b
            """

        And the ways
            | nodes | highway |
            | ab    | river   |

        When I route I should get
            | waypoints | route       | modes                                                               |
            | a,1,b     | ab,ab,ab,ab | river downstream,river downstream,river downstream,river downstream |
            | b,1,a     | ab,ab,ab,ab | river upstream,river upstream,river upstream,river upstream         |

    Scenario: Testbot - Starting at a tricky node
       Given the node map
            """
              a
                  b c
            """

       And the ways
            | nodes | highway |
            | ab    | river   |
            | bc    | primary |

       When I route I should get
            | from | to | route | modes                         |
            | b    | a  | ab,ab | river upstream,river upstream |

    Scenario: Testbot - Mode changes on straight way without name change
       Given the node map
            """
            a 1 b 2 c
            """

       And the ways
            | nodes | highway | name   |
            | ab    | primary | Avenue |
            | bc    | river   | Avenue |

       When I route I should get
            | from | to | route                | modes                                     |
            | a    | c  | Avenue,Avenue,Avenue | driving,river downstream,river downstream |
            | c    | a  | Avenue,Avenue,Avenue | river upstream,driving,driving            |
            | 1    | 2  | Avenue,Avenue,Avenue | driving,river downstream,river downstream |
            | 2    | 1  | Avenue,Avenue,Avenue | river upstream,driving,driving            |

    Scenario: Testbot - Mode for routes
       Given the node map
            """
            a b
              c d e f
            """

       And the ways
            | nodes | highway | route | duration |
            | ab    | primary |       |          |
            | bc    |         | ferry | 0:01     |
            | cd    | primary |       |          |
            | de    | primary |       |          |
            | ef    | primary |       |          |

       When I route I should get
            | from | to | route             | modes                                         |
            | a    | d  | ab,bc,cd,cd       | driving,route,driving,driving                 |
            | d    | a  | cd,bc,ab,ab       | driving,route,driving,driving                 |
            | c    | a  | bc,ab,ab          | route,driving,driving                         |
            | d    | b  | cd,bc,bc          | driving,route,route                           |
            | a    | c  | ab,bc,bc          | driving,route,route                           |
            | b    | d  | bc,cd,cd          | route,driving,driving                         |
            | a    | f  | ab,bc,cd,de,ef,ef | driving,route,driving,driving,driving,driving |

    Scenario: Testbot - Modes, triangle map
        Given the node map
            """
                        d
                      2
                    6   5
            a 0 b c
                    4   1
                      3
                        e
            """

       And the ways
            | nodes | highway | oneway |
            | abc   | primary |        |
            | cd    | primary | yes    |
            | ce    | river   |        |
            | de    | primary |        |

       When I route I should get
            | from | to | route            | modes                                          |
            | 0    | 1  | abc,ce,de,de     | driving,river downstream,driving,driving       |
            | 1    | 0  | de,ce,abc,abc    | driving,river upstream,driving,driving         |
            | 0    | 2  | abc,cd,cd        | driving,driving,driving                        |
            | 2    | 0  | cd,de,ce,abc,abc | driving,driving,river upstream,driving,driving |
            | 0    | 3  | abc,ce,ce        | driving,river downstream,river downstream      |
            | 3    | 0  | ce,abc,abc       | river upstream,driving,driving                 |
            | 4    | 3  | ce,ce            | river downstream,river downstream              |
            | 3    | 4  | ce,ce            | river upstream,river upstream                  |
            | 3    | 1  | ce,de,de         | river downstream,driving,driving               |
            | 1    | 3  | de,ce,ce         | driving,river upstream,river upstream          |
            | a    | e  | abc,ce,ce        | driving,river downstream,river downstream      |
            | e    | a  | ce,abc,abc       | river upstream,driving,driving                 |
            | a    | d  | abc,cd,cd        | driving,driving,driving                        |
            | d    | a  | de,ce,abc,abc    | driving,river upstream,driving,driving         |

    Scenario: Testbot - River in the middle
        Given the node map
            """
            a b c
                d
                e f g
            """

        And the ways
            | nodes | highway |
            | abc   | primary |
            | cde   | river   |
            | efg   | primary |

        When I route I should get
            | from | to | route           | modes                                    |
            | a    | g  | abc,cde,efg,efg | driving,river downstream,driving,driving |
            | b    | f  | abc,cde,efg,efg | driving,river downstream,driving,driving |
            | e    | c  | cde,cde         | river upstream,river upstream            |
            | e    | b  | cde,abc,abc     | river upstream,driving,driving           |
            | e    | a  | cde,abc,abc     | river upstream,driving,driving           |
            | c    | e  | cde,cde         | river downstream,river downstream        |
            | c    | f  | cde,efg,efg     | river downstream,driving,driving         |
            | c    | g  | cde,efg,efg     | river downstream,driving,driving         |