16
16
from maasserver.testing.factory import factory
17
17
from maasserver.testing.testcase import TestModelTestCase
18
18
from maasserver.tests.models import FieldChangeTestModel
19
from maastesting.fakemethod import FakeMethod
22
25
class ConnectToFieldChangeTest(TestModelTestCase):
25
28
app = 'maasserver.tests'
27
30
def test_connect_to_field_change_calls_callback(self):
28
callback = FakeMethod()
29
32
connect_to_field_change(callback, FieldChangeTestModel, 'name1')
30
33
old_name1_value = factory.getRandomString()
31
34
obj = FieldChangeTestModel(name1=old_name1_value)
33
36
obj.name1 = factory.getRandomString()
36
(1, [(obj, old_name1_value)]),
37
(callback.call_count, callback.extract_args()))
39
(1, call(obj, old_name1_value, deleted=False)),
40
(callback.call_count, callback.call_args))
39
42
def test_connect_to_field_change_calls_callback_for_each_save(self):
40
callback = FakeMethod()
41
44
connect_to_field_change(callback, FieldChangeTestModel, 'name1')
42
45
old_name1_value = factory.getRandomString()
43
46
obj = FieldChangeTestModel(name1=old_name1_value)
49
52
self.assertEqual(2, callback.call_count)
51
54
def test_connect_to_field_change_calls_callback_for_each_real_save(self):
52
callback = FakeMethod()
53
56
connect_to_field_change(callback, FieldChangeTestModel, 'name1')
54
57
old_name1_value = factory.getRandomString()
55
58
obj = FieldChangeTestModel(name1=old_name1_value)
60
63
self.assertEqual(1, callback.call_count)
62
65
def test_connect_to_field_change_calls_multiple_callbacks(self):
63
callback1 = FakeMethod()
64
67
connect_to_field_change(callback1, FieldChangeTestModel, 'name1')
65
callback2 = FakeMethod()
66
69
connect_to_field_change(callback2, FieldChangeTestModel, 'name1')
67
70
old_name1_value = factory.getRandomString()
68
71
obj = FieldChangeTestModel(name1=old_name1_value)
74
77
def test_connect_to_field_change_ignores_changes_to_other_fields(self):
75
78
obj = FieldChangeTestModel(name2=factory.getRandomString())
77
callback = FakeMethod()
78
81
connect_to_field_change(callback, FieldChangeTestModel, 'name1')
79
82
obj.name2 = factory.getRandomString()
81
84
self.assertEqual(0, callback.call_count)
83
86
def test_connect_to_field_change_ignores_object_creation(self):
84
callback = FakeMethod()
85
88
connect_to_field_change(callback, FieldChangeTestModel, 'name1')
86
89
obj = FieldChangeTestModel(name1=factory.getRandomString())
88
91
self.assertEqual(0, callback.call_count)
93
def test_connect_to_field_change_ignores_deletion_by_default(self):
94
obj = FieldChangeTestModel(name2=factory.getRandomString())
97
connect_to_field_change(callback, FieldChangeTestModel, 'name1')
99
self.assertEqual(0, callback.call_count)
101
def test_connect_to_field_change_listens_to_deletion_if_delete_True(self):
102
old_name1_value = factory.getRandomString()
103
obj = FieldChangeTestModel(name1=old_name1_value)
106
connect_to_field_change(
107
callback, FieldChangeTestModel, 'name1', delete=True)
110
(1, call(obj, old_name1_value, deleted=True)),
111
(callback.call_count, callback.call_args))