Opened 3 years ago

Last modified 21 months ago

#22079 new Bug

TestClient serialization of GET params with empty list as value

Reported by: code.djangoproject.com@… Owned by: nobody
Component: Testing framework Version: master
Severity: Normal Keywords:
Cc: gregchapple1@…, Florian Apolloner Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description

Problem:
When POST-ing a parameter whose value is the empty list, TestClient will strip that param-value pair out of the request entirely. In contrast to GET, which passes these along.

Expected behaviour:
They should work the same in the face of an empty list value.

See: https://github.com/django/django/pull/2268 for a patch making POST behave as GET.

Change History (5)

comment:1 Changed 3 years ago by Aymeric Augustin

Needs documentation: unset
Needs tests: unset
Patch needs improvement: unset
Triage Stage: UnreviewedAccepted

As noted on the pull request, we may want to fix GET rather than POST.

In any case, they should behave similarly.

comment:2 Changed 2 years ago by Tim Graham

Patch needs improvement: set

comment:3 Changed 2 years ago by Greg Chapple

Cc: gregchapple1@… added

What is the desired behaviour here?

From what I can see, the difference lies with using django.utils.http.urlencode to process the get params.

>>> from django.utils.http import urlencode

>>> data = {'test': ['value1', 'value2']
>>> urlencode(data, doseq=True) 
'test=value1&test=value2'

>>> data = {'test': []}
>>> urlencode(data, doseq=True)
''

comment:4 Changed 2 years ago by Florian Apolloner

Cc: Florian Apolloner added

From my gut I'd say that empty lists should get stripped out entirely, cause there is no way to represent an empty list, "?test=" would be interpreted as a list with one empty item in .getlist which makes no sense.

comment:5 Changed 21 months ago by Collin Anderson

Summary: TestClient serialization of POST params with empty list as valueTestClient serialization of GET params with empty list as value
Note: See TracTickets for help on using tickets.
Back to Top