Projet

Général

Profil

0004-data_transfer-save-object-in-update_model-fixes-2954.patch

Benjamin Dauvergne, 09 janvier 2019 19:24

Télécharger (4,32 ko)

Voir les différences:

Subject: [PATCH 4/4] data_transfer: save object in update_model (fixes #29545)

 src/authentic2/data_transfer.py      |  1 +
 tests/test_data_transfer.py          | 13 +++++++++---
 tests/test_import_export_site_cmd.py | 31 ++++++++++++++++++++++++++++
 3 files changed, 42 insertions(+), 3 deletions(-)
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
-