infi.clickhouse_orm/tests/test_constraints.py

45 lines
1.5 KiB
Python
Raw Permalink Normal View History

2020-06-06 11:07:25 +03:00
import unittest
from infi.clickhouse_orm import *
from .base_test_with_data import Person
2020-06-06 11:37:25 +03:00
class ConstraintsTest(unittest.TestCase):
2020-06-06 11:07:25 +03:00
def setUp(self):
self.database = Database('test-db', log_statements=True)
2020-06-06 11:37:25 +03:00
if self.database.server_version < (19, 14, 3, 3):
raise unittest.SkipTest('ClickHouse version too old')
2020-06-06 11:07:25 +03:00
self.database.create_table(PersonWithConstraints)
def tearDown(self):
self.database.drop_database()
def test_insert_valid_values(self):
self.database.insert([
PersonWithConstraints(first_name="Mike", last_name="Caruzo", birthday="2000-01-01", height=1.66)
])
def test_insert_invalid_values(self):
with self.assertRaises(ServerError) as e:
self.database.insert([
PersonWithConstraints(first_name="Mike", last_name="Caruzo", birthday="2100-01-01", height=1.66)
])
self.assertEqual(e.code, 469)
self.assertTrue('Constraint `birthday_in_the_past`' in e.message)
with self.assertRaises(ServerError) as e:
self.database.insert([
PersonWithConstraints(first_name="Mike", last_name="Caruzo", birthday="1970-01-01", height=3)
])
self.assertEqual(e.code, 469)
self.assertTrue('Constraint `max_height`' in e.message)
class PersonWithConstraints(Person):
birthday_in_the_past = Constraint(Person.birthday <= F.today())
max_height = Constraint(Person.height <= 2.75)