1import pytest
2import sqlalchemy as sa
3
4from sqlalchemy_utils.functions import identity
5
6
7class IdentityTestCase(object):
8
9    @pytest.fixture
10    def init_models(self, Building):
11        pass
12
13    def test_for_transient_class_without_id(self, Building):
14        assert identity(Building()) == (None, )
15
16    def test_for_transient_class_with_id(self, session, Building):
17        building = Building(name=u'Some building')
18        session.add(building)
19        session.flush()
20
21        assert identity(building) == (building.id, )
22
23    def test_identity_for_class(self, Building):
24        assert identity(Building) == (Building.id, )
25
26
27class TestIdentity(IdentityTestCase):
28
29    @pytest.fixture
30    def Building(self, Base):
31        class Building(Base):
32            __tablename__ = 'building'
33            id = sa.Column(sa.Integer, primary_key=True)
34            name = sa.Column(sa.Unicode(255))
35        return Building
36
37
38class TestIdentityWithColumnAlias(IdentityTestCase):
39
40    @pytest.fixture
41    def Building(self, Base):
42        class Building(Base):
43            __tablename__ = 'building'
44            id = sa.Column('_id', sa.Integer, primary_key=True)
45            name = sa.Column(sa.Unicode(255))
46        return Building
47