Files
redash/tests/models/test_base_versioned_model.py
Arik Fraimovich edea6f3a05 WIP:
- Move version/change tracking logic to mixins (the change mixin is still WIP).
- Tests for queries update API.
2016-10-24 16:58:30 +03:00

75 lines
2.1 KiB
Python

import peewee
from mock import patch
from tests import BaseTestCase
from redash.models import ChangeTrackingMixin, BaseVersionedModel, ConflictDetectedError
class TestModel(ChangeTrackingMixin, BaseVersionedModel):
value = peewee.IntegerField()
class Meta:
db_table = 'test_mode'
class TestModelTestCase(BaseTestCase):
def setUp(self):
super(TestModelTestCase, self).setUp()
TestModel.create_table()
def tearDown(self):
super(TestModelTestCase, self).tearDown()
TestModel.drop_table()
class TestBaseVersionedModel(TestModelTestCase):
def test_creates_first_instance_with_version_0(self):
t = TestModel(value=123)
t.save()
self.assertIsNotNone(t.id)
self.assertEqual(t.version, 1)
self.assertEqual(t.value, 123)
def test_fails_when_there_is_version_conflict(self):
t = TestModel(value=123)
t.save()
t1 = TestModel.get(TestModel.id==t.id)
t2 = TestModel.get(TestModel.id==t.id)
t1.value = 124
t1.save()
self.assertRaises(ConflictDetectedError, lambda: t2.save())
def test_calls_save_hooks(self):
t = TestModel(value=123)
with patch(__name__ + '.TestModel.pre_save') as pre_save_mock, patch(__name__ + '.TestModel.post_save') as post_save_mock:
t.save()
pre_save_mock.assert_called_once_with(True)
post_save_mock.assert_called_once_with(True)
t.value = 124
with patch(__name__ + '.TestModel.pre_save') as pre_save_mock, patch(__name__ + '.TestModel.post_save') as post_save_mock:
t.save()
pre_save_mock.assert_called_once_with(False)
post_save_mock.assert_called_once_with(False)
class TestChangeTracking(TestModelTestCase):
def test_returns_changed_fields_with_original_value(self):
t = TestModel(value=123)
t.save()
t = TestModel.get(TestModel.id == t.id)
t.value = 124
t.save()
self.assertIn('value', t.changes)
self.assertEqual(124, t.changes['value']['new'])
self.assertEqual(123, t.changes['value']['old'])