# -*- coding: utf-8 -*- from eralchemy.sqla import column_to_intermediary, declarative_to_intermediary, database_to_intermediary, \ table_to_intermediary from tests.common import parent_id, parent_name, child_id, child_parent_id, Parent, Child, Base, \ child, parent, Relation, Table, relation, exclude_relation, \ check_intermediary_representation_simple_all_table from tests.common import check_intermediary_representation_simple_table, create_db def check_column(column, column_intermediary): output = column_to_intermediary(column) assert output.name == column_intermediary.name assert output.is_key is column_intermediary.is_key assert output.type == column_intermediary.type def test_columns_parent(): check_column( column=Parent.id, column_intermediary=parent_id ) check_column( column=Parent.name, column_intermediary=parent_name ) def test_columns_child(): check_column( column=Child.id, column_intermediary=child_id ) check_column( column=Child.parent_id, column_intermediary=child_parent_id ) def test_declarative_to_intermediary(): tables, relationships = declarative_to_intermediary(Base) check_intermediary_representation_simple_all_table(tables, relationships) def table_equals_helper(sqla_table, expected_table): table = table_to_intermediary(sqla_table.__table__) assert len(table.columns) == len(expected_table.columns) assert table.name == expected_table.name for col in table.columns: assert col in expected_table.columns def test_tables(): table_equals_helper(Child, child) table_equals_helper(Parent, parent) def test_database_to_intermediary(): db_uri = create_db() tables, relationships = database_to_intermediary(db_uri) check_intermediary_representation_simple_table(tables, relationships) def test_database_to_intermediary_with_schema(): db_uri = create_db() tables, relationships = database_to_intermediary(db_uri, schema='test') assert len(tables) == 3 assert len(relationships) == 2 assert all(isinstance(t, Table) for t in tables) assert all(isinstance(r, Relation) for r in relationships) # Not in because different schema. assert relation not in relationships assert exclude_relation not in relationships def test_flask_sqlalchemy(): from flask_sqlalchemy import SQLAlchemy from flask import Flask from eralchemy.main import all_to_intermediary app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db = SQLAlchemy(app) model = db.Model model.metadata = Base.metadata tables, relationships = all_to_intermediary(db.Model) check_intermediary_representation_simple_all_table(tables, relationships)