From a784c7a1582f7ca560bdcf577d025292e03767da Mon Sep 17 00:00:00 2001 From: koljonen Date: Sat, 18 Jun 2016 14:47:41 +0200 Subject: Consolidate common code in smart_completion tests --- tests/test_smart_completion_multiple_schemata.py | 256 ++++++++++------------- 1 file changed, 113 insertions(+), 143 deletions(-) (limited to 'tests/test_smart_completion_multiple_schemata.py') diff --git a/tests/test_smart_completion_multiple_schemata.py b/tests/test_smart_completion_multiple_schemata.py index b5ac0d3a..8b80d6fc 100644 --- a/tests/test_smart_completion_multiple_schemata.py +++ b/tests/test_smart_completion_multiple_schemata.py @@ -1,7 +1,13 @@ from __future__ import unicode_literals import pytest import itertools -from prompt_toolkit.completion import Completion +from metadata import (MetaData, alias, name_join, fk_join, join, + table, + function, + column, + schema, + datatype, + wildcard_expansion) from prompt_toolkit.document import Document from pgcli.packages.function_metadata import FunctionMetadata, ForeignKey @@ -38,46 +44,17 @@ metadata = { 'public': ['typ1', 'typ2'], 'custom': ['typ3', 'typ4'], }, - 'foreignkeys': [ + 'foreignkeys': { + 'custom': [ ('public', 'users', 'id', 'custom', 'shipments', 'user_id') - ], + ]}, } +testdata = MetaData(metadata) + @pytest.fixture def completer(): - - import pgcli.pgcompleter as pgcompleter - comp = pgcompleter.PGCompleter(smart_completion=True) - - schemata, tables, columns = [], [], [] - - for schema, tbls in metadata['tables'].items(): - schemata.append(schema) - - for table, cols in tbls.items(): - tables.append((schema, table)) - # Let all columns be text columns - columns.extend([(schema, table, col, 'text') for col in cols]) - - functions = [FunctionMetadata(schema, *func_meta) - for schema, funcs in metadata['functions'].items() - for func_meta in funcs] - - datatypes = [(schema, datatype) - for schema, datatypes in metadata['datatypes'].items() - for datatype in datatypes] - - foreignkeys = [ForeignKey(*fk) for fk in metadata['foreignkeys']] - - comp.extend_schemata(schemata) - comp.extend_relations(tables, kind='tables') - comp.extend_columns(columns, kind='tables') - comp.extend_functions(functions) - comp.extend_datatypes(datatypes) - comp.extend_foreignkeys(foreignkeys) - comp.set_search_path(['public']) - - return comp + return testdata.completer @pytest.fixture def complete_event(): @@ -90,14 +67,14 @@ def test_schema_or_visible_table_completion(completer, complete_event): result = completer.get_completions( Document(text=text, cursor_position=position), complete_event) assert set(result) == set([ - Completion(text='func1', start_position=0, display_meta='function'), - Completion(text='func2', start_position=0, display_meta='function'), - Completion(text='public', start_position=0, display_meta='schema'), - Completion(text='custom', start_position=0, display_meta='schema'), - Completion(text='"Custom"', start_position=0, display_meta='schema'), - Completion(text='users', start_position=0, display_meta='table'), - Completion(text='"select"', start_position=0, display_meta='table'), - Completion(text='orders', start_position=0, display_meta='table')]) + function('func1'), + function('func2'), + schema('public'), + schema('custom'), + schema('"Custom"'), + table('users'), + table('"select"'), + table('orders')]) @pytest.mark.parametrize('table', [ @@ -118,14 +95,14 @@ def test_suggested_column_names_from_shadowed_visible_table(completer, complete_ complete_event)) assert set(result) == set([ - Completion(text='id', start_position=0, display_meta='column'), - Completion(text='email', start_position=0, display_meta='column'), - Completion(text='first_name', start_position=0, display_meta='column'), - Completion(text='last_name', start_position=0, display_meta='column'), - Completion(text='func1', start_position=0, display_meta='function'), - Completion(text='func2', start_position=0, display_meta='function')] + - list(map(lambda f: Completion(f, display_meta='function'), completer.functions)) + - list(map(lambda x: Completion(x, display_meta='keyword'), completer.keywords)) + column('id'), + column('email'), + column('first_name'), + column('last_name'), + function('func1'), + function('func2')] + + list(testdata.builtin_functions() + + testdata.keywords()) ) def test_suggested_column_names_from_qualified_shadowed_table(completer, complete_event): @@ -135,12 +112,12 @@ def test_suggested_column_names_from_qualified_shadowed_table(completer, complet Document(text=text, cursor_position=position), complete_event)) assert set(result) == set([ - Completion(text='id', start_position=0, display_meta='column'), - Completion(text='phone_number', start_position=0, display_meta='column'), - Completion(text='func1', start_position=0, display_meta='function'), - Completion(text='func2', start_position=0, display_meta='function')] + - list(map(lambda f: Completion(f, display_meta='function'), completer.functions)) + - list(map(lambda x: Completion(x, display_meta='keyword'), completer.keywords)) + column('id'), + column('phone_number'), + function('func1'), + function('func2')] + + list(testdata.builtin_functions() + + testdata.keywords()) ) @pytest.mark.parametrize('text', [ @@ -155,10 +132,10 @@ def test_suggested_join_conditions(completer, complete_event, text): Document(text=text, cursor_position=position), complete_event)) assert set(result) == set([ - Completion(text='users', start_position=0, display_meta='table alias'), - Completion(text='shipments', start_position=0, display_meta='table alias'), - Completion(text='shipments.id = users.id', start_position=0, display_meta='name join'), - Completion(text='shipments.user_id = users.id', start_position=0, display_meta='fk join')]) + alias('users'), + alias('shipments'), + name_join('shipments.id = users.id'), + fk_join('shipments.user_id = users.id')]) @pytest.mark.parametrize(('query', 'tbl'), itertools.product(( 'SELECT * FROM public.{0} RIGHT OUTER JOIN ', @@ -172,17 +149,16 @@ def test_suggested_joins(completer, complete_event, query, tbl): result = set(completer.get_completions( Document(text=text, cursor_position=position), complete_event)) - join = 'custom.shipments ON shipments.user_id = {0}.id'.format(tbl) assert set(result) == set([ - Completion(text=join, start_position=0, display_meta='join'), - Completion(text='public', start_position=0, display_meta='schema'), - Completion(text='custom', start_position=0, display_meta='schema'), - Completion(text='"Custom"', start_position=0, display_meta='schema'), - Completion(text='orders', start_position=0, display_meta='table'), - Completion(text='users', start_position=0, display_meta='table'), - Completion(text='"select"', start_position=0, display_meta='table'), - Completion(text='func1', start_position=0, display_meta='function'), - Completion(text='func2', start_position=0, display_meta='function')]) + join('custom.shipments ON shipments.user_id = {0}.id'.format(tbl)), + schema('public'), + schema('custom'), + schema('"Custom"'), + table('orders'), + table('users'), + table('"select"'), + function('func1'), + function('func2')]) def test_suggested_column_names_from_schema_qualifed_table(completer, complete_event): """ @@ -196,13 +172,13 @@ def test_suggested_column_names_from_schema_qualifed_table(completer, complete_e result = set(completer.get_completions( Document(text=text, cursor_position=position), complete_event)) assert set(result) == set([ - Completion(text='id', start_position=0, display_meta='column'), - Completion(text='product_name', start_position=0, display_meta='column'), - Completion(text='price', start_position=0, display_meta='column'), - Completion(text='func1', start_position=0, display_meta='function'), - Completion(text='func2', start_position=0, display_meta='function')] + - list(map(lambda f: Completion(f, display_meta='function'), completer.functions)) + - list(map(lambda x: Completion(x, display_meta='keyword'), completer.keywords)) + column('id'), + column('product_name'), + column('price'), + function('func1'), + function('func2')] + + list(testdata.builtin_functions() + + testdata.keywords()) ) def test_suggested_column_names_in_function(completer, complete_event): @@ -219,9 +195,9 @@ def test_suggested_column_names_in_function(completer, complete_event): Document(text=text, cursor_position=position), complete_event) assert set(result) == set([ - Completion(text='id', start_position=0, display_meta='column'), - Completion(text='product_name', start_position=0, display_meta='column'), - Completion(text='price', start_position=0, display_meta='column')]) + column('id'), + column('product_name'), + column('price')]) @pytest.mark.parametrize('text', [ @@ -242,12 +218,12 @@ def test_suggested_table_names_with_schema_dot(completer, complete_event, result = completer.get_completions( Document(text=text, cursor_position=position), complete_event) assert set(result) == set([ - Completion(text='func3', start_position=start_pos, display_meta='function'), - Completion(text='users', start_position=start_pos, display_meta='table'), - Completion(text='"Users"', start_position=start_pos, display_meta='table'), - Completion(text='products', start_position=start_pos, display_meta='table'), - Completion(text='shipments', start_position=start_pos, display_meta='table'), - Completion(text='set_returning_func', start_position=start_pos, display_meta='function'), + function('func3', start_pos), + table('users', start_pos), + table('"Users"', start_pos), + table('products', start_pos), + table('shipments', start_pos), + function('set_returning_func', start_pos), ]) @pytest.mark.parametrize('text', [ @@ -266,8 +242,8 @@ def test_suggested_table_names_with_schema_dot2(completer, complete_event, result = completer.get_completions( Document(text=text, cursor_position=position), complete_event) assert set(result) == set([ - Completion(text='func4', start_position=start_pos, display_meta='function'), - Completion(text='projects', start_position=start_pos, display_meta='table') + function('func4', start_pos), + table('projects', start_pos) ]) def test_suggested_column_names_with_qualified_alias(completer, complete_event): @@ -283,9 +259,9 @@ def test_suggested_column_names_with_qualified_alias(completer, complete_event): Document(text=text, cursor_position=position), complete_event)) assert set(result) == set([ - Completion(text='id', start_position=0, display_meta='column'), - Completion(text='product_name', start_position=0, display_meta='column'), - Completion(text='price', start_position=0, display_meta='column')]) + column('id'), + column('product_name'), + column('price')]) def test_suggested_multiple_column_names(completer, complete_event): """ @@ -301,13 +277,13 @@ def test_suggested_multiple_column_names(completer, complete_event): Document(text=text, cursor_position=position), complete_event)) assert set(result) == set([ - Completion(text='id', start_position=0, display_meta='column'), - Completion(text='product_name', start_position=0, display_meta='column'), - Completion(text='price', start_position=0, display_meta='column'), - Completion(text='func1', start_position=0, display_meta='function'), - Completion(text='func2', start_position=0, display_meta='function')] + - list(map(lambda f: Completion(f, display_meta='function'), completer.functions)) + - list(map(lambda x: Completion(x, display_meta='keyword'), completer.keywords)) + column('id'), + column('product_name'), + column('price'), + function('func1'), + function('func2')] + + list(testdata.builtin_functions() + + testdata.keywords()) ) def test_suggested_multiple_column_names_with_alias(completer, complete_event): @@ -324,9 +300,9 @@ def test_suggested_multiple_column_names_with_alias(completer, complete_event): Document(text=text, cursor_position=position), complete_event)) assert set(result) == set([ - Completion(text='id', start_position=0, display_meta='column'), - Completion(text='product_name', start_position=0, display_meta='column'), - Completion(text='price', start_position=0, display_meta='column')]) + column('id'), + column('product_name'), + column('price')]) @pytest.mark.parametrize('text', [ 'SELECT x.id, y.product_name FROM custom.products x JOIN custom.products y ON ', @@ -338,11 +314,11 @@ def test_suggestions_after_on(completer, complete_event, text): Document(text=text, cursor_position=position), complete_event)) assert set(result) == set([ - Completion(text='x', start_position=0, display_meta='table alias'), - Completion(text='y', start_position=0, display_meta='table alias'), - Completion(text='y.price = x.price', start_position=0, display_meta='name join'), - Completion(text='y.product_name = x.product_name', start_position=0, display_meta='name join'), - Completion(text='y.id = x.id', start_position=0, display_meta='name join')]) + alias('x'), + alias('y'), + name_join('y.price = x.price'), + name_join('y.product_name = x.product_name'), + name_join('y.id = x.id')]) def test_suggested_aliases_after_on_right_side(completer, complete_event): text = 'SELECT x.id, y.product_name FROM custom.products x JOIN custom.products y ON x.id = ' @@ -351,8 +327,8 @@ def test_suggested_aliases_after_on_right_side(completer, complete_event): Document(text=text, cursor_position=position), complete_event)) assert set(result) == set([ - Completion(text='x', start_position=0, display_meta='table alias'), - Completion(text='y', start_position=0, display_meta='table alias')]) + alias('x'), + alias('y')]) def test_table_names_after_from(completer, complete_event): text = 'SELECT * FROM ' @@ -361,14 +337,14 @@ def test_table_names_after_from(completer, complete_event): Document(text=text, cursor_position=position), complete_event)) assert set(result) == set([ - Completion(text='func1', start_position=0, display_meta='function'), - Completion(text='func2', start_position=0, display_meta='function'), - Completion(text='public', start_position=0, display_meta='schema'), - Completion(text='custom', start_position=0, display_meta='schema'), - Completion(text='"Custom"', start_position=0, display_meta='schema'), - Completion(text='users', start_position=0, display_meta='table'), - Completion(text='orders', start_position=0, display_meta='table'), - Completion(text='"select"', start_position=0, display_meta='table'), + schema('public'), + schema('custom'), + schema('"Custom"'), + function('func1'), + function('func2'), + table('users'), + table('orders'), + table('"select"'), ]) def test_schema_qualified_function_name(completer, complete_event): @@ -377,8 +353,8 @@ def test_schema_qualified_function_name(completer, complete_event): result = set(completer.get_completions( Document(text=text, cursor_position=postion), complete_event)) assert result == set([ - Completion(text='func3', start_position=-len('func'), display_meta='function'), - Completion(text='set_returning_func', start_position=-len('func'), display_meta='function')]) + function('func3', -len('func')), + function('set_returning_func', -len('func'))]) @pytest.mark.parametrize('text', [ @@ -392,12 +368,12 @@ def test_schema_qualified_type_name(text, completer, complete_event): result = completer.get_completions( Document(text=text, cursor_position=pos), complete_event) assert set(result) == set([ - Completion(text='typ3', display_meta='datatype'), - Completion(text='typ4', display_meta='datatype'), - Completion(text='users', display_meta='table'), - Completion(text='"Users"', display_meta='table'), - Completion(text='products', display_meta='table'), - Completion(text='shipments', display_meta='table'), + datatype('typ3'), + datatype('typ4'), + table('users'), + table('"Users"'), + table('products'), + table('shipments'), ]) @@ -407,7 +383,7 @@ def test_suggest_columns_from_aliased_set_returning_function(completer, complete result = completer.get_completions(Document(text=sql, cursor_position=pos), complete_event) assert set(result) == set([ - Completion(text='x', start_position=0, display_meta='column')]) + column('x')]) @pytest.mark.parametrize('text', [ 'SELECT * FROM custom.set_returning_func()', @@ -421,8 +397,7 @@ def test_wildcard_column_expansion_with_function(completer, complete_event, text Document(text=text, cursor_position=pos), complete_event) col_list = 'x' - expected = [Completion(text=col_list, start_position=-1, - display='*', display_meta='columns')] + expected = [wildcard_expansion(col_list)] assert expected == completions @@ -435,8 +410,7 @@ def test_wildcard_column_expansion_with_alias_qualifier(completer, complete_even Document(text=sql, cursor_position=pos), complete_event) col_list = 'id, p.product_name, p.price' - expected = [Completion(text=col_list, start_position=-1, - display='*', display_meta='columns')] + expected = [wildcard_expansion(col_list)] assert expected == completions @@ -463,8 +437,7 @@ def test_wildcard_column_expansion_with_insert(completer, complete_event, text): completions = completer.get_completions( Document(text=text, cursor_position=pos), complete_event) - expected = [Completion(text='id, ordered_date, status', start_position=-1, - display='*', display_meta='columns')] + expected = [wildcard_expansion('id, ordered_date, status')] assert expected == completions def test_wildcard_column_expansion_with_table_qualifier(completer, complete_event): @@ -475,8 +448,7 @@ def test_wildcard_column_expansion_with_table_qualifier(completer, complete_even Document(text=sql, cursor_position=pos), complete_event) col_list = 'id, "select"."insert", "select"."ABC"' - expected = [Completion(text=col_list, start_position=-1, - display='*', display_meta='columns')] + expected = [wildcard_expansion(col_list)] assert expected == completions @@ -489,8 +461,7 @@ def test_wildcard_column_expansion_with_two_tables(completer, complete_event): cols = ('"select".id, "select"."insert", "select"."ABC", ' 'users.id, users.phone_number') - expected = [Completion(text=cols, start_position=-1, - display='*', display_meta='columns')] + expected = [wildcard_expansion(cols)] assert completions == expected @@ -502,8 +473,7 @@ def test_wildcard_column_expansion_with_two_tables_and_parent(completer, complet Document(text=sql, cursor_position=pos), complete_event) col_list = 'id, "select"."insert", "select"."ABC"' - expected = [Completion(text=col_list, start_position=-1, - display='*', display_meta='columns')] + expected = [wildcard_expansion(col_list)] assert expected == completions @@ -520,8 +490,8 @@ def test_suggest_columns_from_unquoted_table(completer, complete_event, text): result = completer.get_completions(Document(text=text, cursor_position=pos), complete_event) assert set(result) == set([ - Completion(text='id', start_position=0, display_meta='column'), - Completion(text='phone_number', start_position=0, display_meta='column')]) + column('id'), + column('phone_number')]) @pytest.mark.parametrize('text', [ 'SELECT U. FROM custom."Users" U', @@ -532,5 +502,5 @@ def test_suggest_columns_from_quoted_table(completer, complete_event, text): result = completer.get_completions(Document(text=text, cursor_position=pos), complete_event) assert set(result) == set([ - Completion(text='userid', start_position=0, display_meta='column'), - Completion(text='username', start_position=0, display_meta='column')]) + column('userid'), + column('username')]) -- cgit v1.2.3