def test_create_table():
    table = Table()
    table.add_column(Column("email", COLUMN_TYPE_TEXT, None, is_key=True))
    table.add_column(Column("firstname", COLUMN_TYPE_TEXT))
    table.add_column(Column("lastname", COLUMN_TYPE_TEXT))
    table.add_column(Column("is_blue", COLUMN_TYPE_YESNO))

    contact = Contact(from_table=table)
    contact.email = "*****@*****.**"
    contact.firstname = "John"
    contact.lastname = "Doe"
    contact.is_blue = True

    key_column = next(iter(table.key_columns), None)
    assert key_column == "email"

    assert len(table.column_names) == 4
def test_table_definition():
    table = Table()

    table.add_column(Column("email", COLUMN_TYPE_TEXT, None, is_key=True))
    assert table.has_column("email") is True
    assert "email" in table.key_columns

    table.add_column(Column("firstname", COLUMN_TYPE_TEXT))
    assert table.has_column("firstname")
    assert not "firstname" in table.key_columns

    table.add_column(Column("lastname", COLUMN_TYPE_TEXT))
    assert table.has_column("lastname")
    assert not "lastname" in table.key_columns

    assert len(table.column_names) == 3

    table.drop_column("firstname")

    assert len(table.column_names) == 2

    # We cannot delete key columns
    with pytest.raises(Exception) as e:
        table.drop_column("email")