0004-data_transfer-save-object-in-update_model-fixes-2954.patch
src/authentic2/data_transfer.py | ||
---|---|---|
9 | 9 |
def update_model(obj, d): |
10 | 10 |
for attr, value in d.items(): |
11 | 11 |
setattr(obj, attr, value) |
12 |
obj.save() |
|
12 | 13 | |
13 | 14 | |
14 | 15 |
def export_site(): |
tests/test_data_transfer.py | ||
---|---|---|
146 | 146 |
ou1 = OU.objects.create(name='ou 1', slug='ou-1') |
147 | 147 |
ou2 = OU.objects.create(name='ou 2', slug='ou-2') |
148 | 148 |
uuid = get_hex_uuid() |
149 |
assert Role.objects.exclude(slug__startswith='_').count() == 0 |
|
149 | 150 |
existing_role = Role.objects.create(uuid=uuid, slug='some-role', ou=ou1) |
150 | 151 |
rd = RoleDeserializer({ |
151 | 152 |
'uuid': uuid, 'name': 'some-role', 'slug': 'some-role', |
152 | 153 |
'ou': {'slug': 'ou-2'}, 'service': None}, ImportContext()) |
153 | 154 |
role, status = rd.deserialize() |
154 |
assert role == existing_role |
|
155 |
assert role.ou == ou2 |
|
155 |
existing_role.refresh_from_db() |
|
156 |
assert existing_role.ou == ou2 |
|
157 |
assert Role.objects.exclude(slug__startswith='_').count() == 1 |
|
156 | 158 | |
157 | 159 | |
158 | 160 |
def test_role_deserializer_update_fields(db): |
159 | 161 |
uuid = get_hex_uuid() |
162 |
assert Role.objects.exclude(slug__startswith='_').count() == 0 |
|
160 | 163 |
existing_role = Role.objects.create(uuid=uuid, slug='some-role', name='some role') |
161 | 164 |
rd = RoleDeserializer({ |
162 | 165 |
'uuid': uuid, 'slug': 'some-role', 'name': 'some role changed', |
163 | 166 |
'ou': None, 'service': None}, ImportContext()) |
164 | 167 |
role, status = rd.deserialize() |
168 |
existing_role.refresh_from_db() |
|
165 | 169 |
assert role == existing_role |
166 |
assert role.name == 'some role changed' |
|
170 |
assert existing_role.name == 'some role changed' |
|
171 |
assert Role.objects.exclude(slug__startswith='_').count() == 1 |
|
167 | 172 | |
168 | 173 | |
169 | 174 |
def test_role_deserializer_with_attributes(db): |
... | ... | |
178 | 183 |
'ou': None, 'service': None}, ImportContext()) |
179 | 184 |
role, status = rd.deserialize() |
180 | 185 |
created, deleted = rd.attributes() |
186 |
assert status == 'created' |
|
181 | 187 |
assert role.attributes.count() == 2 |
182 | 188 |
assert len(created) == 2 |
183 | 189 | |
... | ... | |
211 | 217 |
child_role, status = rd.deserialize() |
212 | 218 |
created, deleted = rd.parentings() |
213 | 219 | |
220 |
assert status == 'created' |
|
214 | 221 |
assert len(created) == 1 |
215 | 222 |
parenting = created[0] |
216 | 223 |
assert parenting.direct is True |
tests/test_import_export_site_cmd.py | ||
---|---|---|
153 | 153 | |
154 | 154 |
management.call_command('import_site', json_fixture(content), stdin='yes') |
155 | 155 |
assert Role.objects.get(uuid='dqfewrvesvews2532') |
156 | ||
157 | ||
158 |
def test_import_site_update_roles(db, json_fixture): |
|
159 |
r1 = Role.objects.create(name='Role1', slug='role1') |
|
160 |
r2 = Role.objects.create(name='Role2', slug='role2') |
|
161 | ||
162 |
content = { |
|
163 |
'roles': [ |
|
164 |
{ |
|
165 |
'ou': None, |
|
166 |
'service': None, |
|
167 |
'slug': r1.slug, |
|
168 |
'name': 'Role first update', |
|
169 |
} |
|
170 |
] |
|
171 |
} |
|
172 | ||
173 |
management.call_command('import_site', json_fixture(content)) |
|
174 | ||
175 |
r1.refresh_from_db() |
|
176 |
assert r1.name == 'Role first update' |
|
177 | ||
178 |
content['roles'][0]['uuid'] = r1.uuid |
|
179 |
content['roles'][0]['slug'] = 'slug-updated' |
|
180 |
content['roles'][0]['name'] = 'Role second update' |
|
181 | ||
182 |
management.call_command('import_site', json_fixture(content)) |
|
183 | ||
184 |
r1.refresh_from_db() |
|
185 |
assert r1.slug == 'slug-updated' |
|
186 |
assert r1.name == 'Role second update' |
|
156 |
- |