1
1
mirror of https://github.com/dbcli/pgcli.git synced 2024-10-06 02:07:53 +03:00
pgcli/tests/test_smart_completion.py
2015-01-02 00:04:01 -08:00

188 lines
6.5 KiB
Python

import pytest
from prompt_toolkit.completion import Completion
from prompt_toolkit.document import Document
tables = {
'users': ['id', 'email', 'first_name', 'last_name'],
'orders': ['id', 'ordered_date', 'status']
}
@pytest.fixture
def completer():
import pgcli.pgcompleter as pgcompleter
comp = pgcompleter.PGCompleter(smart_completion=True)
comp.extend_table_names(tables.keys())
for t in tables:
comp.extend_column_names(t, tables[t])
return comp
@pytest.fixture
def complete_event():
from mock import Mock
return Mock()
def test_empty_string_completion(completer, complete_event):
text = ''
position = 0
result = set(
completer.get_completions(
Document(text=text, cursor_position=position),
complete_event))
assert set(map(Completion, completer.keywords)) == result
def test_select_keyword_completion(completer, complete_event):
text = 'SEL'
position = len('SEL')
result = completer.get_completions(
Document(text=text, cursor_position=position),
complete_event)
assert set(result) == set([Completion(text='SELECT', start_position=-3)])
def test_function_name_completion(completer, complete_event):
text = 'SELECT MA'
position = len('SELECT MA')
result = completer.get_completions(
Document(text=text, cursor_position=position),
complete_event)
assert set(result) == set([Completion(text='MAX', start_position=-2)])
def test_suggested_column_names(completer, complete_event):
"""
Suggest column and function names when selecting from table
:param completer:
:param complete_event:
:return:
"""
text = 'SELECT from users'
position = len('SELECT ')
result = set(completer.get_completions(
Document(text=text, cursor_position=position),
complete_event))
assert set(result) == set([
Completion(text='*', start_position=0),
Completion(text='id', start_position=0),
Completion(text='email', start_position=0),
Completion(text='first_name', start_position=0),
Completion(text='last_name', start_position=0)] +
list(map(Completion, completer.functions)))
def test_suggested_column_names_in_function(completer, complete_event):
"""
Suggest column and function names when selecting multiple
columns from table
:param completer:
:param complete_event:
:return:
"""
text = 'SELECT MAX( from users'
position = len('SELECT MAX(')
result = completer.get_completions(
Document(text=text, cursor_position=position),
complete_event)
assert set(result) == set([
Completion(text='*', start_position=0),
Completion(text='id', start_position=0),
Completion(text='email', start_position=0),
Completion(text='first_name', start_position=0),
Completion(text='last_name', start_position=0)])
def test_suggested_column_names_with_dot(completer, complete_event):
"""
Suggest column names on table name and dot
:param completer:
:param complete_event:
:return:
"""
text = 'SELECT users. from users'
position = len('SELECT users.')
result = set(completer.get_completions(
Document(text=text, cursor_position=position),
complete_event))
assert set(result) == set([
Completion(text='*', start_position=0),
Completion(text='id', start_position=0),
Completion(text='email', start_position=0),
Completion(text='first_name', start_position=0),
Completion(text='last_name', start_position=0)])
def test_suggested_column_names_with_alias(completer, complete_event):
"""
Suggest column names on table alias and dot
:param completer:
:param complete_event:
:return:
"""
text = 'SELECT u. from users u'
position = len('SELECT u.')
result = set(completer.get_completions(
Document(text=text, cursor_position=position),
complete_event))
assert set(result) == set([
Completion(text='*', start_position=0),
Completion(text='id', start_position=0),
Completion(text='email', start_position=0),
Completion(text='first_name', start_position=0),
Completion(text='last_name', start_position=0)])
def test_suggested_multiple_column_names(completer, complete_event):
"""
Suggest column and function names when selecting multiple
columns from table
:param completer:
:param complete_event:
:return:
"""
text = 'SELECT id, from users u'
position = len('SELECT id, ')
result = set(completer.get_completions(
Document(text=text, cursor_position=position),
complete_event))
assert set(result) == set([
Completion(text='*', start_position=0),
Completion(text='id', start_position=0),
Completion(text='email', start_position=0),
Completion(text='first_name', start_position=0),
Completion(text='last_name', start_position=0)] +
list(map(Completion, completer.functions)))
def test_suggested_multiple_column_names_with_alias(completer, complete_event):
"""
Suggest column names on table alias and dot
when selecting multiple columns from table
:param completer:
:param complete_event:
:return:
"""
text = 'SELECT u.id, u. from users u'
position = len('SELECT u.id, u.')
result = set(completer.get_completions(
Document(text=text, cursor_position=position),
complete_event))
assert set(result) == set([
Completion(text='*', start_position=0),
Completion(text='id', start_position=0),
Completion(text='email', start_position=0),
Completion(text='first_name', start_position=0),
Completion(text='last_name', start_position=0)])
def test_suggested_multiple_column_names_with_dot(completer, complete_event):
"""
Suggest column names on table names and dot
when selecting multiple columns from table
:param completer:
:param complete_event:
:return:
"""
text = 'SELECT users.id, users. from users u'
position = len('SELECT users.id, users.')
result = set(completer.get_completions(
Document(text=text, cursor_position=position),
complete_event))
assert set(result) == set([
Completion(text='*', start_position=0),
Completion(text='id', start_position=0),
Completion(text='email', start_position=0),
Completion(text='first_name', start_position=0),
Completion(text='last_name', start_position=0)])