Projet

Général

Profil

0001-api-flat-extra_data-in-booking-patch-endpoint-61074.patch

Lauréline Guérin, 10 février 2022 08:59

Télécharger (5,2 ko)

Voir les différences:

Subject: [PATCH 1/2] api: flat extra_data in booking patch endpoint (#61074)

 chrono/api/serializers.py |  2 +-
 chrono/api/views.py       | 13 +++++++------
 tests/api/test_booking.py | 16 ++++++----------
 3 files changed, 14 insertions(+), 17 deletions(-)
chrono/api/serializers.py
143 143
    class Meta:
144 144
        model = Booking
145 145
        fields = ['id', 'in_waiting_list', 'user_was_present', 'user_absence_reason', 'extra_data']
146
        read_only_fields = ['id', 'in_waiting_list']
146
        read_only_fields = ['id', 'in_waiting_list', 'extra_data']
147 147

  
148 148
    def validate_user_absence_reason(self, value):
149 149
        if not value:
chrono/api/views.py
2089 2089
        ):
2090 2090
            raise APIErrorBadRequest(N_('event is marked as checked'), err=5)
2091 2091

  
2092
        if 'extra_data' in serializer.validated_data:
2093
            extra_data = self.booking.extra_data or {}
2094
            extra_data.update(serializer.validated_data['extra_data'] or {})
2095
            serializer.validated_data['extra_data'] = extra_data
2096

  
2097 2092
        serializer.save()
2093
        extra_data = {k: v for k, v in request.data.items() if k not in serializer.validated_data}
2094
        if extra_data:
2095
            self.booking.extra_data = self.booking.extra_data or {}
2096
            self.booking.extra_data.update(extra_data)
2097
            self.booking.save()
2098

  
2098 2099
        if 'user_was_present' in request.data:
2099 2100
            self.booking.secondary_booking_set.update(user_was_present=self.booking.user_was_present)
2100 2101
            self.booking.event.set_is_checked()
2101 2102
        if 'user_absence_reason' in request.data:
2102 2103
            self.booking.secondary_booking_set.update(user_absence_reason=self.booking.user_absence_reason)
2103
        if 'extra_data' in request.data:
2104
        if extra_data:
2104 2105
            self.booking.secondary_booking_set.update(extra_data=self.booking.extra_data)
2105 2106

  
2106 2107
        response = {'err': 0, 'booking_id': self.booking.pk}
tests/api/test_booking.py
638 638

  
639 639
    app.authorization = ('Basic', ('john.doe', 'password'))
640 640

  
641
    app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': {'foo': 'bar'}})
641
    app.patch_json('/api/booking/%s/' % booking.pk, params={'foo': 'bar'})
642 642
    booking.refresh_from_db()
643 643
    assert booking.user_was_present is True  # not changed
644 644
    assert booking.extra_data == {'foo': 'bar'}
645 645

  
646
    app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': {'foo': 'baz'}})
646
    app.patch_json('/api/booking/%s/' % booking.pk, params={'foo': 'baz'})
647 647
    booking.refresh_from_db()
648 648
    assert booking.user_was_present is True  # not changed
649 649
    assert booking.extra_data == {'foo': 'baz'}
650 650

  
651
    app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': {'foooo': 'bar'}})
651
    app.patch_json('/api/booking/%s/' % booking.pk, params={'foooo': 'bar'})
652 652
    booking.refresh_from_db()
653 653
    assert booking.user_was_present is True  # not changed
654 654
    assert booking.extra_data == {'foo': 'baz', 'foooo': 'bar'}
655 655

  
656
    app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': {'foooo': 'baz', 'foo': None}})
656
    app.patch_json('/api/booking/%s/' % booking.pk, params={'foooo': 'baz', 'foo': None})
657 657
    booking.refresh_from_db()
658 658
    assert booking.user_was_present is True  # not changed
659 659
    assert booking.extra_data == {'foo': None, 'foooo': 'baz'}
......
664 664
    # and other booking
665 665
    other_booking = Booking.objects.create(event=event)
666 666

  
667
    app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': {'foooo': 'baz', 'foo': None}})
667
    app.patch_json('/api/booking/%s/' % booking.pk, params={'foooo': 'baz', 'foo': None})
668 668
    assert booking.user_was_present is True  # not changed
669 669
    assert booking.extra_data == {'foo': None, 'foooo': 'baz'}
670 670
    # all secondary bookings are upadted
......
679 679
    other_booking.refresh_from_db()
680 680
    assert other_booking.extra_data is None  # not changed
681 681

  
682
    app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': None})
683
    booking.refresh_from_db()
684
    assert booking.user_was_present is True  # not changed
685
    assert booking.extra_data == {'foo': None, 'foooo': 'baz'}  # not changed
686
    app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': {}})
682
    app.patch_json('/api/booking/%s/' % booking.pk, params={})
687 683
    booking.refresh_from_db()
688 684
    assert booking.user_was_present is True  # not changed
689 685
    assert booking.extra_data == {'foo': None, 'foooo': 'baz'}  # not changed
690
-