Projet

Général

Profil

0001-delete-old-values-when-set-new-multiple-attribute-va.patch

Paul Marillonnet, 05 avril 2019 13:11

Télécharger (2,49 ko)

Voir les différences:

Subject: [PATCH] delete old values when set new multiple attribute values
 (#32025)

 src/authentic2/models.py      |  9 +++++++++
 tests/test_attribute_kinds.py | 13 +++++++++++++
 2 files changed, 22 insertions(+)
src/authentic2/models.py
213 213
        if self.multiple:
214 214
            assert isinstance(value, (list, set, tuple))
215 215
            values = value
216
            content_list = []
216 217
            for value in values:
217 218
                content = serialize(value)
218 219
                av, created = AttributeValue.objects.get_or_create(
......
225 226
                if not created:
226 227
                    av.verified = verified
227 228
                    av.save()
229
                content_list.append(content)
230

  
231
            AttributeValue.objects.filter(
232
                attribute=self,
233
                content_type=ContentType.objects.get_for_model(owner),
234
                object_id=owner.pk,
235
                multiple=True
236
            ).exclude(content__in=content_list).delete()
228 237
        else:
229 238
            content = serialize(value)
230 239
            av, created = AttributeValue.objects.get_or_create(
tests/test_attribute_kinds.py
447 447
    response = app.get('/accounts/edit/')
448 448
    form = response.form
449 449
    assert form['edit-profile-cityscape_image'].attrs['accept'] == 'image/*'
450

  
451

  
452
def test_multiple_attribute_setter(db, app, simple_user):
453
    nicks = Attribute.objects.create(name='nicknames', label='Nicknames', kind='string',
454
                             required=False, multiple=True, user_visible=True, user_editable=True)
455

  
456
    simple_user.attributes.nicknames = ['Roger', 'Tony', 'Robie']
457
    simple_user.save()
458
    assert 'Tony' in [atv.content for atv in simple_user.attribute_values.filter(attribute=nicks)]
459

  
460
    simple_user.attributes.nicknames = ['Roger', 'Timmy', 'Robie']
461
    simple_user.save()
462
    assert not 'Tony' in [atv.content for atv in simple_user.attribute_values.filter(attribute=nicks)]
450
-