diff --git a/backend/tests/user/api/test_user_viewsets.py b/backend/tests/user/api/test_user_viewsets.py index 807aa08..d88a19a 100644 --- a/backend/tests/user/api/test_user_viewsets.py +++ b/backend/tests/user/api/test_user_viewsets.py @@ -118,7 +118,7 @@ def test_update_persists_color_palette(self, api_client, user_factory): @pytest.mark.parametrize( 'payload', - [{'planOverrides': None}, {'layoutNavigationStyle': 'x'}, {'colorPalette': 'x'}], + [{'planOverrides': None}, {'layoutNavigationStyle': 'x'}, {'colorPalette': 'x'}, {'supplyCartDays': -1}], ) def test_update_rejects_invalid_values(self, api_client, user_factory, payload): user = user_factory(id=1) @@ -142,6 +142,26 @@ def test_retrieve_repairs_invalid_stored_values(self, api_client, user_factory): assert response.data['layoutNavigationStyle'] == 'full' assert response.data['colorPalette'] == 'default' + def test_update_accepts_decimal_supply_cart_days(self, api_client, user_factory): + user = user_factory(id=1) + + response = api_client.as_user(user).patch( + reverse('user:user_preferences'), data={'supplyCartDays': 2.5}, format='json' + ) + + assert response.status_code == 200 + assert response.data['supplyCartDays'] == 2.5 + assert UserPreference.objects.get(user=user).preferences['supply_cart_days'] == 2.5 + + def test_retrieve_reads_stored_integer_supply_cart_days(self, api_client, user_factory): + user = user_factory(id=1) + baker.make(UserPreference, user=user, preferences={'supply_cart_days': 7}) + + response = api_client.as_user(user).get(reverse('user:user_preferences')) + + assert response.status_code == 200 + assert response.data['supplyCartDays'] == 7 + def test_partial_update_keeps_omitted_keys(self, api_client, user_factory): user = user_factory(id=1) stored = { diff --git a/backend/user/api/serializer.py b/backend/user/api/serializer.py index 8c125fb..39cb48f 100644 --- a/backend/user/api/serializer.py +++ b/backend/user/api/serializer.py @@ -178,7 +178,7 @@ class UserPreferenceSerializer(JSONSafeSerializerMixin, serializers.Serializer): burnDaysYellow = serializers.IntegerField(source='burn_days_yellow', min_value=0, default=10, required=False) burnResupplyDays = serializers.IntegerField(source='burn_resupply_days', min_value=0, default=18, required=False) burnOrigin = serializers.CharField(source='burn_origin', required=False) - supplyCartDays = serializers.IntegerField(source='supply_cart_days', min_value=0, default=20, required=False) + supplyCartDays = serializers.FloatField(source='supply_cart_days', min_value=0, default=20, required=False) layoutNavigationStyle = serializers.ChoiceField( source='layout_navigation_style', choices=LAYOUT_NAVIGATION_STYLES, required=False )