def test_building_scenariooutline_scenarios(mocker):
    """
    Test building Scenarios from a Scenario Outline Example
    """
    # given
    scenario_outline = ScenarioOutline(1,
                                       'Scenario Outline',
                                       'Examples',
                                       'I am a Scenario Outline',
                                       'foo.feature',
                                       1,
                                       parent=None,
                                       tags=None,
                                       preconditions=None,
                                       background=None)
    # add steps
    scenario_outline.steps.extend([
        mocker.MagicMock(sentence='Given I have <foo>', path='foo.feature'),
        mocker.MagicMock(sentence='And I have <bar>', path='foo.feature'),
        mocker.MagicMock(sentence='When I add those', path='foo.feature')
    ])
    # add examples
    scenario_outline.examples_header = ['foo', 'bar']
    scenario_outline.examples = [
        # row 0
        ScenarioOutline.Example(['1', '2'], 'foo.feature', 1),
        # row 3
        ScenarioOutline.Example(['3', '4'], 'foo.feature', 2),
    ]

    # when - build the scenarios
    scenario_outline.build_scenarios()

    # then - expect 2 built Scenarios
    assert len(scenario_outline.scenarios) == 2
    # then - expect that Scenarios are of type ExampleScenario
    assert all(
        isinstance(x, ExampleScenario) for x in scenario_outline.scenarios)
    # then - expect correct Example Scenario sentences
    assert scenario_outline.scenarios[
        0].sentence == 'I am a Scenario Outline - row 0'
    assert scenario_outline.scenarios[
        1].sentence == 'I am a Scenario Outline - row 1'
    # then - expect correctly replaced Step sentences
    assert scenario_outline.scenarios[0].steps[0].sentence == 'Given I have 1'
    assert scenario_outline.scenarios[0].steps[1].sentence == 'And I have 2'
    assert scenario_outline.scenarios[0].steps[
        2].sentence == 'When I add those'
    assert scenario_outline.scenarios[1].steps[0].sentence == 'Given I have 3'
    assert scenario_outline.scenarios[1].steps[1].sentence == 'And I have 4'
    assert scenario_outline.scenarios[1].steps[
        2].sentence == 'When I add those'
def test_building_scenariooutline_scenarios(mocker):
    """
    Test building Scenarios from a Scenario Outline Example
    """
    # given
    scenario_outline = ScenarioOutline(
        1,
        "Scenario Outline",
        "Examples",
        "I am a Scenario Outline",
        "foo.feature",
        1,
        parent=None,
        tags=None,
        preconditions=None,
        background=None,
    )
    # add steps
    scenario_outline.steps.extend(
        [
            mocker.MagicMock(sentence="Given I have <foo>", path="foo.feature"),
            mocker.MagicMock(sentence="And I have <bar>", path="foo.feature"),
            mocker.MagicMock(sentence="When I add those", path="foo.feature"),
        ]
    )
    # add examples
    scenario_outline.examples_header = ["foo", "bar"]
    scenario_outline.examples = [
        # row 0
        ScenarioOutline.Example(["1", "2"], "foo.feature", 1),
        # row 3
        ScenarioOutline.Example(["3", "4"], "foo.feature", 2),
    ]

    # when - build the scenarios
    scenario_outline.build_scenarios()

    # then - expect 2 built Scenarios
    assert len(scenario_outline.scenarios) == 2
    # then - expect that Scenarios are of type ExampleScenario
    assert all(isinstance(x, ExampleScenario) for x in scenario_outline.scenarios)
    # then - expect correct Example Scenario sentences
    assert scenario_outline.scenarios[0].sentence == "I am a Scenario Outline - row 0"
    assert scenario_outline.scenarios[1].sentence == "I am a Scenario Outline - row 1"
    # then - expect correctly replaced Step sentences
    assert scenario_outline.scenarios[0].steps[0].sentence == "Given I have 1"
    assert scenario_outline.scenarios[0].steps[1].sentence == "And I have 2"
    assert scenario_outline.scenarios[0].steps[2].sentence == "When I add those"
    assert scenario_outline.scenarios[1].steps[0].sentence == "Given I have 3"
    assert scenario_outline.scenarios[1].steps[1].sentence == "And I have 4"
    assert scenario_outline.scenarios[1].steps[2].sentence == "When I add those"
def test_building_scenariooutline_scenarios_with_background(mocker):
    """
    Test building Scenarios from a Scenario Outline Example including a Background
    """
    # given
    background = Background(
        "Background", "I am a Background", "foo.feature", 1, parent=None
    )
    # add some Steps
    background.steps.extend(
        [
            Step(1, "Foo", "foo.feature", 2, background, False),
            Step(2, "Foo", "foo.feature", 3, background, False),
        ]
    )
    scenario_outline = ScenarioOutline(
        1,
        "Scenario Outline",
        "Examples",
        "I am a Scenario Outline",
        "foo.feature",
        1,
        parent=None,
        tags=None,
        preconditions=None,
        background=background,
    )
    # add steps
    scenario_outline.steps.extend(
        [
            mocker.MagicMock(sentence="Given I have <foo>", path="foo.feature"),
            mocker.MagicMock(sentence="And I have <bar>", path="foo.feature"),
            mocker.MagicMock(sentence="When I add those", path="foo.feature"),
        ]
    )
    # add examples
    scenario_outline.examples_header = ["foo", "bar"]
    scenario_outline.examples = [
        # row 0
        ScenarioOutline.Example(["1", "2"], "foo.feature", 1),
        # row 3
        ScenarioOutline.Example(["3", "4"], "foo.feature", 2),
    ]

    # when - build the scenarios
    scenario_outline.build_scenarios()

    # then - expect ExampleScenarios to have background copy assigned
    assert scenario_outline.scenarios[0].background.sentence == "I am a Background"
    assert scenario_outline.scenarios[1].background.sentence == "I am a Background"
def test_building_scenariooutline_scenarios_with_background(mocker):
    """
    Test building Scenarios from a Scenario Outline Example including a Background
    """
    # given
    background = Background('Background',
                            'I am a Background',
                            'foo.feature',
                            1,
                            parent=None)
    # add some Steps
    background.steps.extend([
        Step(1, 'Foo', 'foo.feature', 2, background, False),
        Step(2, 'Foo', 'foo.feature', 3, background, False)
    ])
    scenario_outline = ScenarioOutline(1,
                                       'Scenario Outline',
                                       'Examples',
                                       'I am a Scenario Outline',
                                       'foo.feature',
                                       1,
                                       parent=None,
                                       tags=None,
                                       preconditions=None,
                                       background=background)
    # add steps
    scenario_outline.steps.extend([
        mocker.MagicMock(sentence='Given I have <foo>', path='foo.feature'),
        mocker.MagicMock(sentence='And I have <bar>', path='foo.feature'),
        mocker.MagicMock(sentence='When I add those', path='foo.feature')
    ])
    # add examples
    scenario_outline.examples_header = ['foo', 'bar']
    scenario_outline.examples = [
        # row 0
        ScenarioOutline.Example(['1', '2'], 'foo.feature', 1),
        # row 3
        ScenarioOutline.Example(['3', '4'], 'foo.feature', 2),
    ]

    # when - build the scenarios
    scenario_outline.build_scenarios()

    # then - expect ExampleScenarios to have background copy assigned
    assert scenario_outline.scenarios[
        0].background.sentence == 'I am a Background'
    assert scenario_outline.scenarios[
        1].background.sentence == 'I am a Background'