File: test_get_mapper.py

package info (click to toggle)
python-sqlalchemy-utils 0.41.2-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 1,252 kB
  • sloc: python: 13,566; makefile: 141
file content (135 lines) | stat: -rw-r--r-- 3,736 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import pytest
import sqlalchemy as sa

from sqlalchemy_utils import get_mapper
from sqlalchemy_utils.functions.orm import _get_query_compile_state


class TestGetMapper:

    @pytest.fixture
    def Building(self, Base):
        class Building(Base):
            __tablename__ = 'building'
            id = sa.Column(sa.Integer, primary_key=True)
        return Building

    def test_table(self, Building):
        assert get_mapper(Building.__table__) == sa.inspect(Building)

    def test_declarative_class(self, Building):
        assert (
            get_mapper(Building) ==
            sa.inspect(Building)
        )

    def test_declarative_object(self, Building):
        assert (
            get_mapper(Building()) ==
            sa.inspect(Building)
        )

    def test_mapper(self, Building):
        assert (
            get_mapper(Building.__mapper__) ==
            sa.inspect(Building)
        )

    def test_class_alias(self, Building):
        assert (
            get_mapper(sa.orm.aliased(Building)) ==
            sa.inspect(Building)
        )

    def test_instrumented_attribute(self, Building):
        assert (
            get_mapper(Building.id) == sa.inspect(Building)
        )

    def test_table_alias(self, Building):
        alias = sa.orm.aliased(Building.__table__)
        assert (
            get_mapper(alias) ==
            sa.inspect(Building)
        )

    def test_column(self, Building):
        assert (
            get_mapper(Building.__table__.c.id) ==
            sa.inspect(Building)
        )

    def test_column_of_an_alias(self, Building):
        assert (
            get_mapper(sa.orm.aliased(Building.__table__).c.id) ==
            sa.inspect(Building)
        )


class TestGetMapperWithQueryEntities:

    @pytest.fixture
    def Building(self, Base):
        class Building(Base):
            __tablename__ = 'building'
            id = sa.Column(sa.Integer, primary_key=True)
        return Building

    @pytest.fixture
    def init_models(self, Building):
        pass

    def test_mapper_entity_with_mapper(self, session, Building):
        query = session.query(Building.__mapper__)
        entity = _get_query_compile_state(query)._entities[0]
        assert get_mapper(entity) == sa.inspect(Building)

    def test_mapper_entity_with_class(self, session, Building):
        query = session.query(Building)
        entity = _get_query_compile_state(query)._entities[0]
        assert get_mapper(entity) == sa.inspect(Building)

    def test_column_entity(self, session, Building):
        query = session.query(Building.id)
        entity = _get_query_compile_state(query)._entities[0]
        assert get_mapper(entity) == sa.inspect(Building)


class TestGetMapperWithMultipleMappersFound:

    @pytest.fixture
    def Building(self, Base):
        class Building(Base):
            __tablename__ = 'building'
            id = sa.Column(sa.Integer, primary_key=True)

        class BigBuilding(Building):
            pass

        return Building

    def test_table(self, Building):
        with pytest.raises(ValueError):
            get_mapper(Building.__table__)

    def test_table_alias(self, Building):
        alias = sa.orm.aliased(Building.__table__)
        with pytest.raises(ValueError):
            get_mapper(alias)


class TestGetMapperForTableWithoutMapper:

    @pytest.fixture
    def building(self):
        metadata = sa.MetaData()
        return sa.Table('building', metadata)

    def test_table(self, building):
        with pytest.raises(ValueError):
            get_mapper(building)

    def test_table_alias(self, building):
        alias = sa.orm.aliased(building)
        with pytest.raises(ValueError):
            get_mapper(alias)