Passed
Branch master (3d8412)
by satyam
01:18
created

tests.test_lazy_orm.TestLazyOrmSuite.tearDown()   A

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
import os
2
import pytest
3
from glob import glob
4
from sqlalchemy import Column
5
from sqlalchemy.orm import Session
6
from sqlalchemy.exc import NoSuchTableError
7
from unittest import TestCase
8
from .seed_db import create_table
9
from lazy_alchemy import get_lazy_class, CustomTable
10
11
12
class TestLazyOrmSuite(TestCase):
13
    def setUp(self) -> None:
14
        self.engine = create_table()
15
        self.session = Session(self.engine)
16
        self.lazy_class = get_lazy_class(self.engine)
17
18
    def test_lazy_db_connection(self):
19
        table = self.lazy_class.user
20
        self.assertIsInstance(table, CustomTable)
21
        self.assertIsInstance(table.username, Column)
22
        self.assertIsInstance(table.age, Column)
23
        self.assertEqual(table.name, "user")
24
        self.assertEqual(len(table.constraints), 1)
25
        self.assertTrue(
26
            any(i for i in table.indexes if i.name == "idx_user_username"))
27
28
    def test_insert_operation_on_dynamic_class(self):
29
        user: CustomTable = self.lazy_class.user
30
        self.assertTrue(user)
31
        insert_statement = user.insert().values(username="fake_user", age=21)
32
        self.session.execute(insert_statement)
33
        self.session.commit()
34
        obj = self.session.query(user).first()
35
        self.assertEqual(obj.username, "fake_user")
36
        self.assertEqual(obj.age, 21)
37
38
    def test_invalid_table_and_column(self):
39
        with pytest.raises(NoSuchTableError):
40
            self.lazy_class.foo_bar
41
        with pytest.raises(AttributeError):
42
            self.lazy_class.user.abc
43
44
    def test_overriding_table(self):
45
        _ = self.lazy_class.user
46
        self.lazy_class.user = CustomTable("userabc", self.lazy_class.metadata)
47
        self.assertNotEqual(_, self.lazy_class.user)
48
        self.assertEqual(self.lazy_class.user.name, "userabc")
49
50
    def tearDown(self) -> None:
51
        self.session.close()
52
        print(f"cleaning files {glob('*.db')}")
53
        os.unlink("test.db")
54