1
# Copyright 2012, 2013 Canonical Ltd. This software is licensed under the
1
# Copyright 2012-2014 Canonical Ltd. This software is licensed under the
2
2
# GNU Affero General Public License version 3 (see the file LICENSE).
4
4
"""Tests for signals helpers."""
33
33
def test_connect_to_field_change_calls_callback(self):
35
connect_to_field_change(callback, FieldChangeTestModel, 'name1')
35
connect_to_field_change(callback, FieldChangeTestModel, ['name1'])
36
36
old_name1_value = factory.getRandomString()
37
37
obj = FieldChangeTestModel(name1=old_name1_value)
39
39
obj.name1 = factory.getRandomString()
42
(1, call(obj, old_name1_value, deleted=False)),
43
(callback.call_count, callback.call_args))
42
[call(obj, (old_name1_value,), deleted=False)],
45
45
def test_connect_to_field_change_calls_callback_for_each_save(self):
47
connect_to_field_change(callback, FieldChangeTestModel, 'name1')
47
connect_to_field_change(callback, FieldChangeTestModel, ['name1'])
48
48
old_name1_value = factory.getRandomString()
49
49
obj = FieldChangeTestModel(name1=old_name1_value)
57
57
def test_connect_to_field_change_calls_callback_for_each_real_save(self):
59
connect_to_field_change(callback, FieldChangeTestModel, 'name1')
59
connect_to_field_change(callback, FieldChangeTestModel, ['name1'])
60
60
old_name1_value = factory.getRandomString()
61
61
obj = FieldChangeTestModel(name1=old_name1_value)
68
68
def test_connect_to_field_change_calls_multiple_callbacks(self):
70
connect_to_field_change(callback1, FieldChangeTestModel, 'name1')
70
connect_to_field_change(callback1, FieldChangeTestModel, ['name1'])
72
connect_to_field_change(callback2, FieldChangeTestModel, 'name1')
72
connect_to_field_change(callback2, FieldChangeTestModel, ['name1'])
73
73
old_name1_value = factory.getRandomString()
74
74
obj = FieldChangeTestModel(name1=old_name1_value)
81
81
obj = FieldChangeTestModel(name2=factory.getRandomString())
84
connect_to_field_change(callback, FieldChangeTestModel, 'name1')
84
connect_to_field_change(callback, FieldChangeTestModel, ['name1'])
85
85
obj.name2 = factory.getRandomString()
87
87
self.assertEqual(0, callback.call_count)
89
89
def test_connect_to_field_change_ignores_object_creation(self):
91
connect_to_field_change(callback, FieldChangeTestModel, 'name1')
91
connect_to_field_change(callback, FieldChangeTestModel, ['name1'])
92
92
obj = FieldChangeTestModel(name1=factory.getRandomString())
94
94
self.assertEqual(0, callback.call_count)
97
97
obj = FieldChangeTestModel(name2=factory.getRandomString())
100
connect_to_field_change(callback, FieldChangeTestModel, 'name1')
100
connect_to_field_change(callback, FieldChangeTestModel, ['name1'])
102
102
self.assertEqual(0, callback.call_count)
108
108
callback = Mock()
109
109
connect_to_field_change(
110
callback, FieldChangeTestModel, 'name1', delete=True)
110
callback, FieldChangeTestModel, ['name1'], delete=True)
112
112
self.assertEqual(
113
(1, call(obj, old_name1_value, deleted=True)),
114
(callback.call_count, callback.call_args))
113
[call(obj, (old_name1_value,), deleted=True)],
116
def test_connect_to_field_change_notices_change_in_any_given_field(self):
118
connect_to_field_change(
119
callback, FieldChangeTestModel, ['name1', 'name2'])
120
name1 = factory.make_name('name1')
121
old_name2_value = factory.make_name('old')
122
obj = FieldChangeTestModel(name1=name1, name2=old_name2_value)
124
obj.name2 = factory.make_name('new')
127
[call(obj, (name1, old_name2_value), deleted=False)],
130
def test_connect_to_field_change_only_calls_once_per_object_change(self):
132
connect_to_field_change(
133
callback, FieldChangeTestModel, ['name1', 'name2'])
134
old_name1_value = factory.make_name('old1')
135
old_name2_value = factory.make_name('old2')
136
obj = FieldChangeTestModel(
137
name1=old_name1_value, name2=old_name2_value)
139
obj.name1 = factory.make_name('new1')
140
obj.name2 = factory.make_name('new2')
143
[call(obj, (old_name1_value, old_name2_value), deleted=False)],