def test_inspected_privilege(): a = InspectedPrivilege("table", "public", "test_table", "select", "test_user") a2 = InspectedPrivilege("table", "public", "test_table", "select", "test_user") b = InspectedPrivilege("function", "schema", "test_function", "execute", "test_user") b2 = InspectedPrivilege("function", "schema", "test_function", "modify", "test_user") assert a == a2 assert a == a assert a != b assert b != b2 assert ( b2.create_statement == 'grant modify on function "schema"."test_function" to "test_user";') assert (b.drop_statement == """DO $$ BEGIN IF (SELECT 1 FROM information_schema.tables WHERE table_schema = 'schema' AND table_name = 'test_function' ) THEN REVOKE execute on function "schema"."test_function" from "test_user"; END IF; END $$;""") assert a.key == ("table", '"public"."test_table"', "test_user", "select")
def test_inspected_privilege(): a = InspectedPrivilege("table", "public", "test_table", "select", "test_user") a2 = InspectedPrivilege("table", "public", "test_table", "select", "test_user") b = InspectedPrivilege("function", "schema", "test_function", "execute", "test_user") b2 = InspectedPrivilege("function", "schema", "test_function", "modify", "test_user") assert a == a2 assert a == a assert a != b assert b != b2 assert ( b2.create_statement == 'grant modify on function "schema"."test_function" to "test_user";') assert ( b.drop_statement == 'revoke execute on function "schema"."test_function" from "test_user";' ) assert a.key == ("table", '"public"."test_table"', 'test_user', "select")
def asserts_pg(i): # schemas assert list(i.schemas.keys()) == ["otherschema", "public"] otherschema = i.schemas["otherschema"] assert i.schemas["public"] != i.schemas["otherschema"] assert otherschema.create_statement == 'create schema if not exists "otherschema";' assert otherschema.drop_statement == 'drop schema if exists "otherschema";' # to_pytype assert to_pytype(i.dialect, "integer") == int assert to_pytype(i.dialect, "nonexistent") == type(None) # noqa # dialect assert i.dialect.name == "postgresql" # tables and views films = n("films") v_films = n("v_films") v_films2 = n("v_films2") v = i.views[v_films] public_views = od( (k, v) for k, v in i.views.items() if v.schema == "public") assert list(public_views.keys()) == [v_films, v_films2] assert v.columns == FILMS_COLUMNS assert v.create_statement == VDEF assert v == v assert v == deepcopy(v) assert v.drop_statement == "drop view if exists {};".format(v_films) v = i.views[v_films] # dependencies assert v.dependent_on == [films] v = i.views[v_films2] assert v.dependent_on == [v_films] for k, r in i.relations.items(): for dependent in r.dependents: assert k in i.relations[dependent].dependent_on for dependency in r.dependent_on: assert k in i.relations[dependency].dependents # materialized views mv_films = n("mv_films") mv = i.materialized_views[mv_films] assert list(i.materialized_views.keys()) == [mv_films] assert mv.columns == FILMS_COLUMNS assert mv.create_statement == MVDEF assert mv.drop_statement == "drop materialized view if exists {};".format( mv_films) # materialized view indexes assert n("mv_films_title_idx") in mv.indexes # functions films_f = n("films_f") + "(d date, def_t text, def_d date)" inc_f = n("inc_f") + "(integer)" inc_f_noargs = n("inc_f_noargs") + "()" inc_f_out = n("inc_f_out") + "(integer, OUT outparam integer)" public_funcs = [k for k, v in i.functions.items() if v.schema == "public"] assert public_funcs == [films_f, inc_f, inc_f_noargs, inc_f_out] f = i.functions[films_f] f2 = i.functions[inc_f] f3 = i.functions[inc_f_noargs] f4 = i.functions[inc_f_out] assert f == f assert f != f2 assert f.columns == FILMSF_COLUMNS assert f.inputs == FILMSF_INPUTS assert f3.inputs == [] assert list(f2.columns.values())[0].name == "inc_f" assert list(f3.columns.values())[0].name == "inc_f_noargs" assert list(f4.columns.values())[0].name == "outparam" fdef = i.functions[films_f].definition assert fdef == "select 'a'::varchar, '2014-01-01'::date" assert f.create_statement == FDEF assert ( f.drop_statement == 'drop function if exists "public"."films_f"(d date, def_t text, def_d date);' ) assert f.comment == "films_f comment" assert f2.comment is None # extensions assert [e.quoted_full_name for e in i.extensions.values()] == [ n("plpgsql", schema="pg_catalog"), n("pg_trgm"), ] # constraints cons = i.constraints['"public"."films"."firstkey"'] assert ( cons.create_statement == 'alter table "public"."films" add constraint "firstkey" PRIMARY KEY using index "firstkey";' ) # tables t_films = n("films") t = i.tables[t_films] empty = i.tables[n("emptytable")] assert empty.comment == "emptytable comment" # empty tables assert empty.columns == od() assert (empty.create_statement == """create table "public"."emptytable" ( ); """) # create and drop tables assert t.create_statement == T_CREATE assert t.drop_statement == "drop table {};".format(t_films) assert t.alter_table_statement("x") == "alter table {} x;".format(t_films) # table indexes assert n("films_title_idx") in t.indexes # privileges g = InspectedPrivilege("table", "public", "films", "select", "postgres") g = i.privileges[g.key] assert g.create_statement == "grant select on table {} to postgres;".format( t_films) assert g.drop_statement == "revoke select on table {} from postgres;".format( t_films) # composite types ct = i.composite_types[n("ttt")] assert [(x.name, x.dbtype) for x in ct.columns.values()] == [ ("a", "integer"), ("b", "text"), ] assert (ct.create_statement == 'create type "public"."ttt" as ("a" integer, "b" text);') assert ct.drop_statement == 'drop type "public"."ttt";' # enums assert i.enums[n("abc")].elements == ["a", "b", "c"] x = i.tables[n("t_abc")].columns["x"] assert x.is_enum assert ( x.change_enum_to_string_statement("t") == 'alter table t alter column "x" set data type varchar using "x"::varchar;' ) assert (x.change_string_to_enum_statement("t") == 'alter table t alter column "x" set data type abc using "x"::abc;') tid = i.tables[n("t_abc")].columns["id"] with raises(ValueError): tid.change_enum_to_string_statement("t") with raises(ValueError): tid.change_string_to_enum_statement("t")