File: test_parser.py

package info (click to toggle)
django-ninja 1.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 11,280 kB
  • sloc: python: 15,956; javascript: 1,689; makefile: 39; sh: 25
file content (40 lines) | stat: -rw-r--r-- 1,146 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from typing import List

from django.http import HttpRequest, QueryDict

from ninja import NinjaAPI
from ninja.parser import Parser
from ninja.testing import TestClient


class MyParser(Parser):
    "Default json parser"

    def parse_body(self, request: HttpRequest):
        "just splitting body to lines"
        return request.body.encode().splitlines()

    def parse_querydict(
        self, data: QueryDict, list_fields: List[str], request: HttpRequest
    ):
        "Turning empty Query params to None instead of empty string"
        result = super().parse_querydict(data, list_fields, request)
        for k, v in list(result.items()):
            if v == "":
                del result[k]
        return result


api = NinjaAPI(parser=MyParser())


@api.post("/test")
def operation(request, body: List[str], emptyparam: str = None):
    return {"emptyparam": emptyparam, "body": body}


def test_parser():
    client = TestClient(api)
    response = client.post("/test?emptyparam", body="test\nbar")
    assert response.status_code == 200, response.content
    assert response.json() == {"emptyparam": None, "body": ["test", "bar"]}