File: test_models.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 (83 lines) | stat: -rw-r--r-- 2,536 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
from datetime import datetime

import pytest
import sqlalchemy as sa
import sqlalchemy.orm

from sqlalchemy_utils import generic_repr, Timestamp


class TestTimestamp:
    @pytest.fixture
    def Article(self, Base):
        class Article(Base, Timestamp):
            __tablename__ = 'article'
            id = sa.Column(sa.Integer, primary_key=True)
            name = sa.Column(sa.Unicode(255), default='Some article')
        return Article

    def test_created(self, session, Article):
        then = datetime.utcnow()
        article = Article()

        session.add(article)
        session.commit()

        assert article.created >= then and article.created <= datetime.utcnow()

    def test_updated(self, session, Article):
        article = Article()

        session.add(article)
        session.commit()

        then = datetime.utcnow()
        article.name = "Something"

        session.commit()

        assert article.updated >= then and article.updated <= datetime.utcnow()


class TestGenericRepr:
    @pytest.fixture
    def Article(self, Base):
        class Article(Base):
            __tablename__ = 'article'
            id = sa.Column(sa.Integer, primary_key=True)
            name = sa.Column(sa.Unicode(255), default='Some article')
        return Article

    def test_repr(self, Article):
        """Representation of a basic model."""
        Article = generic_repr(Article)
        article = Article(id=1, name='Foo')
        expected_repr = "Article(id=1, name='Foo')"
        actual_repr = repr(article)

        assert actual_repr == expected_repr

    def test_repr_partial(self, Article):
        """Representation of a basic model with selected fields."""
        Article = generic_repr('id')(Article)
        article = Article(id=1, name='Foo')
        expected_repr = 'Article(id=1)'
        actual_repr = repr(article)

        assert actual_repr == expected_repr

    def test_not_loaded(self, session, Article):
        """:py:func:`~sqlalchemy_utils.models.generic_repr` doesn't force
        execution of additional queries if some fields are not loaded and
        instead represents them as "<not loaded>".
        """
        Article = generic_repr(Article)
        article = Article(name='Foo')
        session.add(article)
        session.commit()

        article = session.query(Article).options(sa.orm.defer(Article.name)).one()
        actual_repr = repr(article)

        expected_repr = f'Article(id={article.id}, name=<not loaded>)'
        assert actual_repr == expected_repr