Also: Allow override of database name and user in tests (important for me as I would have to mess with my PSQL and MySQL database users otherwise) Use dict.items instead of six.iteritems as it sporadically caused RuntimeError: dictionary changed size during iteration in Python 2.6 tests. Fix typo DNS to DSN Adds Python 3.5 to tox.ini Added an .editorconfig Import babel.dates in sqlalchemy_utils.i18n as an exception would be raised when using the latest versions of babel.
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from itertools import chain
 | 
						|
 | 
						|
import pytest
 | 
						|
import sqlalchemy as sa
 | 
						|
 | 
						|
from sqlalchemy_utils.functions import non_indexed_foreign_keys
 | 
						|
 | 
						|
 | 
						|
class TestFindNonIndexedForeignKeys(object):
 | 
						|
 | 
						|
    @pytest.fixture
 | 
						|
    def User(self, Base):
 | 
						|
        class User(Base):
 | 
						|
            __tablename__ = 'user'
 | 
						|
            id = sa.Column(sa.Integer, autoincrement=True, primary_key=True)
 | 
						|
            name = sa.Column(sa.Unicode(255))
 | 
						|
        return User
 | 
						|
 | 
						|
    @pytest.fixture
 | 
						|
    def Category(self, Base):
 | 
						|
        class Category(Base):
 | 
						|
            __tablename__ = 'category'
 | 
						|
            id = sa.Column(sa.Integer, primary_key=True)
 | 
						|
            name = sa.Column(sa.Unicode(255))
 | 
						|
        return Category
 | 
						|
 | 
						|
    @pytest.fixture
 | 
						|
    def Article(self, Base, User, Category):
 | 
						|
        class Article(Base):
 | 
						|
            __tablename__ = 'article'
 | 
						|
            id = sa.Column(sa.Integer, primary_key=True)
 | 
						|
            name = sa.Column(sa.Unicode(255))
 | 
						|
            author_id = sa.Column(
 | 
						|
                sa.Integer, sa.ForeignKey(User.id), index=True
 | 
						|
            )
 | 
						|
            category_id = sa.Column(sa.Integer, sa.ForeignKey(Category.id))
 | 
						|
 | 
						|
            category = sa.orm.relationship(
 | 
						|
                Category,
 | 
						|
                primaryjoin=category_id == Category.id,
 | 
						|
                backref=sa.orm.backref(
 | 
						|
                    'articles',
 | 
						|
                )
 | 
						|
            )
 | 
						|
        return Article
 | 
						|
 | 
						|
    @pytest.fixture
 | 
						|
    def init_models(self, User, Category, Article):
 | 
						|
        pass
 | 
						|
 | 
						|
    def test_finds_all_non_indexed_fks(self, session, Base, engine):
 | 
						|
        fks = non_indexed_foreign_keys(Base.metadata, engine)
 | 
						|
        assert (
 | 
						|
            'article' in
 | 
						|
            fks
 | 
						|
        )
 | 
						|
        column_names = list(chain(
 | 
						|
            *(
 | 
						|
                names for names in (
 | 
						|
                    fk.columns.keys()
 | 
						|
                    for fk in fks['article']
 | 
						|
                )
 | 
						|
            )
 | 
						|
        ))
 | 
						|
        assert 'category_id' in column_names
 | 
						|
        assert 'author_id' not in column_names
 |