Passed
Push — master ( f27b0e...1a00d3 )
by Mingyu
01:27
created

tests.views.TCBase.request()   B

Complexity

Conditions 2

Size

Total Lines 24
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 24
rs 8.9713
c 0
b 0
f 0
cc 2
nop 8

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
import ujson
2
from unittest import TestCase as TC
3
4
from flask import Response
5
6
from app import app
7
8
9
class TCBase(TC):
10
    def __init__(self, *args, **kwargs):
11
        TC.__init__(self, *args, **kwargs)
12
13
        self.client = app.test_client()
14
15
    def _create_fake_account(self):
16
        pass
17
18
    def _get_tokens(self):
19
        self.access_token = None
20
        self.refresh_token = None
21
22
    def setUp(self):
23
        self._create_fake_account()
24
        self._get_tokens()
25
26
    def tearDown(self):
27
        pass
28
29
    def json_request(self, method, target_url_rule, query_string=None, data=None, token=None, *args, **kwargs):
30
        """
31
        Helper for json request
32
33
        Args:
34
            method (func): Request method
35
            target_url_rule (str): URL rule for request
36
            query_string (dict): Query parameters
37
            data (dict): JSON payload (application/json)
38
            token (str) : JWT or OAuth's access token with prefix(Bearer, JWT, ...)
39
40
        Returns:
41
            Response
42
        """
43
        if token is None:
44
            token = self.access_token
45
46
        return method(
47
            target_url_rule,
48
            query_string=query_string,
49
            data=ujson.dumps(data) if data else None,
50
            content_type='application/json',
51
            headers={'Authorization': token},
52
            *args,
53
            **kwargs
54
        )
55
56
    def request(self, method, target_url_rule, query_string=None, data=None, token=None, *args, **kwargs):
57
        """
58
        Helper for common request
59
60
        Args:
61
            method (func): Request method
62
            target_url_rule (str): URL rule for request
63
            query_string (dict): Query parameters
64
            data (dict): Body parameters (application/x-www-form-urlencoded)
65
            token (str) : JWT or OAuth's access token with prefix(Bearer, JWT, ...)
66
67
        Returns:
68
            Response
69
        """
70
        if token is None:
71
            token = self.access_token
72
73
        return method(
74
            target_url_rule,
75
            query_string=query_string,
76
            data=data,
77
            headers={'Authorization': token},
78
            *args,
79
            **kwargs
80
        )
81
82
    def get_response_data(self, resp):
83
        return ujson.loads(resp.data.decode())
84