Opened 11 years ago

Last modified 5 years 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: dev
Severity: Normal Keywords:
Cc: gregchapple1@…, Florian Apolloner, Ahmad Abdallah, Tom Forbes Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no
Pull Requests:How to create a pull request

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.

According to the ticket's flags, the next step(s) to move this issue forward are:

  • To provide a patch by sending a pull request. Claim the ticket when you start working so that someone else doesn't duplicate effort. Before sending a pull request, review your work against the patch review checklist. Check the "Has patch" flag on the ticket after sending a pull request and include a link to the pull request in the ticket comment when making that update. The usual format is: [https://github.com/django/django/pull/#### PR].

Change History (8)

comment:1 by Aymeric Augustin, 11 years ago

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 by Tim Graham, 11 years ago

Patch needs improvement: set

comment:3 by Greg Chapple, 11 years ago

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 by Florian Apolloner, 10 years ago

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 by Collin Anderson, 10 years ago

Summary: TestClient serialization of POST params with empty list as valueTestClient serialization of GET params with empty list as value

comment:6 by Ahmad Abdallah, 5 years ago

Has patch: unset
Patch needs improvement: unset

What's the desired behavior here? If it's correcting getlist's handling of empty lists, isn't that more in line with altering QueryDict than changing serialization of GET params?

If we're still changing serialization, we might have to rewrite it ourselves since our current serialization is derived from urllib which is what causes the current bug mentioned by the ticket.

comment:7 by Ahmad Abdallah, 5 years ago

Cc: Ahmad Abdallah added

comment:8 by Tom Forbes, 5 years ago

Cc: Tom Forbes added
Note: See TracTickets for help on using tickets.
Back to Top