"""Steps for behavioral style tests are defined in this module.

Each step is defined by the string decorating it. This string is used
to call the step in "*.feature" file.

"""

from behave import when, then
from textwrap import dedent
import wrappers


@when("we prepare the test data")
def step_prepare_data(context):
    """Create table, insert a record."""
    context.cli.sendline("drop table if exists a;")
    wrappers.expect_exact(
        context,
        "You're about to run a destructive command.\r\nDo you want to proceed? [y/N]:",
        timeout=2,
    )
    context.cli.sendline("y")

    wrappers.wait_prompt(context)
    context.cli.sendline("create table a(x integer, y real, z numeric(10, 4));")
    wrappers.expect_pager(context, "CREATE TABLE\r\n", timeout=2)
    context.cli.sendline("""insert into a(x, y, z) values(1, 1.0, 1.0);""")
    wrappers.expect_pager(context, "INSERT 0 1\r\n", timeout=2)


@when("we set expanded {mode}")
def step_set_expanded(context, mode):
    """Set expanded to mode."""
    context.cli.sendline("\\" + f"x {mode}")
    wrappers.expect_exact(context, "Expanded display is", timeout=2)
    wrappers.wait_prompt(context)


@then("we see {which} data selected")
def step_see_data(context, which):
    """Select data from expanded test table."""
    if which == "expanded":
        wrappers.expect_pager(
            context,
            dedent(
                """\
                -[ RECORD 1 ]-------------------------\r
                x | 1\r
                y | 1.0\r
                z | 1.0000\r
                SELECT 1\r
            """
            ),
            timeout=1,
        )
    else:
        wrappers.expect_pager(
            context,
            dedent(
                """\
                +---+-----+--------+\r
                | x | y   | z      |\r
                |---+-----+--------|\r
                | 1 | 1.0 | 1.0000 |\r
                +---+-----+--------+\r
                SELECT 1\r
            """
            ),
            timeout=1,
        )
