When testing an API, the query parameters are not being encoded correctly, as parse_str decodes an url, which turns symbols like + into a (space).
This means when testing query data which has +, you get unexpected behaviour.
This issue might be Symfony related, as this is from Symfony Request line 417
A small test shows this is also related to current version of Laravel, as Call method is working the same way in 5.4 as in 5.3.
$this->getJson('route?filter=data+cool').+ is now a (space).+ in a query string represents a space, if you want a literal + you need to use %2B, I don't see how this is a bug.
Most helpful comment
+in a query string represents a space, if you want a literal + you need to use%2B, I don't see how this is a bug.